Context. surface studio · domain mawu · route /mawu-studio/accessibility · auth signed-in + creator · source apps/oshun/web/src/app/mawu-studio/accessibility/page.tsx
Last walked. 2026-06-03 automated runtime probe (Playwright headless) — prod build + mock BFF; render, HTTP 200, server-rendered <h1>, 0 page errors verified. Evidence: WALKTHROUGH/results/walkthrough-runtime-probe-2026-06-03.md
Purpose#
Reviews the V7 Mawu accessibility floor for the builder, browser, and
default-realm surfaces. The page server-runs
runV7MawuAccessibilityEval(V7_MAWU_ACCESSIBILITY_EVAL_FIXTURE) and passes the
report plus V7_MAWU_ACCESSIBILITY_LINTER_RULES to the workspace, which lints
each surface against voice/radio parity, colorblind-safe provenance diffs,
keyboard/gamepad input parity, scalable UI, and reduced motion. Out of the V1
feature map — a V7 surface that ships in apps/oshun/web (documented here for
an exhaustive route inventory).
Entry points#
- Direct URL / bookmark —
/mawu-studio/accessibility(signed-in creator) - Studio shell nav —
active="studio"(shortcut6) - In-page nav links — from the Localization workspace ("Localization" ↔ this page) and the studio Accessibility Governance surface
Layout regions#
- Header: shell header + workspace header
(
aria-labelledby="mawu-accessibility-title") — eyebrow "V7 accessibility floor", H1 "Mawu Studio Accessibility", summary - Status panel (
aria-label="Accessibility eval status") — four metrics: Eval (Passing/Blocked), Surfaces (passedSurfaceIds.length/3), Findings count, Schema (v7) - Controls (
aria-label="Workspace controls")- Surface selector (
role="group") — one tab perreport.requiredSurfaceIds: Builder (mawu-studio-builder), Browser (abundantia-browser), Default realm (default-realm) - Preview preferences — reduced/standard-motion toggle + text-scale range
- Surface selector (
- Body grid —
SurfaceDetail(evidence grid + builder bindings) +RulesPanel(the Mawu Studio linter rule list) - Footer nav (
aria-label="Mawu Studio links") — Back to Studio, Accessibility Governance, Localization
States#
- Loading / Error / Offline — N/A: the report is computed server-side
from an in-bundle fixture (
@v7/contracts); no client network read - Eval passing —
data-eval-passed="true"; status metric "Passing"; each surface shows a "Passing" pass-pill - Eval blocked —
data-eval-passed="false"; status "Blocked" (driven by the fixture/report) - Active surface = Builder (default =
requiredSurfaceIds[0]) — shows builder action bindings (keyboard/gamepad/voice) in the detail pane - Active surface = Browser / Default realm — same evidence grid; builder
bindings list only renders when
builderActions.length > 0 - Reduced motion (default) —
data-motion-mode="reduced"; toggling flips tostandard - Text scale —
data-text-scalereflects the range (100–200%, step 25, default 200) - Gated — signed-in creator (shell); no V1 BFF policy (out-of-v1)
- Standalone PWA — renders within the shell
Interactions#
- Surface tabs (buttons,
data-mawu-a11y-surface-tab="<id>",aria-pressed) — setactiveSurfaceId; the detail + rules panes recompute for the selected surface (active findings filtered bysurfaceId) - Reduced-motion toggle (button,
data-mawu-a11y-reduced-motion-toggle,aria-pressed) — flipsmotionModebetweenreduced/standard; label tracks the mode - Text scale (range input,
data-mawu-a11y-text-scale, min 100 max 200 step 25) — setstextScale; reflected in thedata-text-scaleattribute - Footer links (
Link) — Back to Studio (/studio), Accessibility Governance (/studio/accessibility-governance), Localization (/mawu-studio/localization)
Read-only evidence rendered per surface (no controls): voice/radio parity, provenance diff (palette + contrast ratio + non-color cues), scalable UI (max text scale, hit-target px, 320px reflow), reduced motion, and per-action keyboard/gamepad/voice bindings.
Data & contracts#
- Reads (server):
runV7MawuAccessibilityEval(V7_MAWU_ACCESSIBILITY_EVAL_FIXTURE)→V7MawuAccessibilityEvalReport;V7_MAWU_ACCESSIBILITY_LINTER_RULES→ linter rule views — both from@v7/contracts - Writes: None.
- Realtime: None.
- Caching: SSR (server component computes the report); client workspace is interactive over the passed props
- Auth/role check: session (signed-in creator); no V1 BFF policy (out-of-v1)
- Contracts:
@v7/contracts—V7MawuAccessibilityEvalReport,V7MawuAccessibilityLinterRuleId,V7MawuAccessibilitySurfaceId,V7MawuAccessibilitySurfaceSpec,runV7MawuAccessibilityEval,V7_MAWU_ACCESSIBILITY_EVAL_FIXTURE,V7_MAWU_ACCESSIBILITY_LINTER_RULES
Cross-references#
- Sibling V7 surface:
mawu-studio-localization.md - V6 sibling future studio:
egbe-studio.md - Related V1 governance:
../governance/studio-accessibility-governance.md - Spec:
V7/V7_features.md,V7/V7_ARCHITECTURE.md - Component source:
apps/oshun/web/src/components/mawu/MawuStudioAccessibilityWorkspace.tsx
Open questions / known gaps#
- The report is computed from a fixture, not a live eval over real studio
surfaces; confirm the V7 BFF/eval pipeline that will replace
V7_MAWU_ACCESSIBILITY_EVAL_FIXTURE. - Surface pass-pill is hard-rendered "Passing" in
SurfaceDetail; confirm it should reflect the per-surface verdict once blocked surfaces exist.