diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 148c86c..1229a26 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -613,7 +613,7 @@ Plans: 4. Artists/genres/styles lookup endpoints used by the Albums UI pass the parity diff. 5. A request-DTO-level fuzz over every write endpoint asserts unknown and server-owned keys are never persisted (inherits the HTTP half of Phase 5 criterion 3; the HTTP layer does not exist until Phase 6/12). -**Plans**: 3/5 plans executed +**Plans**: 4/5 plans executed Plans: @@ -627,7 +627,7 @@ Plans: - [x] 12-03-PLAN.md — Household and invitations: InvitationService, transactional mail job with encrypted token, notifications write path, members, accept, 409 guard, nuxt-collections flow **Wave 4** *(blocked on Wave 3 completion)* -- [ ] 12-04-PLAN.md — Albums, search and lookups: full album write path, covers through fetchguard, uploads, bulk/stats/value/missing/sync, Scout-exact search recount, lookups, nuxt-albums flow, created/updated goldens +- [x] 12-04-PLAN.md — Albums, search and lookups: full album write path, covers through fetchguard, uploads, bulk/stats/value/missing/sync, Scout-exact search recount, lookups, nuxt-albums flow, created/updated goldens **Wave 5** *(blocked on Wave 4 completion)* - [ ] 12-05-PLAN.md — Unit tests last: D-18 leak test with D-19 totals, route-table scope test, request-DTO fuzz, T-12 threat tests, coverage, check-phase12.sh, security review and validation sign-off @@ -747,7 +747,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → | 11. Jobs, realtime and search infrastructure | 8/8 | In Progress| | | 11.1. SummerCMS documentation for humans and AI agents | 7/7 | In Progress| | | 11.2. summercms.io Alpha 0.1 landing page on SummerCMS | 3/3 | In Progress| | -| 12. Płytarium API — Collections and Albums | 3/5 | In Progress| | +| 12. Płytarium API — Collections and Albums | 4/5 | In Progress| | | 13. Płytarium API — wishlist, notifications, CSV, credentials, public routes | 0/TBD | Not started | - | | 14. Domain jobs and external integrations | 0/TBD | Not started | - | | 15. Cutover | 0/TBD | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index b3c1b8b..8eb8bac 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -4,16 +4,16 @@ milestone: v1.0 current_phase: 12 current_phase_name: Płytarium API — Collections and Albums status: executing -stopped_at: Completed 12-03-PLAN.md -last_updated: "2026-10-02T12:36:15.774Z" +stopped_at: Completed 12-04-PLAN.md +last_updated: "2026-10-02T12:44:01.203Z" last_activity: 2026-10-02 last_activity_desc: Phase 12 execution started -state_head: 66497635906aea588e28ba6d34afc6576423a662 +state_head: 3cf2b38a8c84fc1251599679b9ab16f5b321566d progress: total_phases: 21 completed_phases: 10 total_plans: 101 - completed_plans: 99 + completed_plans: 100 milestone_name: milestone --- @@ -29,7 +29,7 @@ See: .planning/PROJECT.md (updated 2026-09-16) ## Current Position Phase: 12 (Płytarium API — Collections and Albums) — EXECUTING -Plan: 4 of 5 +Plan: 5 of 5 Status: Ready to execute Last activity: 2026-10-02 — Phase 12 execution started @@ -154,6 +154,7 @@ Progress: [██████░░░░] 60% | Phase 12 P01 | 39 min | 4 tasks | 57 files | | Phase 12 P02 | 46 min | 3 tasks | 119 files | | Phase 12 P03 | 36 min | 3 tasks | 72 files | +| Phase 12 P04 | 82 min | 3 tasks | 226 files | ## Accumulated Context @@ -446,6 +447,11 @@ Recent decisions affecting current work: - [Phase 12]: Invitation mail is a conga Enqueue River job on the invite transaction with the token as lagoon.Encrypted ciphertext; the worker skips superseded or non-pending invitations - [Phase 12]: Every resolver caller maps errors through writeResolveError (404 page, 409 pending-invitation page, else opaque 500) - [Phase 12]: Route parity cases needing an invitation token seed it on both sides as secret:invite; flows read a PHP-minted token from the log mailer (php_parity.sh serve-mail, invite-token) +- [Phase 12]: 12-04: slugs and artist name keys port Laravel Str::slug/Str::ascii (czeslaw-niemen, rb), non-Latin scripts dropped +- [Phase 12]: 12-04: album search engine ids are re-gated by access and active collection only, as Scout's query callback; filters stay engine-side +- [Phase 12]: 12-04: sync versions compare at whole seconds so PHP's base64 cursor round-trips; albums/value prints exact sums like sprintf('%.2f') +- [Phase 12]: 12-04: GORM callback handles are used through a NewDB session (cleanSession); WithContext keeps the write's bind variables +- [Phase 12]: 12-04: parity album state uses fixed ids/timestamps on both sides; recorded query strings are restored from the spec ### Pending Todos @@ -494,6 +500,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-10-02T11:18:14.401Z -Stopped at: Completed 12-03-PLAN.md +Last session: 2026-10-02T12:44:00.552Z +Stopped at: Completed 12-04-PLAN.md Resume file: None