docs(16.3-04): complete unit tests and phase gate plan
Record SUMMARY, advance STATE/ROADMAP to 4/4 plans executed, and mark Phase 16.3 ready for verify-work after the gate passed. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
@@ -1044,7 +1044,7 @@ Plans:
|
||||
5. Module READMEs and `docs/` cover the token API, scopes and CLI commands.
|
||||
6. The new code has unit tests, delivered in the phase's last plan.
|
||||
|
||||
**Plans:** 3/4 plans executed
|
||||
**Plans:** 4/4 plans executed
|
||||
|
||||
Plans:
|
||||
**Wave 1**
|
||||
@@ -1057,7 +1057,7 @@ Plans:
|
||||
- [x] 16.3-03-PLAN.md — Journal: journal and journal:read scopes, token auth through ResolveBackend with byte-identical bodies (reverses Phase 15 D-15), Journal README and the ResolveBackend docs example; release gate (human), summercms tag after v0.1.20, Journal go.mod and host gitlink bumps
|
||||
|
||||
**Wave 4** *(blocked on Wave 3 completion)*
|
||||
- [ ] 16.3-04-PLAN.md — Unit tests: scope rules, route classification, guard, resolver, account API, CLI, migration, SPA backstops, Journal token matrix; Postgres tests for a Docker host; phase gate scripts/check-phase16.3.sh; validation map
|
||||
- [x] 16.3-04-PLAN.md — Unit tests: scope rules, route classification, guard, resolver, account API, CLI, migration, SPA backstops, Journal token matrix; Postgres tests for a Docker host; phase gate scripts/check-phase16.3.sh; validation map
|
||||
|
||||
### Phase 17: Blog companions
|
||||
|
||||
|
||||
@@ -4,16 +4,16 @@ milestone: v1.0
|
||||
current_phase: "16.3"
|
||||
current_phase_name: Backend admin personal API tokens with scopes
|
||||
status: executing
|
||||
stopped_at: Completed 16.3-03-PLAN.md
|
||||
last_updated: "2026-10-11T11:08:53.900Z"
|
||||
stopped_at: Completed 16.3-04-PLAN.md
|
||||
last_updated: "2026-10-11T11:42:00.000Z"
|
||||
last_activity: 2026-10-11
|
||||
last_activity_desc: Completed 16.3-02 admin SPA API tokens card
|
||||
state_head: 2030fd881aa08347931c638a90548b16bc188f86
|
||||
last_activity_desc: Completed 16.3-04 unit tests, Postgres suites and phase gate
|
||||
state_head: 463541549f374c328b121433a4e884146f86d25c
|
||||
progress:
|
||||
total_phases: 40
|
||||
completed_phases: 13
|
||||
total_plans: 162
|
||||
completed_plans: 157
|
||||
completed_plans: 158
|
||||
gsd_state_version: "1.0"
|
||||
milestone_name: milestone
|
||||
---
|
||||
@@ -31,8 +31,8 @@ See: .planning/PROJECT.md (updated 2026-09-16)
|
||||
|
||||
Phase: 16.3 (Backend admin personal API tokens with scopes) — EXECUTING
|
||||
Plan: 4 of 4
|
||||
Status: Ready to execute
|
||||
Last activity: 2026-10-11 — Completed 16.3-02 (admin SPA API tokens card)
|
||||
Status: Plans complete — ready for verify-work
|
||||
Last activity: 2026-10-11 — Completed 16.3-04 (unit tests, Postgres suites, phase gate)
|
||||
|
||||
Progress: [█████░░░░░] 48%
|
||||
|
||||
@@ -212,6 +212,7 @@ Progress: [█████░░░░░] 48%
|
||||
| Phase 16.3 P01 | 95 | 4 tasks | 43 files |
|
||||
| Phase 16.3 P02 | 9 min | 3 tasks | 17 files |
|
||||
| Phase 16.3 P03 | 658 min | 4 tasks | 12 files |
|
||||
| Phase 16.3 P04 | 30 min | 3 tasks | 16 files |
|
||||
|
||||
## Accumulated Context
|
||||
|
||||
@@ -693,6 +694,8 @@ Recent decisions affecting current work:
|
||||
- [Phase 16.3]: 16.3-02: expired from API drives Expired chip; dates use CellValue local YYYY-MM-DD / YYYY-MM-DD HH:mm — Plan decisions; no new date format
|
||||
- [Phase 16.3]: Released summercms v0.1.21 after human resume release v0.1.21; Journal requires it; grzybyfunkcjonalne journal gitlink bumped; summercmsio not bumped
|
||||
- [Phase 16.3]: Journal API uses cabana.ResolveBackend with cover golem15.journal.*; ErrTokenScope maps to PHP Insufficient permissions
|
||||
- [Phase 16.3]: 16.3-04: full unit coverage + scripts/check-phase16.3.sh; postgres PASS on Docker host; nyquist_compliant true — Lean rule 3 phase-ending plan
|
||||
- [Phase 16.3]: Public Journal Show under optional-auth needs published_at in the past, not only published:true — TestJournalTokens fixture
|
||||
|
||||
### Pending Todos
|
||||
|
||||
@@ -765,6 +768,6 @@ Items acknowledged and carried forward from previous milestone close:
|
||||
|
||||
## Session Continuity
|
||||
|
||||
Last session: 2026-10-11T11:08:53.266Z
|
||||
Stopped at: Completed 16.3-03-PLAN.md
|
||||
Last session: 2026-10-11T11:42:00.000Z
|
||||
Stopped at: Completed 16.3-04-PLAN.md
|
||||
Resume file: None
|
||||
|
||||
@@ -0,0 +1,183 @@
|
||||
---
|
||||
phase: 16.3-backend-admin-personal-api-tokens-with-scopes
|
||||
plan: 04
|
||||
subsystem: testing
|
||||
tags: [api-tokens, unit-tests, vitest, testcontainers, phase-gate, nyquist]
|
||||
|
||||
requires:
|
||||
- phase: 16.3-backend-admin-personal-api-tokens-with-scopes
|
||||
provides: token scopes, guard, account API, CLI, SPA card, Journal scopes
|
||||
provides:
|
||||
- "Full unit coverage of Phase 16.3 (lean rule 3)"
|
||||
- "Postgres token suites for Docker hosts"
|
||||
- "scripts/check-phase16.3.sh fail-closed gate"
|
||||
- "16.3-VALIDATION.md with nyquist_compliant true"
|
||||
affects: [verify-work, phase-16.3-close]
|
||||
|
||||
actuals:
|
||||
tokens: 34814
|
||||
tasks: 3
|
||||
commits: 7
|
||||
plan_head_before: 2030fd881aa08347931c638a90548b16bc188f86
|
||||
plan_head_after: 463541549f374c328b121433a4e884146f86d25c
|
||||
TASK2_START: 91830e506f5e61537ae6180c3ff282bf19b81583
|
||||
|
||||
tech-stack:
|
||||
added: []
|
||||
patterns:
|
||||
- "Phase gate stages go/admin/docs/postgres with detect_go and detect_vitest fail-closed"
|
||||
- "Journal TestJournalTokens matrix: writes × scopes with published_at for public Show"
|
||||
- "SPA plaintext lifetime asserted via DOM/toast absence after Done and Esc-confirm"
|
||||
|
||||
key-files:
|
||||
created:
|
||||
- modules/cabana/api_tokens_test.go
|
||||
- modules/cabana/token_guard_test.go
|
||||
- modules/cabana/account_tokens_test.go
|
||||
- modules/cabana/token_commands_test.go
|
||||
- modules/cabana/token_postgres_test.go
|
||||
- scripts/check-phase16.3.sh
|
||||
- ../sm-journal-plugin/journal_api_tokens_test.go
|
||||
modified:
|
||||
- modules/cabana/token_scopes_test.go
|
||||
- modules/cabana/token_routes_test.go
|
||||
- modules/bouncer/context_test.go
|
||||
- modules/party/registry_test.go
|
||||
- modules/lagoon/backend_admin_migrations_test.go
|
||||
- admin/tests/account/ApiTokensPanel.test.ts
|
||||
- admin/tests/account/ApiTokenCreateDialog.test.ts
|
||||
- ../sm-journal-plugin/token_scopes_test.go
|
||||
- .planning/phases/16.3-backend-admin-personal-api-tokens-with-scopes/16.3-VALIDATION.md
|
||||
|
||||
key-decisions:
|
||||
- "TASK2_START=91830e506f5e61537ae6180c3ff282bf19b81583 (framework Task 1 SHA); Task 2 diffs are *_test.go only"
|
||||
- "Public Journal Show under optional-auth needs published_at in the past, not only published:true"
|
||||
- "Phase gate --all ran postgres PASS on this Docker host (not NOT RUN)"
|
||||
|
||||
patterns-established:
|
||||
- "check-phase16.3.sh mirrors 16.2 detectors; PHASE163_REQUIRE_POSTGRES=1 fails --all without Docker"
|
||||
- "Account SPA tests mount /account via helpers.mountApp with deferred fetch for loading skeletons"
|
||||
|
||||
requirements-completed: [SC-6, SC-1, SC-2, SC-3, SC-4]
|
||||
|
||||
coverage:
|
||||
- id: D1
|
||||
description: "Scope match, Allows, compile/overlap, route gates and SPA plaintext backstop"
|
||||
requirement: SC-6
|
||||
verification:
|
||||
- kind: unit
|
||||
ref: modules/cabana/token_scopes_test.go#TestScopeMatch
|
||||
status: pass
|
||||
- kind: unit
|
||||
ref: modules/cabana/token_routes_test.go#TestTokenRouteGates
|
||||
status: pass
|
||||
- kind: automated_ui
|
||||
ref: admin/tests/account/ApiTokenCreateDialog.test.ts#plaintext lifetime
|
||||
status: pass
|
||||
- kind: integration
|
||||
ref: modules/cabana/token_postgres_test.go#TestBackendTokenPostgres
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D2
|
||||
description: "Full Go coverage: bouncer, party, lagoon migration, guard, account API, CLI, Journal matrix"
|
||||
requirement: SC-6
|
||||
verification:
|
||||
- kind: unit
|
||||
ref: modules/cabana (16 Docker-free named tests)
|
||||
status: pass
|
||||
- kind: integration
|
||||
ref: modules/lagoon + modules/cabana + sm-journal-plugin Postgres suites (3+4+3)
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D3
|
||||
description: "SPA UI-SPEC coverage, phase gate fail-closed, VALIDATION nyquist_compliant"
|
||||
requirement: SC-6
|
||||
verification:
|
||||
- kind: automated_ui
|
||||
ref: npm --prefix admin test (1251 passed)
|
||||
status: pass
|
||||
- kind: other
|
||||
ref: bash scripts/check-phase16.3.sh --all → Phase 16.3 gate passed
|
||||
status: pass
|
||||
human_judgment: false
|
||||
- id: D4
|
||||
description: "Real-browser clipboard (Manual-Only in VALIDATION)"
|
||||
verification: []
|
||||
human_judgment: true
|
||||
rationale: "Clipboard API permissions differ from happy-dom; kept as Manual-Only row"
|
||||
|
||||
duration: 30min
|
||||
completed: 2026-10-11
|
||||
status: complete
|
||||
---
|
||||
|
||||
# Phase 16.3 Plan 04: Unit tests, Postgres suites and phase gate Summary
|
||||
|
||||
**Phase-ending coverage: every token security rule has a unit test, Docker Postgres suites are green, and `scripts/check-phase16.3.sh --all` ends with `Phase 16.3 gate passed`.**
|
||||
|
||||
## Performance
|
||||
|
||||
- **Duration:** ~30 min (executor wall clock for plan 04)
|
||||
- **Started:** 2026-10-11T11:11:34Z
|
||||
- **Completed:** 2026-10-11T11:41:20Z
|
||||
- **Tasks:** 3
|
||||
- **Files modified:** 16 across summercms.go + sm-journal-plugin
|
||||
|
||||
## Accomplishments
|
||||
|
||||
- Docker-free Go suite: 16 named cabana tests, bouncer Scope serialization, party Activate order; Journal `TestJournalTokenScopes` with `-short`.
|
||||
- Postgres: lagoon migration (3), cabana account/CLI/guard/OpenAPI (4), Journal token matrix (3) — all PASS on this Docker host.
|
||||
- Admin SPA: 33 account-token vitest cases; full suite 1251 passed; gate self-test and `--all` green; VALIDATION `nyquist_compliant: true`.
|
||||
|
||||
## Task Commits
|
||||
|
||||
Each task was committed atomically:
|
||||
|
||||
1. **Task 1: Tracer deny-by-default** — framework `91830e5`, Journal `7bbafcb` (`test(16.3-04)`)
|
||||
2. **Task 2: Full Go coverage** — framework `78124ab`, Journal `58851dd` (`test(16.3-04)`); `TASK2_START=91830e5`
|
||||
3. **Task 3: SPA + gate + VALIDATION** — SPA `55999b2`, gate `9b811f6` (`test(16.3): phase gate`), VALIDATION `4635415` (`docs(16.3)`)
|
||||
|
||||
**Plan metadata:** (this SUMMARY commit)
|
||||
|
||||
_Note: No `fix(...)` production commits were required; Journal create fixture needed `published_at` for public Show (test-only)._
|
||||
|
||||
## Test counts
|
||||
|
||||
| Repository | Notes |
|
||||
|------------|--------|
|
||||
| summercms.go | 16 Docker-free cabana named tests; + bouncer/party; Postgres lagoon 3 + cabana 4 |
|
||||
| admin SPA | 14 panel + 19 dialog cases; full vitest 1251 |
|
||||
| sm-journal-plugin | `TestJournalTokenScopes` (short); Postgres `TestJournalTokens` + tracer + expansion |
|
||||
|
||||
## Docker-host commands
|
||||
|
||||
```bash
|
||||
bash scripts/check-phase16.3.sh --self-test
|
||||
bash scripts/check-phase16.3.sh --all # postgres PASS here
|
||||
# or, if NOT RUN postgres was printed:
|
||||
bash scripts/check-phase16.3.sh postgres
|
||||
```
|
||||
|
||||
## Decisions Made
|
||||
|
||||
- Public optional-auth Show asserts need `published_at` in the past alongside `published: true`.
|
||||
- Gate reports NOT RUN postgres only without Docker; this run executed postgres.
|
||||
|
||||
## Deviations from Plan
|
||||
|
||||
None material — plan executed as written. Journal Show fixture clarified with `published_at` inside the test file (not a production fix).
|
||||
|
||||
## Issues Encountered
|
||||
|
||||
None.
|
||||
|
||||
## Next Phase Readiness
|
||||
|
||||
- Phase 16.3 plans 4/4 complete; ready for `/msd-verify-work` (and optional real-browser clipboard Manual-Only).
|
||||
- No blockers.
|
||||
|
||||
## Self-Check: PASSED
|
||||
|
||||
- Acceptance greps for TestAccountTokens, TestTokenCommands, TestBackendAPITokensMigration, TestJournalTokens: one line each.
|
||||
- Task 2 Docker-free count 16; Postgres 3/4/3; gate `--all` last line `Phase 16.3 gate passed`.
|
||||
- VALIDATION: `nyquist_compliant: true`, zero TBD rows.
|
||||
@@ -169,5 +169,5 @@
|
||||
"label": "Advance to the next step",
|
||||
"reason": "Phase 16.3 of 40 · executing"
|
||||
},
|
||||
"updated_at": "2026-10-11T00:07:52.680Z"
|
||||
"updated_at": "2026-10-11T11:42:00.000Z"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user