Context. surface studio · domain yemaya · route /studio/yemaya/asset-type-coverage · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/yemaya/asset-type-coverage/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 that runs the @yemaya/asset-generation
analyzeCourseForAssets planner — pick a course type and lesson count and read
back the distinct required / recommended / optional asset types, the planned
item counts (including per-lesson assets), and the total estimated generation
cost. Wired to the live planner over /v1/admin/yemaya/asset-type-coverage;
access is admin-scoped and fail-closed.
Entry points#
- No breadcrumb panel on this page.
- Reachable from sibling Yemaya routes that quick-action here (e.g.,
team-collaboration). - Direct URL / bookmark (signed-in + studio entitlement).
Layout regions#
page.tsx renders ShellLayout active="studio" and:
- Workspace panel (
StudioYemayaAssetTypeCoverageWorkspace,data-yemaya-asset-type-coverage-workspace):<h1>(WorkspaceHeading) "Yemaya Asset Type Coverage Workspace".- Summary paragraph (
data-yemaya-asset-type-coverage-summary). - The coverage form (
data-yemaya-atc-form) renders directly once the catalog loads (no separate lane heading).
- Route Map panel (
data-yemaya-asset-type-coverage-route-map):<h2>"Route Map" + five entries fromSTUDIO_YEMAYA_ASSET_TYPE_COVERAGE_ROUTE_MAP. - Quick-action panel: two
quickActionlinks.
States#
- Loading —
data-yemaya-atc-loading"Loading asset-coverage planner…" until the GET catalog resolves. - Unauthorized —
data-yemaya-atc-unauthorized"Access restricted." on a 401/403 (Yemaya admin scope required). - Error —
data-yemaya-atc-error"Could not load the asset-coverage planner." on a non-OK / malformed catalog response. - Ready (form) — the course-type + lesson-count form renders once the catalog (course types) loads.
- Result —
data-yemaya-atc-resultwith the tiered required / recommended / optional asset-type rows (data-yemaya-atc-tier) and the estimated cost; submit-side validation surfaces indata-yemaya-atc-analyze-error.
Interactions#
Coverage form#
- "Course type" —
<select data-yemaya-atc-course-type>populated from the catalog's course types. - "Lesson count" —
<input data-yemaya-atc-lessons>(aria-label "lesson count"). - "Plan coverage" —
<button data-yemaya-atc-submit>; submitting POSTs{ courseType, lessonCount }to/v1/admin/yemaya/asset-type-coverage/analyzeand renders the coverage tiers + total estimated generation cost.
Route map#
data-yemaya-asset-type-coverage-route-map — five non-interactive entries:
-
/studio/yemaya/asset-type-coverage— primary workspace -
/studio/yemaya/asset-type-coverage/taxonomy/[assetTypeId] -
/studio/yemaya/asset-type-coverage/matrix/[coverageMatrixId] -
/studio/yemaya/asset-type-coverage/gaps/[gapId] -
/studio/yemaya/asset-type-coverage/governance/[policyId]
Quick actions#
- "Open Yemaya Team Collaboration workspace" →
/studio/yemaya/team-collaboration. - "Back to Studio workspace index" →
/studio.
Data & contracts#
- Reads:
GET /v1/admin/yemaya/asset-type-coverage(catalog: course types) on mount. - Writes:
POST /v1/admin/yemaya/asset-type-coverage/analyze({ courseType, lessonCount }→ coverage result). - Realtime: none.
- Caching: client
fetchon mount withcache: 'no-store';buildBffAuthHeaders(). - Auth/role check: admin-scoped, fail-closed (401/403 → unauthorized state); signed-in + studio entitlement enforced by the proxy/middleware.
Cross-references#
- Studio overview:
studio-overview.md - Workspace source:
apps/oshun/web/src/components/studio/StudioYemayaAssetTypeCoverageWorkspace.tsx - Route map source:
apps/oshun/web/src/components/studio/StudioYemayaAssetTypeCoverageRouteMap.ts - Feature spec:
V1/features.md
Open questions / known gaps#
- The route-map dynamic children (taxonomy / matrix / gaps / governance) are
sitemap-only — confirm whether any are backed by
page.tsxfiles yet.