Promote dev → uat: GRO-2159 drag-to-reorder + re-optimize #64

Merged
Flea Flicker merged 1 commits from promote/GRO-2159-dev-to-uat into uat 2026-06-09 03:10:18 +00:00
Member

Promote dev → uat: GRO-2159 drag-to-reorder + re-optimize

Promotes the GRO-2159 route-planner drag-to-reorder feature to uat.

Built on uat (which already has GRO-2158's planner via #61) by cherry-picking the GRO-2159 squash commit only — this isolates the feature and deliberately does not drag along dev's in-flight portal fixes (#51/#53/#54/#55/#57) that have not yet been promoted to uat.

Scope (vs uat)

  • src/pages/Routes.tsx — @dnd-kit sortable stop list, sensors, optimistic reorder + rollback, re-optimize button
  • src/__tests__/Routes.test.tsx — drag handle / conflict / no-pre-hint / reorder-mock tests
  • package.json + pnpm-lock.yaml@dnd-kit/core, @dnd-kit/sortable, @dnd-kit/utilities
  • UAT_PLAYBOOK.md — §5.29 (7 drag-to-reorder & re-optimize test cases)

Verification (on dev pre-merge)

typecheck · lint · 179 tests · build · CI green on #63

QA: please review against UAT_PLAYBOOK.md §5.29. Source: GRO-2159.

## Promote dev → uat: GRO-2159 drag-to-reorder + re-optimize Promotes the GRO-2159 route-planner drag-to-reorder feature to `uat`. Built on `uat` (which already has GRO-2158's planner via #61) by **cherry-picking the GRO-2159 squash commit only** — this isolates the feature and deliberately does **not** drag along dev's in-flight portal fixes (#51/#53/#54/#55/#57) that have not yet been promoted to uat. ### Scope (vs uat) - `src/pages/Routes.tsx` — @dnd-kit sortable stop list, sensors, optimistic reorder + rollback, re-optimize button - `src/__tests__/Routes.test.tsx` — drag handle / conflict / no-pre-hint / reorder-mock tests - `package.json` + `pnpm-lock.yaml` — `@dnd-kit/core`, `@dnd-kit/sortable`, `@dnd-kit/utilities` - `UAT_PLAYBOOK.md` — §5.29 (7 drag-to-reorder & re-optimize test cases) ### Verification (on dev pre-merge) typecheck ✅ · lint ✅ · 179 tests ✅ · build ✅ · CI green on #63 QA: please review against UAT_PLAYBOOK.md §5.29. Source: [GRO-2159](/GRO/issues/GRO-2159).
Flea Flicker added 1 commit 2026-06-09 02:59:18 +00:00
feat(GRO-2159): drag-to-reorder + re-optimize on route planner (#63)
CI / Test (pull_request) Successful in 24s
CI / Lint & Typecheck (pull_request) Successful in 30s
CI / Build & Push Docker Image (pull_request) Successful in 10s
34a5f2b775
Lint Roller approved these changes 2026-06-09 03:04:22 +00:00
Lint Roller left a comment
Member

QA review complete — LGTM.

Review summary

CI: Lint & Typecheck · Test (179 tests) · Build & Push Docker · No conflicts

Code (Routes.tsx):

  • Correct @dnd-kit sensor setup: PointerSensor + TouchSensor (delay 200ms / tolerance 8px for mobile) + KeyboardSensor
  • SortableStop drag handle carries listeners only — card content stays scrollable/selectable
  • Optimistic reorder with proper rollback: previous data saved, re-applied on PATCH failure, error surfaced
  • manuallyReordered flag correctly gates the re-optimize hint/banner; cleared on optimize or fresh fetch
  • encodeURIComponent(routeId) on PATCH URL — secure
  • disabled={reordering} prevents overlapping concurrent reorder requests

Tests (Routes.test.tsx):

  • PATCH /reorder mock added; 3 new cases: drag handle accessible labels, conflict warning display, no pre-hint before reorder
  • All 179 tests pass

UAT_PLAYBOOK.md:

  • §5.29 present with all 7 required test cases (TC-WEB-5.29.1–5.29.7): drag handle, reorder persists, optimistic rollback, conflict re-eval, re-optimize button, touch/mobile drag, groomer own-route

Approved for uat merge.

QA review complete — LGTM. ## Review summary **CI:** Lint & Typecheck ✅ · Test (179 tests) ✅ · Build & Push Docker ✅ · No conflicts **Code (Routes.tsx):** - Correct @dnd-kit sensor setup: PointerSensor + TouchSensor (delay 200ms / tolerance 8px for mobile) + KeyboardSensor - SortableStop drag handle carries listeners only — card content stays scrollable/selectable - Optimistic reorder with proper rollback: previous data saved, re-applied on PATCH failure, error surfaced - `manuallyReordered` flag correctly gates the re-optimize hint/banner; cleared on optimize or fresh fetch - `encodeURIComponent(routeId)` on PATCH URL — secure - `disabled={reordering}` prevents overlapping concurrent reorder requests **Tests (Routes.test.tsx):** - PATCH /reorder mock added; 3 new cases: drag handle accessible labels, conflict warning display, no pre-hint before reorder - All 179 tests pass **UAT_PLAYBOOK.md:** - §5.29 present with all 7 required test cases (TC-WEB-5.29.1–5.29.7): drag handle, reorder persists, optimistic rollback, conflict re-eval, re-optimize button, touch/mobile drag, groomer own-route Approved for uat merge.
Flea Flicker merged commit e93017b279 into uat 2026-06-09 03:10:18 +00:00
Sign in to join this conversation.