docs(10): record plan-time decisions and plan count

This commit is contained in:
Jakub Zych
2026-09-27 13:26:11 +02:00
parent ec97007637
commit 42c7216f5f

View File

@@ -50,6 +50,13 @@ Requirement: ADMIN-06. Not in scope: runtime plugin extensions (plugin JS/CSS as
- **D-22:** The filter bar is in scope: it renders `config_filter.yaml` scopes of the three Phase 9 shapes (switch, daterange, model-backed) and drives `filter[<scope>]`. Płytarium has no filters, so it is verified with fixtures. - **D-22:** The filter bar is in scope: it renders `config_filter.yaml` scopes of the three Phase 9 shapes (switch, daterange, model-backed) and drives `filter[<scope>]`. Płytarium has no filters, so it is verified with fixtures.
- **D-23:** Testing follows the lean rules: Vitest component and unit tests as the phase's last plan; Go tests for every `cabana` change. Browser e2e (Playwright) is not part of Phase 10. - **D-23:** Testing follows the lean rules: Vitest component and unit tests as the phase's last plan; Go tests for every `cabana` change. Browser e2e (Playwright) is not part of Phase 10.
### Plan-time resolutions (2026-09-27, after research)
- **D-24:** `messages` placeholders use phrasebook/Winter syntax `:count`, `:name`, `:term` (with `:Name`/`:NAME` casing variants); D-13's braces were notation only. The SPA's interpolation mirrors `phrasebook.interpolate` so server and client behave identically and Winter strings port verbatim.
- **D-25:** `fonoteka.go` adds a Collections side-menu item (`collections`, lucide `library`, permission `golem15.fonoteka.access_collections`) as a documented deviation from the PHP navigation; navigation is not part of the API parity contract.
- **D-26:** The Collections `owner` relation field is read-only in Phase 10: relation fields whose foreign key is a protected fill key are rendered as a read-only label; `protectedFillKey` and `FormBeforeCreate` are not widened.
- **D-27:** Model-backed filter scopes (D-22) get their choices from an optional model capability `FilterOptions(scope string) []pact.Option`, served at `GET {prefix}/api/v1/{vendor}/{plugin}/{controller}/filters/{scope}/options`, verified with fixtures only.
- **D-28:** Phase 10 is planned as 5 plans: 01 tracer (prefix, cookie+CSRF, embed/serve, admin OpenAPI pipeline, SPA scaffold with login + nav shell + read-only Genres list, fonoteka lang/icons), 02 backend contract (backend lang + string bundle, messages, toolbar, relation options + save, filter options, typed OpenAPI, fonoteka YAML), 03 SPA lists/forms/filters/settings for all five controllers, 04 relation manager + shell polish, 05 unit tests (Vitest + Go) and `check-phase10.sh`.
### Claude's Discretion ### Claude's Discretion
- SPA state management (Pinia or composables), router setup, HTTP client (openapi-fetch or a thin wrapper over generated types). - SPA state management (Pinia or composables), router setup, HTTP client (openapi-fetch or a thin wrapper over generated types).
- Dev loop: Vite dev server proxying the API vs rebuilding into the embedded path; recommended a Vite proxy to a running `summer serve` for development. - Dev loop: Vite dev server proxying the API vs rebuilding into the embedded path; recommended a Vite proxy to a running `summer serve` for development.