Context. surface studio · domain yemaya · route /studio/yemaya/asset-pipeline · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/yemaya/asset-pipeline/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 measures how completely a generation run covered a
course's required assets. It wires the real @yemaya/asset-generation
calculateAssetCoverage engine: given a course type + lesson count and the asset
types a run actually produced, it reads back the coverage percentage, the
still-missing asset types, and the per-type required-vs-generated counts.
Entry points#
- No breadcrumb panel on this page.
- Reachable from the Studio index and from the Asset Type Coverage quick-action.
- Embedded as the Asset Pipeline Lane inside the Asset Library aggregator
(
/studio/yemaya/asset-library). - Direct URL / bookmark (signed-in + studio entitlement).
Layout regions#
page.tsx renders ShellLayout active="studio" and:
- Workspace panel (
StudioYemayaAssetPipelineWorkspace,data-yemaya-asset-pipeline-workspace):<h1>"Yemaya Asset Pipeline Workspace" (WorkspaceHeading).- Summary paragraph (
data-yemaya-asset-pipeline-summary). - The coverage form lane (loading / unauthorized / error / ready-form / result, see States).
- Route Map panel (
data-yemaya-asset-pipeline-route-map):<h2>"Route Map" + fiveSTUDIO_YEMAYA_ASSET_PIPELINE_ROUTE_MAPentries. - Quick-action panel: two
quickActionlinks.
States#
- Loading —
data-yemaya-ap-loading"Loading asset-coverage engine…" while the GET catalog fetch is in flight. - Unauthorized —
data-yemaya-ap-unauthorized"Access restricted." on a 401/403 admin-scope failure (fail-closed). - Error —
data-yemaya-ap-error"Could not load the asset-coverage engine." on a non-OK / malformed catalog response. - Ready-form —
data-yemaya-ap-formrendered once the catalog (courseTypes) resolves. - Result —
data-yemaya-ap-resultwithdata-yemaya-ap-coverage,data-yemaya-ap-missing, and adata-yemaya-ap-by-typelist; or a validation messagedata-yemaya-ap-coverage-error.
Interactions#
Coverage form (data-yemaya-ap-form)#
- Course type —
selectdata-yemaya-ap-course-typepopulated fromcatalog.courseTypes. - Lesson count —
inputdata-yemaya-ap-lessons(aria-label "lesson count"); must be a non-negative integer. - Generated asset types — comma-separated
inputdata-yemaya-ap-generated(aria-label "generated asset types"). - Submit —
buttondata-yemaya-ap-submit"Measure coverage" → POST/v1/admin/yemaya/asset-pipeline/coveragewith{ courseType, lessonCount, generatedAssetTypes }.
Route map#
data-yemaya-asset-pipeline-route-map — five entries:
-
/studio/yemaya/asset-pipeline -
/studio/yemaya/asset-pipeline/ingest/[ingestionJobId] -
/studio/yemaya/asset-pipeline/transform/[pipelineRunId] -
/studio/yemaya/asset-pipeline/quality-gates/[gateId] -
/studio/yemaya/asset-pipeline/publication/[releaseId]
Quick actions#
- "Open Yemaya Asset Type Coverage workspace" →
/studio/yemaya/asset-type-coverage. - "Back to Studio workspace index" →
/studio.
Data & contracts#
- Reads: GET
/v1/admin/yemaya/asset-pipeline(catalog:courseTypes) on mount. - Writes: POST
/v1/admin/yemaya/asset-pipeline/coverage. - 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/StudioYemayaAssetPipelineWorkspace.tsx - Route map source:
apps/oshun/web/src/components/studio/StudioYemayaAssetPipelineRouteMap.ts - Parent aggregator:
studio-yemaya-asset-library.md - Sibling Yemaya bridges: see folder index
- Feature spec:
V1/features.md
Open questions / known gaps#
- The Route Map advertises ingest / transform / quality-gates / publication sub-routes, but the live lane only exposes the coverage computation. Verify whether those staging surfaces are planned.