Promote uat → main (PROD): GRO-2159 drag-to-reorder + re-optimize #65
Reference in New Issue
Block a user
Delete Branch "flea/uat-to-main-gro-2159"
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?
Promote uat → main (PROD): GRO-2159 drag-to-reorder + re-optimize
Atomic
uat → mainpromotion. The uat tip (e93017b) sits on top of one additional already-completed feature, so this PR carries two features to production. Both aredone, both passed QA + post-deploy UAT regression on the deployed UAT app.Commits (main…uat, 3 commits)
e93017b— Promote dev → uat: GRO-2159 drag-to-reorder + re-optimize (#64)db11e5f— Promote dev → uat: GRO-2236 portal Book New service cards price + duration (#58)f549101— fix(GRO-2236): portal Book New service cards show price + duration (#57)GRO-2159 — Route Optimization: drag-to-reorder + optimize UX
Validation trail:
2026.06.09-e93017b— GRO-2282 (infra #644)resolveTargetStaffIdenforces groomer-own pre-mutationGRO-2236 — Portal Book New: service cards $undefined price / empty min (rides along)
Frontend-only display normalization (
src/portal/sections/Appointments.tsx):basePriceCents→price,durationMinutes→duration; hides absent fields. Validation trail:2026.06.09-db11e5f— GRO-2275doneat the UAT-verification level and is reaching prod via this atomic promotion. No dedicated Barkley security task was opened for it (low-risk frontend formatting fix already regression-passed). Please confirm acceptable for prod, or flag if a security pass is wanted.Deploy parity
e93017b== deployed UAT web tag2026.06.09-e93017b(verified in GRO-2284)flea/uat-to-main-gro-2159cut ate93017bso the PR head will not drift while uat advances.e93017b: Test · Lint & Typecheck · Build & Push Docker Image ✅Reviewer
Phase 4 code review: The Dogfather (CTO).
cc @cpfarhood
Phase 4 (uat → main) — APPROVED ✅
CTO code review complete. Promotion is clean and cleared for prod merge.
Scope verified —
main...uat= exactly 3 commits / 2 declared features, no surprise ride-along:e93017bGRO-2159 drag-to-reorder + re-optimize (#64)db11e5f/f549101GRO-2236 portal Book New price + duration (#57/#58)Code review
Routes.tsx: dnd-kit reorder is well-architected — optimistic update with rollback on PATCH failure, server-authoritative re-optimize adopted on success, keyboard/touch/pointer sensors +aria-labeldrag handles (accessible), reorder disabled during in-flight PATCH. Tests cover handle presence, conflict flag, and re-optimize-hint gating.Appointments.tsx(GRO-2236): pure display normalization —normalizeServicemapsbasePriceCents/durationMinutes→ flat shape (tolerates both payloads),formatServicePriceomits the line instead of printing$undefined. Exported pure fns, covered by tests.@dnd-kit/{core,sortable,utilities}— reputable, widely-used; in scope.Gates (all green / done)
e93017b: Test · Lint & Typecheck · Build & Push — all success (push + PR)PATCH /reorder+POST /optimizefor IDOR/authz-bypass, deploy parity confirmed)On the no-dedicated-security-pass for GRO-2236: acceptable for prod. The change is frontend display normalization only — no new network calls, no auth/data-access surface, no new deps. No security pass required.
Mergeable: yes. Approved — Flea to drive the prod merge + retag per uat→main protocol.
cc @cpfarhood