diff --git a/.planning/REQUIREMENTS.md b/.planning/REQUIREMENTS.md index b6a17c8..ad6ca20 100644 --- a/.planning/REQUIREMENTS.md +++ b/.planning/REQUIREMENTS.md @@ -23,7 +23,7 @@ Requirements for v1 (the Płytarium port). Each maps to roadmap phases. "User" b - [x] **CLI-01**: The `summer` binary (cobra) discovers commands registered by plugins and offers rich output (spinner, progress bar, table, prompts) with non-TTY degradation, following the summer-bonfire design - [x] **CLI-02**: Scaffolding commands generate a plugin, model, migration, command, job and admin controller with stubs that compile -- [ ] **CLI-03**: Migration commands run up, status, and roll back the last migration of a named plugin +- [x] **CLI-03**: Migration commands run up, status, and roll back the last migration of a named plugin - [ ] **CLI-04**: Plugins register recurring commands (daily or interval) that a scheduler runs in-process or via `summer schedule:run` - [ ] **CLI-05**: Płytarium commands are ported: oauth-client (create, list without reprinting secrets, add redirect URIs, set scope ceiling), prune-notifications, reindex with drop-old-index flag - [ ] **CLI-06**: Queue worker runs in-process or via `summer queue:work` @@ -46,7 +46,7 @@ Requirements for v1 (the Płytarium port). Each maps to roadmap phases. "User" b - [x] **DATA-08**: A polymorphic file attachment table (owner type, owner id, field, disk path, sort order, public/private) backs attachOne and attachMany, stored via gocloud.dev/blob with the same public URL shape - [x] **DATA-09**: All 25 Płytarium models and their squashed migration set are ported with matching table names, columns, indexes and defaults (migration count is not itself an acceptance number — squashed per plan-time decision D-01 in 05-CONTEXT.md) - [x] **DATA-10**: Paginated responses use the exact `{data, meta{current_page, last_page, per_page, total}}` envelope without a links key -- [ ] **DATA-11**: Other plugins can hook a model's lifecycle through the GORM callback registry and extend its schema with a companion migration +- [x] **DATA-11**: Other plugins can hook a model's lifecycle through the GORM callback registry and extend its schema with a companion migration ### HTTP and routing (HTTP) @@ -165,7 +165,7 @@ Which phases cover which requirements. Updated during roadmap creation. | KERN-09 | Phase 1 | Complete | | CLI-01 | Phase 1 | Complete | | CLI-02 | Phase 4 | Complete | -| CLI-03 | Phase 5 | Pending | +| CLI-03 | Phase 5 | Complete | | CLI-04 | Phase 11 | Pending | | CLI-05 | Phase 14 | Pending | | CLI-06 | Phase 11 | Pending | @@ -182,7 +182,7 @@ Which phases cover which requirements. Updated during roadmap creation. | DATA-08 | Phase 5 | Complete | | DATA-09 | Phase 5 | Complete | | DATA-10 | Phase 5 | Complete | -| DATA-11 | Phase 5 | Pending | +| DATA-11 | Phase 5 | Complete | | HTTP-01 | Phase 3 | Complete | | HTTP-02 | Phase 3 | Complete | | HTTP-03 | Phase 6 | Pending | diff --git a/.planning/ROADMAP.md b/.planning/ROADMAP.md index a6b00bc..577106a 100644 --- a/.planning/ROADMAP.md +++ b/.planning/ROADMAP.md @@ -202,7 +202,7 @@ Plans: **Wave 4** *(blocked on Wave 3 completion)* -- [ ] 05-05-PLAN.md — Remaining models, D-02 schema-diff proof, test-only DATA-11 fixture plugin, CLI-03 verification +- [x] 05-05-PLAN.md — Remaining models, D-02 schema-diff proof, test-only DATA-11 fixture plugin, CLI-03 verification **Wave 5** *(blocked on Wave 4 completion)* @@ -391,7 +391,7 @@ Phases execute in numeric order: 1 → 2 → 3 → 4 → 5 → 6 → 7 → 8 → | 2. API parity harness bootstrap | 5/5 | Complete | 2026-09-17 | | 3. First vertical slice — genres end to end | 4/4 | Complete | 2026-09-17 | | 4. CLI scaffolding, i18n and mail | 4/4 | Complete | 2026-09-18 | -| 5. Data layer full fidelity | 4/6 | In Progress| | +| 5. Data layer full fidelity | 5/6 | In Progress| | | 6. HTTP routing, auth groups and rate limiting | 0/TBD | Not started | - | | 7. User plugin and authentication | 0/TBD | Not started | - | | 8. OAuth2.1 authorization server | 0/TBD | Not started | - | diff --git a/.planning/STATE.md b/.planning/STATE.md index 684bfbe..b948e01 100644 --- a/.planning/STATE.md +++ b/.planning/STATE.md @@ -3,14 +3,14 @@ gsd_state_version: 1.0 milestone: v1.0 milestone_name: milestone status: executing -stopped_at: Completed 05-04-PLAN.md -last_updated: "2026-09-18T18:05:28.925Z" +stopped_at: Completed 05-05-PLAN.md +last_updated: "2026-09-18T18:27:42.970Z" last_activity: 2026-09-18 progress: total_phases: 15 completed_phases: 4 total_plans: 23 - completed_plans: 21 + completed_plans: 22 percent: 27 --- @@ -26,11 +26,11 @@ See: .planning/PROJECT.md (updated 2026-09-16) ## Current Position Phase: 05 (data-layer-full-fidelity) — EXECUTING -Plan: 5 of 6 +Plan: 6 of 6 Status: Ready to execute Last activity: 2026-09-18 -Progress: [█████████░] 91% +Progress: [██████████] 96% ## Performance Metrics @@ -67,6 +67,7 @@ Progress: [█████████░] 91% | Phase 05 P02 | 27 min | 3 tasks | 32 files | | Phase 05-data-layer-full-fidelity P03 | 15 min | 3 tasks | 28 files | | Phase 05 P04 | 18 min | 3 tasks | 18 files | +| Phase 05 P05 | 18 min | 3 tasks | 18 files | ## Accumulated Context @@ -140,6 +141,10 @@ Recent decisions affecting current work: - [Phase 05]: Blob keys are partition+disk_name (no public/protected prefix); fileblob roots at storage/app/uploads — StaticHandler reconstructs keys from PartitionDirectory+disk_name; cutover can point bucket_url at uploads/public - [Phase 05]: DeleteForOwner afterCommit is an in-tx key collector; DeleteKeys removes originals and thumb__ prefixes after commit — GORM has no post-commit hook; a rollback must not have already deleted bytes - [Phase 05]: Album/Collection MorphName returns the PHP class string and does not import attach (models stay a leaf) — models-leaf rule; interface satisfaction is implicit +- [Phase 05]: Settings is golem15_fonoteka_settings singleton with typed search_use_typesense BOOLEAN (RESEARCH Open Question 2) — PHP SettingsModel over system_settings is not ported; dedicated typed table is the user-resolved storage +- [Phase 05]: notifications/wishlist_subscriptions/wishlist_digest_queue have no FK on user_id/collection_id, matching PHP (Open Question 3 / T-05-18) — PHP migrations omit ->foreign() on these tables; D-02 matches actual constraints rather than fixing them +- [Phase 05]: D-02 allow-list is settings table, users column-count (no widen_users), and the shipped extra oauth_refresh_tokens.user_id FK — Intended gaps only: Open Question 2, D-03/AUTH-02, and P3 D-17 freeze of 05-03 extra FK +- [Phase 05]: DATA-11 fixture plugin is test-only: no process-wide Register, not in app.PluginIDs or plugins.gen.go — CONTEXT.md discretion: fixture plugin in tests is acceptable; production binary must not load it ### Pending Todos @@ -161,6 +166,6 @@ Items acknowledged and carried forward from previous milestone close: ## Session Continuity -Last session: 2026-09-18T18:05:28.907Z -Stopped at: Completed 05-04-PLAN.md +Last session: 2026-09-18T18:27:05.252Z +Stopped at: Completed 05-05-PLAN.md Resume file: None