From 18ead668ec6f590e570c071acd4e177c2dd27499 Mon Sep 17 00:00:00 2001 From: Jakub Zych Date: Fri, 2 Oct 2026 13:18:30 +0200 Subject: [PATCH] docs(12-03): update state and roadmap progress after plan 12-03 --- .planning/ROADMAP.md | 6 +++--- .planning/STATE.md | 19 ++++++++++++------- .../12-03-SUMMARY.md | 4 ++++ 3 files changed, 19 insertions(+), 10 deletions(-) diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index 1183250..b4cada2 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**: 2/5 plans executed +**Plans**: 3/5 plans executed Plans: @@ -624,7 +624,7 @@ Plans: - [x] 12-02-PLAN.md — Active context, collections and share: token-aware resolver, AccessibleBy, provisioning, gates, collection serializer, collections routes, me/context, realtime/channels, collection/share, per-route scopes and per-album delete (D-26) **Wave 3** *(blocked on Wave 2 completion)* -- [ ] 12-03-PLAN.md — Household and invitations: InvitationService, transactional mail job with encrypted token, notifications write path, members, accept, 409 guard, nuxt-collections flow +- [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 @@ -726,7 +726,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 | 2/5 | In Progress| | +| 12. Płytarium API — Collections and Albums | 3/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 e926840..d1b481e 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-02-PLAN.md -last_updated: "2026-10-02T10:39:08.775Z" +stopped_at: Completed 12-03-PLAN.md +last_updated: "2026-10-02T11:18:14.935Z" last_activity: 2026-10-02 last_activity_desc: Phase 12 execution started -state_head: 85a45dbc80b0f4196b2782a9de1a0b5184ce2b0c +state_head: 6f37a3782f59f1d786016197f485c6d8f466e38e progress: total_phases: 20 completed_phases: 10 total_plans: 101 - completed_plans: 98 + completed_plans: 99 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: 3 of 5 +Plan: 4 of 5 Status: Ready to execute Last activity: 2026-10-02 — Phase 12 execution started @@ -153,6 +153,7 @@ Progress: [██████░░░░] 60% | Phase 11.2 P03 | 13 min | 3 tasks | 11 files | | 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 | ## Accumulated Context @@ -440,6 +441,10 @@ Recent decisions affecting current work: - [Phase 12]: 12-02: Parity cases that mutate state are recorded from a fresh PHP tinker reset (parity/fonoteka_reset.php) and replayed from a fresh fonoteka seed per case; id sequences lifted to 8 digits - [Phase 12]: 12-02: The backend admin album binding keeps a non-provisioning resolver; only API callers provision - [Phase 12]: 12-02: Winter HttpException pages are embedded as winter_.html with only the app.url stylesheet origin templated +- [Phase 12]: Invitation ValidationExceptions (store required|email, normalizeEmail) answer Winter's 500 error page, as recorded PHP does; the store runs a Laravel RFCValidation email port before normalizeEmail +- [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) ### Pending Todos @@ -488,6 +493,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-10-02T10:39:08.259Z -Stopped at: Completed 12-02-PLAN.md +Last session: 2026-10-02T11:18:14.401Z +Stopped at: Completed 12-03-PLAN.md Resume file: None diff --git a/.planning/phases/12-p-ytarium-api-collections-and-albums/12-03-SUMMARY.md b/.planning/phases/12-p-ytarium-api-collections-and-albums/12-03-SUMMARY.md index 8eac866..86a7bf5 100644 --- a/.planning/phases/12-p-ytarium-api-collections-and-albums/12-03-SUMMARY.md +++ b/.planning/phases/12-p-ytarium-api-collections-and-albums/12-03-SUMMARY.md @@ -276,3 +276,7 @@ None. Production needs `app.key` set (already required for encrypted columns) an --- *Phase: 12-p-ytarium-api-collections-and-albums* *Completed: 2026-10-02* + +## Self-Check: PASSED + +All 17 created files listed in key-files exist on disk. Commits bf0a9dd, 63774b6 and f88c01e exist in fonoteka.go and 6f37a37 in summercms.go. Plan-level verification passed: `go vet ./...` and `go test ./... -count=1` in fonoteka.go (root, parity, the fonoteka plugin and sm-user-plugin), `TestParityCorpus` with 63 ported and passing, `TestFonotekaNuxtFlows/nuxt-collections` passing, and `check_corpus.go --require-recorded --check-secrets` exiting 0.