27 KiB
phase, verified, status, score, covered_files, covered_digest, behavior_unverified, overrides_applied, mvp_mode_note, decision_coverage, re_verification, human_verification, human_verified
| phase | verified | status | score | covered_files | covered_digest | behavior_unverified | overrides_applied | mvp_mode_note | decision_coverage | re_verification | human_verification | human_verified | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 10-admin-vue-spa | 2026-10-11T15:11:15Z | human_needed | 4/4 roadmap success criteria hold; plan truths 46/46 (the --go gap is closed: check-phase10.sh --go exit 0 in the verifier's own run) |
|
v2:sha256:dce85ba35408764f2ce0d7cc0f1297800a2a70d4c263b033a556c19bd3c6e604 | 0 | 0 | ROADMAP marks Phase 10 mode: mvp, but the goal is not a User Story. Following the Phase 1/3/5/8 precedent, the four ROADMAP success criteria are the contract and User Flow Coverage is derived from them. |
|
|
|
|
Phase 10: Admin Vue SPA Verification Report
Phase Goal: A minimal Vue 3 + TypeScript admin SPA renders login, permission-gated navigation, lists, forms and the relation manager for Albums, Artists, Collections, Genres and Styles, typed from the generated OpenAPI document.
Verified: 2026-10-11T15:11:15Z (summercms.go HEAD 77ca4b0; fonoteka.go HEAD 7db5ef8 with plugins/golem15/user checked out at 569768e, which is not the recorded pointer cf5c6b9)
Status: human_needed
Re-verification: Yes, narrow. It re-checks only the one gap left by the fc7cfaf report (check-phase10.sh --all red at --go) and carries the other truths forward, because no Phase 10 code changed.
What changed since fc7cfaf
| Repo | Commit | Files | Effect |
|---|---|---|---|
| summercms.go | 77ca4b0 |
scripts/check-phase10.sh (+2/-1) |
run_go runs the framework suite with -skip '^TestBootstrapEndToEnd$' and a comment naming the opt-in guard (SUMMERCMS_BOOTSTRAP_CHECK=1, 14.3-02) |
| sm-user-plugin (local only, ahead 1) | 569768e | updates/organisations_test.go, user_groups_test.go, user_session_test.go |
TestCreateOrganisationsMigration expects 202610050001_create_oauth_identities; five rollback loops count one more migration |
| fonoteka.go (local, ahead 13) | 03dad50 | parity/migrate_test.go, parity/schema_diff_test.go |
Expects 11 user migrations (was 10); allows the backend_api_tokens table in the schema diff |
| fonoteka.go | 7db5ef8 | parity/oauth_flow_test.go |
TestOAuthFlows writes mcp-lifecycle.vars under $PARITY_ROOT or t.TempDir() instead of a fixed /tmp/summercms-parity/... path |
git diff fc7cfaf HEAD in summercms.go touches only scripts/check-phase10.sh. No file changed under admin/src, modules/ or modules/boardwalk/dist.
Gap closure: check-phase10.sh --all at --go
Independent run
bash scripts/check-phase10.sh --go (verifier's own process): phase10 go passed, exit 0, 4m50s. The orchestrator separately reports --self-test, --security, --postgres, --openapi, --dist, --hygiene and --evidence all exit 0 this session, plus typecheck and Vitest (83 files, 1279 tests). Only npm ci inside --spa was skipped, as before.
Do the fixes weaken the gate? No.
77ca4b0 (framework skip).
- The
-skippattern is anchored (^...$) and matches exactly one test in the repo:modules/sunrise/sunrise_test.go:242. Its body callst.SkipunlessSUMMERCMS_BOOTSTRAP_CHECK=1, so under this gate it never asserted anything. - That test still runs for real in
scripts/check-phase14.3.sh:484(SUMMERCMS_BOOTSTRAP_CHECK=1 go test ./modules/sunrise/ -run '^TestBootstrapEndToEnd$'). phase10_detectis unchanged. Any other skip in either repo is still refused, and--self-testexits 0.KNOWN_APP_FAILURES=""andAPP_PENDING_SKIPS=""are unchanged, so the app run allows no failures and no skips.- The fix takes the
-skipoption the previous report offered. It adds no self-test case because no skip event reaches the detector. - Residual (ℹ️): a future top-level test with the same name in another framework package would also be skipped silently.
569768e (sm-user-plugin).
- The plugin defines exactly 11 migration IDs. The new ID,
202610050001_create_oauth_identities, is the 11th and the last in order. - The
wantlist gains only that ID, and the fiveRollbackLastloops each go up by one to account for it. - No assertion was removed or loosened. The tests still require exact history equality and roll back to the same target migration.
03dad50 (fonoteka parity).
- The count change from 10 to 11 matches the plugin's real migration count.
backend_api_tokensis a real Go-only framework table from 16.3-01 (modules/cabana,modules/lagoon/backend_admin_migrations_test.go). The allowlist names it explicitly with a reason, the same way it handlesbackend_jwt_blacklist.
7db5ef8 (TestOAuthFlows vars path).
- Only where the vars store is written changed. The replay and every assertion are the same.
- I found no reader of
mcp-lifecycle.varsanywhere in fonoteka.go. The new comment says "php_parity.sh reads these vars from PARITY_ROOT", which overstates things (php_parity.sh only definesPARITY_ROOT), but it does not affect behavior. ℹ️ Info.
Caveat: the pass depends on uncommitted, unpushed sibling state
The --go pass was proven against the go.work working tree, where plugins/golem15/user is checked out at 569768e. fonoteka.go's recorded pointer is still cf5c6b9. At that commit, TestCreateOrganisationsMigration fails exactly as in the previous report. Pushing 569768e and bumping the pointer needs the user's go-ahead, so this is an escalation item (human_verification #2), not a code gap. The previous report accepted the same arrangement, with an uncommitted pointer at 7a6fa0e.
Goal Achievement
Observable Truths (ROADMAP contract)
| # | Truth | Status | Evidence |
|---|---|---|---|
| 1 | An admin logs in through the SPA and sees only the navigation items their permissions allow. | ✓ VERIFIED | Carried from fc7cfaf (no admin/src or Go change). --security/--postgres/--evidence exit 0 this session (orchestrator); --go exit 0 (verifier). |
| 2 | Each of the five controllers renders a working list and form generated from its JSON schema. | ✓ VERIFIED | Carried: TestPhase10Controllers and the assembled acceptance SC-2 block are in the green --postgres stage. The browser re-check stays open as human item #1. |
| 3 | The Collections form's relation manager lets an admin search, link and unlink an editor. | ✓ VERIFIED | Carried: TestPhase10AlbumRelations, TestPhase10RelationOptions, TestPhase10RelationSave and the SC-3 block are in green stages. |
| 4 | API calls in the SPA use TypeScript types generated from the OpenAPI document, with no hand-maintained duplicate type. | ✓ VERIFIED | Carried: --hygiene and --openapi exit 0; the files.ts exemption is unchanged since it was judged narrow in fc7cfaf. |
Score: 4/4 ROADMAP truths verified. Plan truths 46/46 (0 present, behavior-unverified).
Plan must-have truths (re-checked rows)
| Truth (10-05) | Status | Evidence |
|---|---|---|
| Every Phase 10 Go change has named tests, and both repositories pass go vet ./... and go test ./... | ✓ VERIFIED (was ✗ FAILED) | check-phase10.sh --go exit 0 in the verifier's run. The framework excludes only the opt-in sunrise test, which check-phase14.3.sh runs for real; the app run has no allowances. Working-tree caveat above. |
--all exits non-zero on any failing stage, zero-test run, skip, drift, hygiene violation or evidence gap; --self-test proves each detector fails closed |
✓ VERIFIED | --self-test exit 0 (orchestrator). phase10_detect and the allowance variables are unchanged. |
scripts/check-phase10.sh --all passes at HEAD |
✓ VERIFIED | Every stage exits 0 this session: --go in the verifier's run, the rest in the orchestrator's. --spa used its typecheck and Vitest equivalent without npm ci. |
The other 43 plan truths are carried from fc7cfaf. Their code is unchanged, and the stages that cover them passed this session.
Prohibitions (judgment tier)
Unchanged. All 17 were accepted in 10-UAT.md test 7, and the mechanical subset is still enforced by the green --hygiene stage. None is violated.
Required Artifacts
| Artifact | Status | Details |
|---|---|---|
admin/ SPA, admin/openapi, generated types |
✓ VERIFIED | Unchanged since fc7cfaf; --dist, --openapi, --hygiene exit 0 |
modules/cabana, bouncer, surf, boardwalk, phrasebook Phase 10 code |
✓ VERIFIED | Unchanged; --security, --postgres, --go exit 0 |
scripts/check-phase10.sh |
✓ VERIFIED (was ⚠️ PARTIAL) | All stages exit 0; the 77ca4b0 change is narrow (see above) |
fonoteka admin_phase10_*_test.go |
✓ VERIFIED | Pass within the --go app run and --postgres |
Key Link Verification
| From | To | Via | Status |
|---|---|---|---|
scripts/check-phase10.sh run_go |
go test -json in both repos |
phase10_detect, with no app allowances and one anchored framework -skip |
WIRED |
check-phase10.sh -skip '^TestBootstrapEndToEnd$' |
check-phase14.3.sh --bootstrap |
the skipped test runs for real in its own phase gate | WIRED |
| All other links (client.ts to schema.d.ts, files.ts to aliases and client, views to endpoints, boardwalk to dist) | WIRED (unchanged) |
Data-Flow Trace (Level 4)
Unchanged. Every flow is FLOWING.
Behavioral Spot-Checks
| Behavior | Command | Result | Status |
|---|---|---|---|
| Go stage | bash scripts/check-phase10.sh --go (verifier) |
phase10 go passed, exit 0, 4m50s |
✓ PASS |
-skip target is unique |
grep -rn "func TestBootstrapEndToEnd" |
one hit, modules/sunrise/sunrise_test.go:242 (env-gated t.Skip) |
✓ PASS |
| Skipped test still runs elsewhere | grep in scripts/check-phase14.3.sh |
line 484 runs it with SUMMERCMS_BOOTSTRAP_CHECK=1 |
✓ PASS |
| App allowances empty | grep for KNOWN_APP_FAILURES and APP_PENDING_SKIPS |
both "" |
✓ PASS |
| User plugin migration count | migration ID grep in plugins/golem15/user/updates |
11 unique IDs, 202610050001_create_oauth_identities last |
✓ PASS |
| Other stages | orchestrator run: --self-test, --security, --postgres, --openapi, --dist, --hygiene, --evidence, typecheck, Vitest |
all exit 0; 83 files, 1279 tests | ✓ PASS (reported) |
Probe Execution
No probe-*.sh is declared or present. check-phase10.sh is the phase gate.
Requirements Coverage
| Requirement | Source Plan | Description | Status | Evidence |
|---|---|---|---|---|
| ADMIN-06 | 10-01..10-05 | Minimal Vue 3 + TS SPA renders login, permission-gated navigation, lists, forms and the relation manager for the five controllers using generated types | ✓ SATISFIED; browser re-walk pending | Truths 1-4; acceptance command green |
Orphaned requirements: none.
Anti-Patterns Found
| File | Pattern | Severity | Impact |
|---|---|---|---|
fonoteka.go plugins/golem15/user pointer |
The fix lives in an unpushed local commit; the recorded pointer cf5c6b9 still fails TestCreateOrganisationsMigration |
⚠️ Warning | A clean checkout of fonoteka.go fails --go until 569768e is pushed and the pointer is bumped (human item #2) |
scripts/check-phase10.sh:293 |
-skip matches by test name across all framework packages |
ℹ️ Info | A future same-named test elsewhere would be skipped silently; today the name is unique |
fonoteka.go parity/oauth_flow_test.go:288 |
Comment says php_parity.sh reads the vars; nothing reads mcp-lifecycle.vars |
ℹ️ Info | Misleading comment only |
| Phase 10 review WR-04..WR-08 | carried | ⚠️ Warning | Unchanged |
There are no TBD, FIXME or XXX markers in the changed lines.
Human Verification Required
1. Browser re-walk of the Phase 10 flows on the current build
Test: Run the fonoteka binary and open /plytadmin. Log in as a superuser, then as a genres-only admin. Use the list and form of each of the five controllers (search, sort, filter, paging, save, 422 field errors). Link and unlink a Collection editor. Open Ustawienia. Glance at light and dark mode.
Expected: Everything behaves as approved in 10-UAT.md tests 2 to 5. Later widgets, field types and persisted list state do not break the Phase 10 views.
Why human: D-23 keeps the browser out of the suite.
UAT coverage: Not covered by an existing passing row. 10-UAT.md is complete with all 7 rows pass, but rows 2 to 5 were recorded against c7487f6 (2026-09-27), and later phases have since changed the views they cover (retest_reason in the frontmatter). 10.1-UAT.md is status: testing with 0 of 6 rows passed. Its tests 1 and 4 overlap this walk; passing them with Genres, Collections and Settings included would also close this item.
2. Publish the sibling-repo test fixes
Test: Push sm-user-plugin 569768e. Commit the plugins/golem15/user pointer bump (cf5c6b9 to 569768e) in fonoteka.go as a separate commit, then push fonoteka.go when you choose.
Expected: A clean fonoteka.go checkout passes check-phase10.sh --go.
Why human: Pushing needs the user's go-ahead. The verified pass relies on the working-tree submodule state.
Carried items CR-01, A3 and the 17 prohibitions stay resolved by 10-UAT.md tests 1, 6 and 7 (code unchanged).
Gaps Summary
The one remaining gap from fc7cfaf is closed. check-phase10.sh --go passes in the verifier's own run, and every other stage passed this session. None of the four fixes weakens the gate:
- The framework
-skipis anchored to a single opt-in test thatcheck-phase14.3.shruns for real. - The app run still allows no failures and no skips.
- The migration-history and parity tests were updated to match the real 11 migrations and a real 16.3 table, with no assertion loosened.
No code gaps remain. Status is human_needed for two items: the browser re-walk, which no passing UAT row covers for the current code, and publishing the sibling-repo fixes so a clean checkout matches the verified working tree.
Verified: 2026-10-11T15:11:15Z Verifier: Claude (msd-verifier)