docs(10): create phase plan
This commit is contained in:
@@ -664,21 +664,28 @@ Plans 3 and 4 can merge into one if the user wants four plans.
|
||||
| A9 | The "admin's locale" is the browser `Accept-Language` (backend users have no locale column) | Pattern 6 | Low |
|
||||
| A10 | A 30-second `blacklist_grace` for admin cookie refresh is acceptable security-wise | Pattern 3 | Low-Medium — window where a rotated token still works |
|
||||
|
||||
## Open Questions
|
||||
## Open Questions (RESOLVED)
|
||||
|
||||
1. **Add a Collections side-menu item in fonoteka.go?**
|
||||
All five questions were resolved at plan time (2026-09-27); the decisions are recorded in 10-CONTEXT.md and implemented by the plans named below.
|
||||
|
||||
1. **Add a Collections side-menu item in fonoteka.go?** — RESOLVED by D-25
|
||||
- Known: neither PHP nor Go navigation has one; the design shows "Kolekcje" (`library`); success criteria 2–3 need Collections reachable.
|
||||
- Recommendation: add it (`collections`, `library`, permission `golem15.fonoteka.access_collections`) as a deliberate, documented deviation — navigation is not part of the API parity contract. Resolved at discuss/plan time.
|
||||
2. **Collections `owner` relation field under D-18.**
|
||||
- **RESOLVED (D-25):** fonoteka.go adds the `collections` side-menu item (lucide `library`, permission `golem15.fonoteka.access_collections`) as a documented deviation from the PHP navigation (Plan 10-01).
|
||||
2. **Collections `owner` relation field under D-18.** — RESOLVED by D-26
|
||||
- Known: `owner_id` is a protected fill key; `FormBeforeCreate` forces the owner to the admin's matched user; Winter let admins pick an owner (`emptyOption: current_user`).
|
||||
- Recommendation: keep `owner` **read-only** in Phase 10 (schema flag `readOnly`/`disabled` for relation fields whose FK is protected; shown as a label from `meta.labels`); do not widen `protectedFillKey`. Revisit only if the user wants owner reassignment.
|
||||
3. **Placeholder syntax `{count}` vs `:count`.**
|
||||
- **RESOLVED (D-26):** `owner` is read-only in Phase 10 (relation fields whose foreign key is a protected fill key are served `readOnly` and rendered as a label from `meta.labels`); `protectedFillKey` and `FormBeforeCreate` are not widened (Plan 10-02 Task 1).
|
||||
3. **Placeholder syntax `{count}` vs `:count`.** — RESOLVED by D-24
|
||||
- Known: phrasebook and Winter lang files use `:name`; D-13 writes `{count}`.
|
||||
- Recommendation: keep phrasebook's `:name` syntax in YAML (Winter strings port verbatim, server and SPA interpolate identically) and treat D-13's braces as notation; SPA `interpolate()` mirrors `phrasebook.interpolate` (`:name`, `:Name`, `:NAME`). Needs user confirmation because D-13 is locked.
|
||||
4. **Choices for model-backed filter scopes (D-22).**
|
||||
- **RESOLVED (D-24, locked in 10-CONTEXT.md plan-time resolutions):** `messages` placeholders use phrasebook/Winter syntax `:count`, `:name`, `:term` (with `:Name`/`:NAME` casing variants); D-13's braces were notation only, and the SPA's interpolation mirrors `phrasebook.interpolate` (Plans 10-02 Task 2 and 10-03 Task 1).
|
||||
4. **Choices for model-backed filter scopes (D-22).** — RESOLVED by D-27
|
||||
- Known: nothing serves options for `type: scope`; `modelClass` is a PHP class string with no Go model registry.
|
||||
- Recommendation: optional model capability `FilterOptions(scope string) []pact.Option` exposed via `GET .../filters/{scope}/options` (or inlined into the list schema when small). Verified with fixtures only, since Płytarium has no filters.
|
||||
5. **Where exactly the `backend` lang namespace lives** (`phrasebook/backendlang` embed vs a surf-passed FS). Recommendation: phrasebook embed (simplest, cycle-free).
|
||||
- **RESOLVED (D-27):** optional model capability `FilterOptions(scope string) []pact.Option` served at `GET {prefix}/api/v1/{vendor}/{plugin}/{controller}/filters/{scope}/options` (not inlined into the list schema), verified with fixtures only (Plan 10-02 Task 3).
|
||||
5. **Where exactly the `backend` lang namespace lives** (`phrasebook/backendlang` embed vs a surf-passed FS). Recommendation: phrasebook embed (simplest, cycle-free). — RESOLVED
|
||||
- **RESOLVED (phrasebook embed, as planned in 10-02):** the files live at `phrasebook/backend/lang/{en,pl}/lang.yaml`, embedded by `phrasebook/lang.go` and loaded in `Activate` as namespace `backend` right after `lagoon`; projects override or add locales through `pact.HasLangOverrides` without a Node rebuild (D-20; Plan 10-02 Task 2).
|
||||
|
||||
## Environment Availability
|
||||
|
||||
@@ -785,7 +792,7 @@ Plans 3 and 4 can merge into one if the user wants four plans.
|
||||
- Codebase baseline and required cabana changes: HIGH — every claim read this session with line ranges
|
||||
- OpenAPI → TS pipeline: HIGH — executed end-to-end in a scratch module
|
||||
- JS stack: MEDIUM-HIGH — registry-verified, pinned to the team's installed versions
|
||||
- SPA patterns (serving, cookie flow, relation save design): MEDIUM — standard practice fitted to this codebase; Open Questions 1–4 need user input
|
||||
- SPA patterns (serving, cookie flow, relation save design): MEDIUM — standard practice fitted to this codebase; Open Questions 1–5 resolved at plan time (D-24 to D-27, phrasebook embed)
|
||||
|
||||
**Research date:** 2026-09-27
|
||||
**Valid until:** 2026-10-27 (JS versions move fast; re-run `npm view` before pinning if planning slips)
|
||||
|
||||
Reference in New Issue
Block a user