Context. surface studio · domain yemaya · route /studio/yemaya/character-design-system · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/yemaya/character-design-system/page.tsx
Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; live screen-reader, touch, offline, and telemetry-delivery checks pending a manual AT pass. Evidence: WALKTHROUGH/results/runtime-sweep-2026-05-29.md; body re-derived 2026-06-03 from current source (lane-console architecture)
Purpose#
Admin lane console for canon-consistency checking. It wires the real
@yemaya/canon-enforcement engine via
/v1/admin/yemaya/character-design-system: supply a set of character/world canon
facts and detect contradictions — the same fact asserted at different canon
tiers, or the same subject given conflicting values.
Entry points#
- No breadcrumb panel on this page.
- Reachable from the Studio index and from the Storyboard Creation quick-action (which links here).
- Direct URL / bookmark (signed-in + studio entitlement).
Layout regions#
page.tsx renders ShellLayout active="studio" and:
- Workspace panel (
StudioYemayaCharacterDesignSystemWorkspace,data-yemaya-character-design-system-workspace):<h1>"Yemaya Character Design System Workspace" (WorkspaceHeading).- Summary paragraph (
data-yemaya-character-design-system-summary). - The canon-check form lane (loading / unauthorized / error / ready-form / result, see States).
- Route Map panel (
data-yemaya-character-design-system-route-map):<h2>"Route Map" + fiveSTUDIO_YEMAYA_CHARACTER_DESIGN_SYSTEM_ROUTE_MAPentries. - Quick-action panel: two
quickActionlinks.
States#
- Loading —
data-yemaya-cds-loading"Loading canon engine…" while the GET catalog fetch is in flight. - Unauthorized —
data-yemaya-cds-unauthorized"Access restricted." on a 401/403 admin-scope failure (fail-closed). - Error —
data-yemaya-cds-error"Could not load the character design system." on a non-OK / malformed catalog response. - Ready-form —
data-yemaya-cds-check-formonce the catalog (canonTiers) resolves. - Result —
data-yemaya-cds-resultwithdata-yemaya-cds-countsand adata-yemaya-cds-conflictslist (ordata-yemaya-cds-clean"Canon is internally consistent."); or a validation messagedata-yemaya-cds-check-error.
Interactions#
Canon-check form (data-yemaya-cds-check-form)#
- Canon facts (JSON) —
textareadata-yemaya-cds-field-entries(aria-label "canon entries json"); must be a non-empty JSON array of{ fact, tier, source? }. - Submit —
buttondata-yemaya-cds-check-submit"Check canon consistency" → POST/v1/admin/yemaya/character-design-system/checkwith{ entries }.
Route map#
data-yemaya-character-design-system-route-map — five entries:
-
/studio/yemaya/character-design-system -
/studio/yemaya/character-design-system/characters/[characterId] -
/studio/yemaya/character-design-system/variants/[variantId] -
/studio/yemaya/character-design-system/revisions/[revisionId] -
/studio/yemaya/character-design-system/governance/[policyId]
Quick actions#
- "Open Yemaya Storyboard Creation workspace" →
/studio/yemaya/storyboard-creation. - "Back to Studio workspace index" →
/studio.
Data & contracts#
- Reads: GET
/v1/admin/yemaya/character-design-system(catalog:canonTiers) on mount. - Writes: POST
/v1/admin/yemaya/character-design-system/check. - Realtime: none.
- Caching: client fetch on mount,
cache: 'no-store',buildBffAuthHeaders(). - Auth/role check: admin-scoped fail-closed (401/403 → unauthorized state) behind the proxy studio gate.
Cross-references#
- Studio overview:
studio-overview.md - Workspace source:
apps/oshun/web/src/components/studio/StudioYemayaCharacterDesignSystemWorkspace.tsx - Route map source:
apps/oshun/web/src/components/studio/StudioYemayaCharacterDesignSystemRouteMap.ts - Engine:
@yemaya/canon-enforcement - Sibling Yemaya bridges: see folder index
- Feature spec:
V1/features.md
Open questions / known gaps#
- The Route Map advertises characters / variants / revisions / governance sub-routes that the live canon-check lane does not expose.