Assert submit stays disabled with no scopes; keep the 422 focus path
with a selected scope so check-phase16.3.sh --all stays green.
Co-authored-by: Cursor <cursoragent@cursor.com>
Client-side canSubmit now matches the 422 rule so Submit stays disabled
with an empty scope set (WR-02).
Co-authored-by: Cursor <cursoragent@cursor.com>
Account token POST/DELETE routes made TestPhase10Coverage expect 32 unsafe
routes; token_scopes.go is hand-authored and excluded from the scaffold pin.
Co-authored-by: Cursor <cursoragent@cursor.com>
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>
Fill every 16.3-VALIDATION.md row from plan 04 results, tick Wave 0,
and set nyquist_compliant true after the phase gate passed.
Co-authored-by: Cursor <cursoragent@cursor.com>
Add scripts/check-phase16.3.sh with fail-closed go/admin/docs/postgres
stages, detector self-tests and NOT RUN postgres without Docker.
Co-authored-by: Cursor <cursoragent@cursor.com>
Pin list states, row anatomy, revoke paths and create-dialog step 1/2
behaviours from the UI-SPEC, including plaintext lifetime backstops.
Co-authored-by: Cursor <cursoragent@cursor.com>
Account token create/revoke added two state-changing mounts; update the
Phase 10 CSRF walk count so the release gate inventory stays green.
Co-authored-by: Cursor <cursoragent@cursor.com>
- Add compiled ResolveBackend example with acme.blog cover
- Include src= fence in authentication docs (Bearer-only)
Co-authored-by: Cursor <cursoragent@cursor.com>
Tag the 17 open todos with their g15office task IDs, close 7 todos that
are already done or promoted to Phase 16.3, and record the sync rules
and the phase-to-task map in .planning/G15OFFICE.md.
16.2-VERIFICATION.md passed 14/14: the five human items are resolved by the
16.2-07 gate log and the UAT re-run on v0.1.20 (16.2-UAT.md 5/5). covered_files
adds 16.2-07 PLAN/SUMMARY and openapi_conformance_test.go; digest recomputed
with verification.fingerprint. Re-verified by hand because msd-core 1.14.0
re-stales a report after gap closure and its verifier ignores passed UAT.
STATE points at 16.3 (phase.complete picked 11, an executed phase that is
only stale).
Purge token set on UAT, restart at 2026-10-10T17:57:57Z, smoke, token-match
and purge-ok pass. posts-unchanged, translations-unchanged, category-purged
and category-fresh pass after the human re-saves. Debug sessions for
G-16.2-1 and G-16.2-2 resolved.
- PATTERNS: one conformCase per new admin route, enforced by
TestPhase10ConformanceInventory without Docker (G-16.2-1)
- VALIDATION: 16.2-07-T1 to T6 rows; the Docker-host suites now run in the
gate's postgres stage instead of the Manual-Only table
- go stage: TestPhase10ConformanceInventory (Docker-free), and the Journal
TestSiteCachePurgeConfig and TestSiteCachePurgeRequest by name
- postgres stage: TestPhase10OpenAPIConformance and the Journal
TestCategoriesAdminPurgesSiteCache and TestPostsAdminPurgesSiteCache
- layer stage: the four site cache purge tests by name
- new cache stage: playground build, purge-check, then the acme SSR smoke
on the same route-cached build
- conformCases() lists every case at package level; checkConformInventory
reports every missing, extra or duplicate key in one sorted failure
- TestPhase10ConformanceInventory runs it without a database, and
TestPhase10OpenAPIConformance runs it before the testcontainers setup
- GET /field-types decodes into cabana.FieldTypesResponse and serves the
fixture type's script; POST .../fields/{field}/upload answers 201
cabana.Envelope[cabana.FieldUploadResponse] for a multipart part file
- the fixture plugin registers conformnote and the gadget form uses it,
so create, update and show run its Decode and Load (G-16.2-1, D-13, D-18)