---
path: /studio/aja/pipeline-cache
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/pipeline-cache/page.tsx
status: walked + e2e-covered
last_walked:
  '2026-07-02 pipeline-control lane addendum — Playwright real-dev-infra
  coverage now proves signed-in render, breadcrumbs, route-map contract,
  quick-action href order, ready build-key/hash forms, 44 px submit targets,
  blank-source client guard with no POST, real cache-key round-trip, real djb2
  hash output, fail-closed loading/unauthorized/catalog-error states, mobile
  no-overflow, and direct BFF 401/403/400/200 gates for build-key and hash.
  Spec: apps/oshun/web/e2e/studio-aja-pipeline-control-lane-consoles.spec.ts.'
  '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 · Pipeline Cache

## Purpose

Leaf lane console that wires the real `@aja/pipeline-cache` primitives. The
operator can build a content-addressable cache key (which round-trips through
the parser, surfacing whether it is idempotent) and hash arbitrary content with
the deterministic djb2 hash used for cache addressing.

## Entry points

- **Direct URL / bookmark** — `/studio/aja/pipeline-cache`.
- **Studio nav** — Domain-bridge studios section of `/studio`.
- **Breadcrumb parent** — `/studio/aja/pipeline-stages` (page breadcrumb).
- **Sibling quick-actions** — Pipeline Stages, SVC Motion Pipeline, Domain
  Motion Pipelines, Distributed Processing.

## Layout regions

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

- **Breadcrumb panel** (`data-aja-pipeline-cache-breadcrumbs`):
  `<nav aria-label="Aja Pipeline Cache breadcrumbs">` → `Studio` (link) /
  `Aja Pipeline Stages` (link → `/studio/aja/pipeline-stages`) /
  `Pipeline Cache` (`aria-current="page"`).
- **Workspace** `<StudioAjaPipelineCacheWorkspace />`:
  - `<h1>` "Aja Pipeline Cache Workspace" + summary (`data-aja-pc-summary`).
  - The build-key form + hash form (states below).
- **Route Map panel** (`data-aja-pipeline-cache-route-map`, `<h2>` "Route Map"):
  6 `STUDIO_AJA_PIPELINE_CACHE_ROUTE_MAP` entries — primary, entries, policies,
  events, parity, governance.
- **Quick-action lane**: five `Link.quickAction` anchors (no self-link).

## States

The lane fetches `GET /v1/admin/aja/pipeline-cache` on mount.

- [x] **Loading** — `data-aja-pc-loading` "Loading cache primitives…".
- [x] **Unauthorized** — `data-aja-pc-unauthorized` (401/403; default "Aja
      workspace scope required to view pipeline cache.").
- [x] **Error** — `data-aja-pc-error`.
- [x] **Ready (forms)** — `data-aja-pc-key-form` + `data-aja-pc-hash-form`.
- [x] **Key result** — `data-aja-pc-key-result` with `data-aja-pc-key` and
      `data-aja-pc-idempotent`.
- [x] **Hash result** — `data-aja-pc-hash-result` (djb2 hash).
- [x] **Action error** — `data-aja-pc-action-error` (e.g. "Source id, config
      hash, and input hash are required.").

## Interactions

### Build-key form (`data-aja-pc-key-form`)

- [x] **Pipeline stage** — select `data-aja-pc-field-stage` (catalog `stages`).
- [x] **Source id** — input `data-aja-pc-field-source` (default `clip1`).
- [x] **Config hash** — input `data-aja-pc-field-config` (default `c1`).
- [x] **Input hash** — input `data-aja-pc-field-input` (default `i1`).
- [x] **Variant (optional)** — input `data-aja-pc-field-variant` (default
      `skel-A`).
- [x] **Build cache key** — submit `data-aja-pc-key-submit`; fires
      `POST /v1/admin/aja/pipeline-cache/build-key`.

### Hash form (`data-aja-pc-hash-form`)

- [x] **Content** — input `data-aja-pc-field-hash` (default `pose-model-v2`).
- [x] **Hash content** — submit `data-aja-pc-hash-submit`; fires
      `POST /v1/admin/aja/pipeline-cache/hash` with `{ input }`.

### Route Map

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

### Quick-action lane

- [x] **"Open Aja Pipeline Stages workspace"** → `/studio/aja/pipeline-stages`
- [x] **"Open Aja SVC Motion Pipeline workspace"** →
      `/studio/aja/svc-motion-pipeline`
- [x] **"Open Aja Domain Motion Pipelines workspace"** →
      `/studio/aja/domain-motion-pipelines`
- [x] **"Open Aja Distributed Processing workspace"** →
      `/studio/aja/distributed-processing`
- [x] **"Back to Studio workspace index"** → `/studio`

## E2E coverage

- [`apps/oshun/web/e2e/studio-aja-pipeline-control-lane-consoles.spec.ts`](../../../../apps/oshun/web/e2e/studio-aja-pipeline-control-lane-consoles.spec.ts)
  covers signed-in shell render, breadcrumbs, ready build-key and hash forms,
  blank-source client guard with no `POST`, real BFF cache-key round-trip
  (`retargeting:clip1:::c1:i1:skel-A`), deterministic djb2 hash output,
  route-map count, exact quick-action hrefs, 44 px submit targets, loading /
  unauthorized / malformed-catalog fail-closed states, mobile no-overflow, and
  direct BFF auth/schema/happy-path gates for build-key and hash.

## Data & contracts

- **Reads**: `GET /v1/admin/aja/pipeline-cache` (catalog: `stages`,
  `keyFormat`).
- **Writes**: `POST /v1/admin/aja/pipeline-cache/build-key` →
  `{ cacheKey, parsed, idempotent }`; `POST /v1/admin/aja/pipeline-cache/hash` →
  `{ hash }`.
- **Realtime**: none.
- **Caching**: client fetch on mount (`cache: 'no-store'`); SSR shell.
- **Auth/role check**: BFF endpoints admin-scoped + fail-closed; route gated
  signed-in + studio via proxy.

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Siblings (quick-actions):
  [`./studio-aja-svc-motion-pipeline.md`](./studio-aja-svc-motion-pipeline.md),
  `/studio/aja/pipeline-stages`, `/studio/aja/domain-motion-pipelines`,
  `/studio/aja/distributed-processing`
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaPipelineCacheWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaPipelineCacheRouteMap.ts`

## Known downstream boundaries

- Route Map lists `entries`/`policies`/`events`/`parity`/`governance` child
  routes as descriptive contracts; implementation status of those child pages is
  tracked separately from this leaf console.
