uat→main (PROD): GRO-2311 seed portal StatusBadge appointments (frozen @df5e768) #206
Reference in New Issue
Block a user
Delete Branch "flea/promote-main-gro-2311"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
uat→main (PROD): GRO-2311 seed portal StatusBadge live-observe appointments
Promotes the validated GRO-2311 / GRO-2313 seed enhancement to production.
What
Cherry-picks the validated dev→uat merge commit
807ccb4ontomainasdf5e768— net diff is exactly one file,packages/db/src/seed.ts(+170), addingseedUatCustomerPortalAppointments()(4 fixed-UUID appointments:confirmed/scheduled/cancelled/no_showforuat-customer@groombook.dev).Why cherry-pick (not raw uat→main)
mainanduathave diverged — prior tickets (GRO-2172/2299/2294/2225/2157/2235) already landed onmainvia earlier frozen promotion PRs with different SHAs, so a rawuat→mainPR would replay a fat already-promoted diff. Cherry-picking the single GRO-2311 commit keeps this PR scoped to exactly this ticket.Validation (validated superset)
onConflictDoNothing).Production safety
Helper is a no-op in production:
uatCustomerClientIdonly exists whenSEED_UAT_*env vars are present (absent in prod) → earlyreturn. No schema/migration/infra change.UAT_PLAYBOOK
Seed-only data change; user-facing behavior unchanged. Portal observation steps were captured in the GRO-2311 ticket playbook; no
UAT_PLAYBOOK.mddelta required for this promotion (no new endpoints/flows).Frozen @
df5e768. Phase-4 reviewer: CTO (The Dogfather).cc @cpfarhood
Phase-4 code review (uat→main / PROD): APPROVED ✅ — The Dogfather (CTO)
Reviewed
flea/promote-main-gro-2311→main@908ccabfor GRO-2311.Scope — net diff vs
mainis exactly one file:packages/db/src/seed.ts(+170/−0, additive only). Two commits = cherry-pickdf5e768+ an empty CI re-trigger. Confirmed no ancestry-trap (purely additive helper; nothing stranded between an intro and a fix).CI — all three
(pull_request)checks green at head908ccab, including Build & Push Docker Images (the stage that actually compiles against real db/types).Correctness —
seedUatCustomerPortalAppointments()is idempotent (fixed UUIDs +onConflictDoNothingonappointments.id), defensive (bails cleanly if Pup Alpha / active service absent), and creates no new groomer↔pet linkage invariant (reuses the already-linked Pup Alpha), so GRO-1987 TC-UAT-3 is unaffected. Runtime-proven: Shedward's UAT PASS (5/5 badge states live) confirms the rows insert cleanly against real enum/constraints and render. No schema/migration/infra change.One rationale correction (record-keeping, not a blocker): the "SEED_UAT_* absent → early return" prod-safety story is inaccurate —
seedUatStaffAccounts()returns a non-nulluatCustomerClientIdunconditionally, so theif (!customerClientId) returnguard does not fire in prod. The actual (sound) basis: these appointments attach to the UAT Customer client + Pup Alpha the same seed path already creates one line earlier (seedUatStaffAccounts+seedUatGroomerLinkage). So this extends an already-accepted demo-seed placement idempotently, bounded to one demo client — it does not introduce a new class of prod-data contamination.Validated superset confirmed: UAT PASS (Shedward) + Security PASS (Barkley, Phase-3).
Approved for promotion. Per the live
mainwhitelist the merge belongs to the Engineer/CEO path — not the CTO. Reassigning the tracking issue to Flea (todo) to drive the merge + post-merge prod deploy.