docs(03-03): complete typed params, rollback, and first real parity pass plan

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Jakub Zych
2026-09-17 20:24:39 +02:00
parent 8e3bf266d8
commit f4fecc959f
4 changed files with 173 additions and 9 deletions

View File

@@ -3,8 +3,8 @@ gsd_state_version: 1.0
milestone: v1.0
milestone_name: milestone
status: executing
stopped_at: Completed 03-02-PLAN.md
last_updated: "2026-09-17T18:14:02.630Z"
stopped_at: Completed 03-03-PLAN.md
last_updated: "2026-09-17T18:23:37.257Z"
last_activity: 2026-09-17
progress:
total_phases: 15
@@ -26,7 +26,7 @@ See: .planning/PROJECT.md (updated 2026-09-16)
## Current Position
Phase: 03 (first-vertical-slice-genres-end-to-end) — EXECUTING
Plan: 3 of 4
Plan: 4 of 4
Status: Ready to execute
Last activity: 2026-09-17
@@ -55,6 +55,7 @@ Progress: [█████████░] 85%
*Updated after each plan completion*
| Phase 03 P03-01 | 17 min | 2 tasks | 52 files |
| Phase 03 P03-02 | 5 min | 2 tasks | 8 files |
| Phase 03 P03-03 | 8 min | 2 tasks | 17 files |
## Accumulated Context
@@ -91,6 +92,10 @@ Recent decisions affecting current work:
- [Phase 03]: lagoon.OrderBy takes a caller allow-list so the framework never hardcodes Fonoteka table names; the handler passes PHP PolishOrder::ALLOWED_COLUMNS — summercms.go must stay app-agnostic; PolishOrder columns live at the Fonoteka call site
- [Phase 03]: Duplicate non_empty query keys last-win, matching PHP parse_str; invalid then 1 is accepted, 1 then invalid is 422 — PHP parse_str last-wins confirmed with php -r; Go uses vals[len(vals)-1]
- [Phase 03]: Invalid stored context is rewritten to the lowest-ID accessible kind=collection row; auto-provisioning stays out of this slice — Plan 03-02 ports only the JWT default resolve path; CollectionProvisioner is Phase 12
- [Phase 03]: Route constraints compile regex and enum allow-lists at registration; request path text is only matched — D-15 T-03-07: PHP ->where() maps onto surf.Where/WhereIn; malformed and unknown IDs share a 404
- [Phase 03]: A ported route with a trusted seed_hook skips the global PHP bootstrap replay — D-20: unported register/login and POST genres; the hook mints a test-only JWT
- [Phase 03]: Corpus passing increments only after the ported subtest succeeds; pending never counts as passing — QA-04 T-03-06: 154 recorded, 1 passing, 153 pending
- [Phase 03]: Colliding fixture IDs are derived from CanonicalGenres seed order (rock=1, electronic=2, jazz=4) — D-20: set id:token, id:wishlist-album, id:genre from PHP seed order, not user input
### Pending Todos
@@ -112,6 +117,6 @@ Items acknowledged and carried forward from previous milestone close:
## Session Continuity
Last session: 2026-09-17T18:13:51.817Z
Stopped at: Completed 03-02-PLAN.md
Last session: 2026-09-17T18:23:37.224Z
Stopped at: Completed 03-03-PLAN.md
Resume file: None