Integrates the frontend template sync (a0fbafb → 5434760) into the TechLog UI migration. Merged in this direction so every conflict is resolved and proved in the worktree; main is only fast-forwarded afterwards and never holds a state that was not verified here. 15 conflicts. The rule throughout: keep the template's mechanism, keep the product's content, and never invent a third state neither branch would accept. The template's product manifest and its runtime feature kill switch are adopted. The route registry is deliberately not composed from contract.routes: the reference feature still declares screens this product deleted, and reducing over them would register paths with no component behind them. ROUTE_FEATURE_OWNER is narrowed to registered routes for the same reason. The first resolution did compose from contract.routes and was rejected by product-features.test.ts. Three files pinned counts and a digest describing the gate contract. Neither side's numbers describe the merged config/ci/gates.json, so they were recomputed from it rather than chosen: 27 gates, 82 commands, 94 command references, 107 evidence references, 128 artifacts, shape sha256 5063586d. README.md and docs/accessibility/manual-checklist.md now enumerate this product's 27 routes, which the template's own verify:documentation requires. product-feature-switch.test.tsx was rewritten around the invariant that still applies here — no registered route without a component — rather than deleted with the screens it used to exercise. docs/operations/template-merge-2026-08-17.md records every decision, the gate results, and the three follow-ups this merge deliberately did not decide. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2.9 KiB
Manual accessibility review checklist
Automated axe checks do not establish WCAG conformance. A human reviewer must
review all 27 route records in artifacts/tests/a11y-manual/ against one
release candidate and sign them. The required TechLog Public and Studio scope is
derived from the installed route registry, so the gate rejects stale, missing,
or additional route records as well as blank identity/timestamp/signature
fields, pending verdicts, and mismatched release IDs. The scope is:
NOT_FOUND, TECH_LOG_CASE, TECH_LOG_EXPLORE, TECH_LOG_EXPLORE_KIND,
TECH_LOG_HOME, TECH_LOG_PROFILE, TECH_LOG_PROJECT,
TECH_LOG_PROJECTS, TECH_LOG_PROJECT_ACTIVITY,
TECH_LOG_PROJECT_DECISIONS, TECH_LOG_PROJECT_RECORDS,
TECH_LOG_QUESTION, TECH_LOG_REFERENCE, TECH_LOG_RELEASE,
TECH_LOG_RELEASES, TECH_LOG_SEARCH, TECH_LOG_STUDIO_DOCUMENTS,
TECH_LOG_STUDIO_DOCUMENT_EDIT, TECH_LOG_STUDIO_DOCUMENT_NEW,
TECH_LOG_STUDIO_DOCUMENT_PREVIEW, TECH_LOG_STUDIO_DOCUMENT_PUBLISH,
TECH_LOG_STUDIO_DOCUMENT_VALIDATION, TECH_LOG_STUDIO_HOME,
TECH_LOG_STUDIO_NOT_FOUND, TECH_LOG_STUDIO_PUBLICATIONS,
TECH_LOG_STUDIO_PUBLICATION_PREVIEW, TECH_LOG_TOPIC.
This list is not maintained by hand: verify:documentation compares it against
the installed route registry and fails when a registered route is absent. The
template carried the same rule for its own example screens; the route set is
this product's, the rule is the template's.
Allowed item verdicts:
passnot-applicable (<specific reason>)
Required record:
Status: reviewed
Route ID: <exact installed route ID>
Release ID: <immutable release ID>
Reviewer: <human reviewer identity>
Reviewed at: <RFC 3339 timestamp>
Signature: <reviewer identity or approved signature reference>
Attestation: accepted
M1 Keyboard: pass
M2 Visible focus: pass
M3 Route focus: pass
M4 Modal focus: not-applicable (no modal on this route)
M5 Error association: not-applicable (no form error on this route)
M6 Color signal: pass
M7 Reduced motion: pass
Screen reader: pass
Notes: <observations and linked defect IDs>
The reviewer must verify:
- M1: every action works without a pointing device
- M2: every focused element has a visible indicator
- M3: route transitions move focus to a deterministic target
- M4: modal focus is trapped and restored, when a modal exists
- M5: errors are programmatically associated with their controls, when present
- M6: state never relies on color alone
- M7: non-essential motion is suppressed with reduced-motion preference
- Screen reader: headings, live regions, errors, and actions are announced once
Routes with dialogs or form errors require real M4 modal-focus or M5 error-association review; those items must not be marked not-applicable when the reviewed route exposes the relevant behavior. Passing automated evidence means only that tested pages had no critical or serious axe findings under the recorded browser runs.