---
path: /studio/aja/asset-storage
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/asset-storage/page.tsx
status: walked
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)'
---

# Studio Aja · Asset Storage

## Purpose

Aggregator workspace that composes five sibling Aja lane consoles into one
asset-lifecycle surface. It owns no `/v1` fetch of its own; the live data and
controls come from the embedded leaves (Output Retrieval, Output Package
Contents, Distributed Processing, Data Retention, Content Security). The page
adds a Capability Summary, a breadcrumb, a Route Map, and a quick-action lane.

## Entry points

- **Direct URL / bookmark** — `/studio/aja/asset-storage` (metadata canonical).
- **Studio nav** — Domain-bridge studios section of `/studio`.
- **Breadcrumb parent** — `/studio/aja/output-retrieval` (page breadcrumb).
- **Quick-actions** — reachable from sibling routes that list this page.

## Layout regions

`page.tsx` renders inside `<ShellLayout active="studio">`:

- **Breadcrumb panel** (`data-aja-asset-storage-breadcrumbs`):
  `<nav aria-label="Aja Asset Storage breadcrumbs">` → `Studio` (link) /
  `Aja Output Retrieval` (link → `/studio/aja/output-retrieval`) /
  `Asset Storage` (`aria-current="page"`).
- **Workspace** `<StudioAjaAssetStorageWorkspace />`:
  - `<h1>` "Aja Asset Storage Workspace" + summary
    (`data-aja-asset-storage-summary`).
  - Capability Summary (`data-aja-asset-storage-capability-summary`, `<h2>`) — 4
    cards (`data-aja-asset-storage-capability=<id>`): Asset Lifecycle
    Orchestration, Storage Observability and Diagnostics, Security and Retention
    Governance, Parity and Delivery Assurance.
  - Output Retrieval Lane
    (`data-aja-asset-storage-output-retrieval-lane`, `<h2>`) → embeds
    `<StudioAjaOutputRetrievalWorkspace />`.
  - Output Package Contents Lane
    (`data-aja-asset-storage-output-package-lane`) → embeds
    `<StudioAjaOutputPackageContentsWorkspace />`.
  - Distributed Processing Lane
    (`data-aja-asset-storage-distributed-processing-lane`) → embeds
    `<StudioAjaDistributedProcessingWorkspace />`.
  - Data Retention Lane (`data-aja-asset-storage-data-retention-lane`) → embeds
    `<StudioAjaDataRetentionWorkspace />`.
  - Content Security Lane (`data-aja-asset-storage-content-security-lane`) →
    embeds `<StudioAjaContentSecurityWorkspace />`.
  - Embedded titles demote to `<h2>`/`<h3>` via `WorkspaceSection`.
- **Route Map panel** (`data-aja-asset-storage-route-map`, `<h2>` "Route Map"):
  6 `STUDIO_AJA_ASSET_STORAGE_ROUTE_MAP` entries (path + purpose).
- **Quick-action lane**: six `Link.quickAction` anchors (no self-link).

## States

This page has no own data fetch; runtime state is per embedded lane (each leaf
runs its own Loading / Unauthorized / Error / Ready-form lifecycle).

- [ ] **Loading** — per embedded lane (the leaves fetch their catalog on mount).
- [ ] **Unauthorized** — per embedded lane (admin-scope 401/403 render).
- [ ] **Error** — per embedded lane.
- [ ] **Populated** — all five lanes render their controls + results.
- [x] **Empty** — N/A; capability cards and lanes always render.

## Interactions

### Breadcrumb

- [ ] **"Studio"** → `/studio`
- [ ] **"Aja Output Retrieval"** → `/studio/aja/output-retrieval`
- [ ] **"Asset Storage"** — `aria-current="page"`

### Workspace body

- [ ] **Capability cards** (4) — non-interactive.
- [ ] **Output Retrieval Lane** → embeds `StudioAjaOutputRetrievalWorkspace`.
- [ ] **Output Package Contents Lane** → embeds
      `StudioAjaOutputPackageContentsWorkspace`.
- [ ] **Distributed Processing Lane** → embeds
      `StudioAjaDistributedProcessingWorkspace`.
- [ ] **Data Retention Lane** → embeds `StudioAjaDataRetentionWorkspace`.
- [ ] **Content Security Lane** → embeds `StudioAjaContentSecurityWorkspace`
      (see `./studio-aja-content-security.md`).

### Route Map

- [ ] **Route entries** (6) — non-interactive listing.

### Quick-action lane

- [ ] **"Open Aja Output Retrieval workspace"** → `/studio/aja/output-retrieval`
- [ ] **"Open Aja Output Package Contents workspace"** →
      `/studio/aja/output-package-contents`
- [ ] **"Open Aja Distributed Processing workspace"** →
      `/studio/aja/distributed-processing`
- [ ] **"Open Aja Data Retention workspace"** → `/studio/aja/data-retention`
- [ ] **"Open Aja Content Security workspace"** → `/studio/aja/content-security`
- [ ] **"Back to Studio workspace index"** → `/studio`

## Data & contracts

- **Reads**: none at page level — delegated to the embedded leaves. Embedded
  endpoints (GET on mount): `/v1/admin/aja/content-security` and the
  distributed-processing / data-retention / output-retrieval /
  output-package-contents leaves' own endpoints.
- **Writes**: none at page level; each leaf fires its own
  `POST /v1/admin/aja/<slug>/<verb>`.
- **Realtime**: none.
- **Caching**: client fetch on mount (`cache: 'no-store'`) inside each leaf;
  SSR shell.
- **Auth/role check**: BFF endpoints admin-scoped + fail-closed (401/403 →
  unauthorized render per lane); route gated signed-in + studio via proxy.

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling routes (embedded as lanes):
  - [`./studio-aja-distributed-processing.md`](./studio-aja-distributed-processing.md)
  - [`./studio-aja-data-retention.md`](./studio-aja-data-retention.md)
  - [`./studio-aja-content-security.md`](./studio-aja-content-security.md)
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaAssetStorageWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaAssetStorageRouteMap.ts`

## Open questions / known gaps

- [ ] Output Retrieval and Output Package Contents lanes are not yet in this
      walkthrough sweep — link once those files are created.
