diff --git a/.planning/phases/10-admin-vue-spa/10-CONTEXT.md b/.planning/phases/10-admin-vue-spa/10-CONTEXT.md index 0b5f656..fee5f11 100644 --- a/.planning/phases/10-admin-vue-spa/10-CONTEXT.md +++ b/.planning/phases/10-admin-vue-spa/10-CONTEXT.md @@ -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[]`. 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. +### 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 - 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.