Files
summercms/.planning/phases/10-admin-vue-spa/10-VERIFICATION.md

27 KiB
Raw Blame History

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)
.gitignore
.planning/phases/10-admin-vue-spa/10-01-PLAN.md
.planning/phases/10-admin-vue-spa/10-01-SUMMARY.md
.planning/phases/10-admin-vue-spa/10-02-PLAN.md
.planning/phases/10-admin-vue-spa/10-02-SUMMARY.md
.planning/phases/10-admin-vue-spa/10-03-PLAN.md
.planning/phases/10-admin-vue-spa/10-03-SUMMARY.md
.planning/phases/10-admin-vue-spa/10-04-PLAN.md
.planning/phases/10-admin-vue-spa/10-04-SUMMARY.md
.planning/phases/10-admin-vue-spa/10-05-PLAN.md
.planning/phases/10-admin-vue-spa/10-05-SUMMARY.md
admin/env.d.ts
admin/index.html
admin/openapi/admin.json
admin/package-lock.json
admin/package.json
admin/src/App.vue
admin/src/api/client.ts
admin/src/api/files.ts
admin/src/api/schema.d.ts
admin/src/api/types.ts
admin/src/app/controllerRoutes.ts
admin/src/app/i18n.ts
admin/src/app/icons.ts
admin/src/app/listQuery.ts
admin/src/app/router.ts
admin/src/app/runtime.ts
admin/src/app/theme.ts
admin/src/app/winterUrl.ts
admin/src/components/account/ApiTokenCreateDialog.vue
admin/src/components/account/ApiTokensPanel.vue
admin/src/components/form/FieldRenderer.vue
admin/src/components/form/FormErrorBanner.vue
admin/src/components/form/FormField.vue
admin/src/components/form/FormGrid.vue
admin/src/components/form/FormTabs.vue
admin/src/components/form/control.ts
admin/src/components/form/fields/CheckboxField.vue
admin/src/components/form/fields/DropdownField.vue
admin/src/components/form/fields/FileCaptionModal.vue
admin/src/components/form/fields/MLField.vue
admin/src/components/form/fields/NumberField.vue
admin/src/components/form/fields/RelationField.vue
admin/src/components/form/fields/SwitchField.vue
admin/src/components/form/fields/TextField.vue
admin/src/components/form/fields/TextareaField.vue
admin/src/components/form/fields/UnsupportedField.vue
admin/src/components/form/formState.ts
admin/src/components/form/mlLocale.ts
admin/src/components/form/registry.ts
admin/src/components/list/CellValue.vue
admin/src/components/list/DataTable.vue
admin/src/components/list/FilterBar.vue
admin/src/components/list/ListToolbar.vue
admin/src/components/list/Pagination.vue
admin/src/components/relation/RelationManager.vue
admin/src/components/relation/RelationPickerModal.vue
admin/src/components/shell/AppShell.vue
admin/src/components/shell/Breadcrumbs.vue
admin/src/components/shell/PluginRail.vue
admin/src/components/shell/SectionFlyout.vue
admin/src/components/shell/SectionPanel.vue
admin/src/components/shell/UserMenu.vue
admin/src/components/ui/Button.vue
admin/src/components/ui/ConfirmDialog.vue
admin/src/components/ui/Toast.vue
admin/src/components/ui/confirm.ts
admin/src/main.ts
admin/src/state/useAuth.ts
admin/src/state/useBreadcrumbs.ts
admin/src/state/useNavigation.ts
admin/src/state/useSettings.ts
admin/src/state/useSidebar.ts
admin/src/state/useToasts.ts
admin/src/styles/main.css
admin/src/views/FormView.vue
admin/src/views/ListView.vue
admin/src/views/LoginView.vue
admin/src/views/NotFoundView.vue
admin/src/views/SettingsFormView.vue
admin/src/views/SettingsIndexView.vue
admin/tests/account/ApiTokenCreateDialog.test.ts
admin/tests/account/ApiTokensPanel.test.ts
admin/tests/app/client.test.ts
admin/tests/app/controllerRoutes.test.ts
admin/tests/app/i18n.test.ts
admin/tests/app/icons.test.ts
admin/tests/app/listQuery.test.ts
admin/tests/app/router.test.ts
admin/tests/app/runtime.test.ts
admin/tests/app/theme.test.ts
admin/tests/app/winterUrl.test.ts
admin/tests/fixtures/lang.json
admin/tests/fixtures/navigation.json
admin/tests/fixtures/settings.json
admin/tests/fixtures/typed.ts
admin/tests/fixtures/widgets.form-schema.json
admin/tests/fixtures/widgets.list-schema.json
admin/tests/fixtures/widgets.list.json
admin/tests/fixtures/widgets.options.json
admin/tests/fixtures/widgets.record.json
admin/tests/fixtures/widgets.relation-candidates.json
admin/tests/fixtures/widgets.relation-linked.json
admin/tests/fixtures/widgets.relation-schema.json
admin/tests/form/FileCaptionModal.test.ts
admin/tests/form/FormField.test.ts
admin/tests/form/FormGrid.test.ts
admin/tests/form/FormTabs.test.ts
admin/tests/form/FormView.test.ts
admin/tests/form/MLField.test.ts
admin/tests/form/RelationField.test.ts
admin/tests/form/Settings.test.ts
admin/tests/form/fields.test.ts
admin/tests/form/formState.test.ts
admin/tests/form/mlLocale.test.ts
admin/tests/form/registry.test.ts
admin/tests/helpers.ts
admin/tests/list/CellValue.test.ts
admin/tests/list/DataTable.test.ts
admin/tests/list/FilterBar.test.ts
admin/tests/list/ListToolbar.test.ts
admin/tests/list/ListView.test.ts
admin/tests/list/Pagination.test.ts
admin/tests/relation/RelationManager.test.ts
admin/tests/relation/RelationPickerModal.test.ts
admin/tests/setup.ts
admin/tests/shell/AppShell.test.ts
admin/tests/shell/Breadcrumbs.test.ts
admin/tests/shell/PluginRail.test.ts
admin/tests/shell/SectionFlyout.test.ts
admin/tests/shell/SectionPanel.test.ts
admin/tests/shell/UserMenu.test.ts
admin/tests/smoke/edit.smoke.test.ts
admin/tests/smoke/form.smoke.test.ts
admin/tests/smoke/list.smoke.test.ts
admin/tests/smoke/relation.smoke.test.ts
admin/tests/smoke/settings.smoke.test.ts
admin/tests/smoke/shell.smoke.test.ts
admin/tests/smoke/tracer.smoke.test.ts
admin/tests/state/useAuth.test.ts
admin/tests/state/useBreadcrumbs.test.ts
admin/tests/state/useNavigation.test.ts
admin/tests/state/useSettings.test.ts
admin/tests/state/useSidebar.test.ts
admin/tests/state/useToasts.test.ts
admin/tests/ui/ui.test.ts
admin/tests/views/App.test.ts
admin/tests/views/LoginView.test.ts
admin/tsconfig.json
admin/vite.config.ts
admin/vitest.config.ts
go.mod
internal/build/build_test.go
internal/build/stubs/artifacts.tmpl
internal/tools/swagger2openapi/main.go
internal/tools/swagger2openapi/main_test.go
modules/boardwalk/boardwalk.go
modules/boardwalk/boardwalk_test.go
modules/boardwalk/dist/assets/index-BeX-076N.css
modules/boardwalk/dist/assets/index-CXQZEJp2.js
modules/boardwalk/dist/index.html
modules/bouncer/cookie_guard_test.go
modules/bouncer/jwt.go
modules/bouncer/jwt_guard_test.go
modules/bouncer/refresh.go
modules/bouncer/refresh_test.go
modules/bouncer/registry_test.go
modules/cabana/admin_openapi.go
modules/cabana/admin_paths_test.go
modules/cabana/auth.go
modules/cabana/auth_test.go
modules/cabana/bulk_test.go
modules/cabana/commands_test.go
modules/cabana/contracts.go
modules/cabana/crud.go
modules/cabana/crud_lifecycle_test.go
modules/cabana/csrf.go
modules/cabana/export_test.go
modules/cabana/filter_options_test.go
modules/cabana/filter_schema.go
modules/cabana/form_schema.go
modules/cabana/form_schema_test.go
modules/cabana/http.go
modules/cabana/lang.go
modules/cabana/list_schema.go
modules/cabana/list_schema_test.go
modules/cabana/messages.go
modules/cabana/messages_test.go
modules/cabana/openapi_conformance_test.go
modules/cabana/phase09_contract_test.go
modules/cabana/phase10_auth_test.go
modules/cabana/phase10_coverage_test.go
modules/cabana/phase10_csrf_test.go
modules/cabana/prefix.go
modules/cabana/query_test.go
modules/cabana/refresh_revocation_test.go
modules/cabana/registry.go
modules/cabana/relation.go
modules/cabana/relation_field.go
modules/cabana/relation_field_test.go
modules/cabana/schema_types.go
modules/cabana/security_coverage_test.go
modules/cabana/security_test.go
modules/pact/capabilities.go
modules/phrasebook/backend/lang/en/lang.yaml
modules/phrasebook/backend/lang/pl/lang.yaml
modules/phrasebook/lang.go
modules/phrasebook/loader.go
modules/phrasebook/phase10_test.go
modules/phrasebook/translator.go
modules/phrasebook/translator_test.go
modules/surf/admin_prefix_test.go
modules/surf/cors_coverage_test.go
modules/surf/cors_test.go
modules/surf/middleware_test.go
modules/surf/router.go
modules/surf/router_test.go
scripts/check-admin-dist.sh
scripts/check-admin-openapi.sh
scripts/check-phase10.sh
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.
honored total not_honored
28 28
previous_status previous_score previous_head head reason gaps_closed gaps_remaining regressions
gaps_found 4/4 roadmap success criteria hold; plan truths 45/46 (1 failed: the phase acceptance command check-phase10.sh --all is red at its --go stage, for causes outside Phase 10 code) fc7cfaf 77ca4b0 Narrow re-verification of the one --go gap. summercms.go 77ca4b0 adds -skip '^TestBootstrapEndToEnd$' to the framework go test run. In the sibling repos, sm-user-plugin 569768e (local commit, not pushed, fonoteka.go pointer not bumped) and fonoteka.go 03dad50 and 7db5ef8 (local commits, fonoteka.go is 13 ahead of origin) bring the migration-history and parity tests up to date. No file under admin/src, modules/ or modules/boardwalk/dist changed since fc7cfaf.
scripts/check-phase10.sh --all, the phase acceptance command, passes: --go exit 0 (verifier run, 4m50s, 'phase10 go passed'); the other stages were run by the orchestrator this session and all exit 0
test expected why_human retest_reason
Re-walk the Phase 10 admin flows in a real browser on the current build: run the fonoteka binary, open /plytadmin as a superuser and as a genres-only admin, then 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, and glance at light and dark mode. Everything still behaves as approved in 10-UAT.md tests 2 to 5. The limited admin sees only fonoteka > Genres. Lists and forms render. The editor round trip works. The Albums form's later widgets, partials and field types do not break the Phase 10 form; list state persisted in the URL and storage does not confuse paging or filtering. D-23 keeps the real browser out of the automated suite. Vitest (83 files, 1279 tests) and the Postgres acceptance test cover behavior, but not rendering in a browser. 10-UAT.md tests 2 to 5 passed on 2026-09-27 against c7487f6. Since then phases 10.1, 12.2, 14.2.1, 16.1, 16.2 and 16.3 changed ListView.vue, FormView.vue, FormField.vue, formState.ts, registry.ts, AppShell.vue, PluginRail.vue, UserMenu.vue, useAuth.ts and main.css, so those rows no longer cover the current code. 10.1-UAT.md is status: testing with all six rows pending; its tests 1 and 4 (Albums, Genres, Settings in a real browser) overlap this walk but do not cover it yet.
test expected why_human
Publish the sibling-repo test fixes the --go pass depends on: push sm-user-plugin 569768e, then commit the plugins/golem15/user pointer bump (cf5c6b9 -> 569768e) in fonoteka.go as a separate commit, and push fonoteka.go (03dad50, 7db5ef8 and the bump) when you choose. A clean checkout of fonoteka.go at its committed pointer passes check-phase10.sh --go, as the working tree does now. Pushing needs the user's go-ahead (CLAUDE.md). The --go pass was proven against the go.work working tree. At fonoteka.go's committed pointer cf5c6b9, sm-user-plugin TestCreateOrganisationsMigration still fails as before, because the fix exists only in the local commit 569768e.
test expected why_human resolution
Carried: decide CR-01 (refresh ignores tokens_valid_after / is_activated) Fix now or accept with override Security-policy decision Fixed (be4a923, a13a121), approved in 10-UAT.md test 1. No auth or refresh code changed since.
test expected why_human resolution
Carried: Secure cookie on http://localhost (assumption A3) Chrome and Firefox store summer_admin with default cookie_secure Browser cookie policy, non-inferable Approved in 10-UAT.md test 6. No auth.go or cookie change since.
test expected why_human resolution
Carried: review the 17 judgment-tier prohibitions Accept or reject the verifier's non-authoritative verdicts Judgment-tier prohibitions need human resolution Accepted in 10-UAT.md test 7. The --hygiene stage, which enforces the mechanical ones, is still green.
item uat
CR-01 decision 10-UAT.md test 1 (pass)
item uat
A3 Secure cookie on http://localhost 10-UAT.md test 6 (pass)
item uat
17 judgment-tier prohibitions 10-UAT.md test 7 (pass)

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 -skip pattern is anchored (^...$) and matches exactly one test in the repo: modules/sunrise/sunrise_test.go:242. Its body calls t.Skip unless SUMMERCMS_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_detect is unchanged. Any other skip in either repo is still refused, and --self-test exits 0.
  • KNOWN_APP_FAILURES="" and APP_PENDING_SKIPS="" are unchanged, so the app run allows no failures and no skips.
  • The fix takes the -skip option 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 want list gains only that ID, and the five RollbackLast loops 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_tokens is 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 handles backend_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.vars anywhere in fonoteka.go. The new comment says "php_parity.sh reads these vars from PARITY_ROOT", which overstates things (php_parity.sh only defines PARITY_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
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 -skip is anchored to a single opt-in test that check-phase14.3.sh runs 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)