---
path: /studio/aja/mocap-input-formats
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/mocap-input-formats/page.tsx
status: walked + e2e-covered
last_walked:
  '2026-07-04 focused real-dev-infra Playwright route walk - anonymous redirect,
  Aja-admin Alembic-JSON catalog, exact shipped valid document, edited malformed
  document through the real BFF, local/BFF validation, malformed/transport
  failures, loading/403/503/malformed catalog states, pending controls,
  route-map + quick-action affordances, mobile/touch/axe, and direct BFF
  auth/schema gates. Evidence:
  WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §296.'
---

# Studio Aja - MoCap Input Formats

## Purpose

Admin lane console wired to the real `@aja/motion-formats` Alembic-JSON
validation via `/v1/admin/aja/mocap-input-formats`: paste an Alembic-JSON
document and the tool runs the ingest pre-flight - format tag, joint hierarchy,
time samplings, and metadata checks - then reads back the backend, sample count,
fps, and joint count.

## Entry points

- **Direct URL / bookmark** - `/studio/aja/mocap-input-formats`; metadata sets
  `alternates.canonical`.
- **Studio nav** - Domain-bridge studios section of `/studio`.
- **Sibling quick-actions from this page** - Human Mesh Recovery, Back to
  Studio.

## Layout regions

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

- **Workspace** `<StudioAjaMocapInputFormatsWorkspace />`:
  - `<h1>` "Aja MoCap Input Formats Workspace" + summary
    (`data-aja-mocap-input-formats-summary`).
  - Capability Summary panel (`data-aja-mocap-input-formats-capability-summary`,
    4 cards).
  - Format Validation Operations Lane
    (`data-aja-mocap-input-formats-operations-lane`) with the live Alembic-JSON
    validator form.
- **Route Map panel** (`data-aja-mocap-input-formats-route-map`): 5
  `STUDIO_AJA_MOCAP_INPUT_FORMATS_ROUTE_MAP` entries exposed with
  `data-aja-mocap-input-formats-route-entry` / `data-route-path`.
- **Quick-action lane** (`data-aja-mocap-input-formats-quick-actions`): two
  `Link.quickAction` anchors.

## States

The lane fetches `GET /v1/admin/aja/mocap-input-formats` on mount.

- [x] **Loading** - `data-aja-mif-loading` "Loading format validator...".
- [x] **Unauthorized** - `data-aja-mif-unauthorized` (401/403; default "Aja
      workspace scope required to validate mocap input.").
- [x] **Error** - `data-aja-mif-error` for non-OK, malformed catalog, network
      failure, or unavailable `fetch`.
- [x] **Ready (form)** - `data-aja-mif-catalog` with validator, error-check
      count, warning-check count, check spans, and idle `data-aja-mif-form`.
- [x] **Result** - `data-aja-mif-result` with stable valid/error/warning counts
      plus format, backend, sample, fps, and joint attributes.
- [x] **Validation error** - `data-aja-mif-validate-error` for blank client
      input, BFF detail messages, malformed success payloads, and transport
      failures.
- [x] **Pending** - textarea and submit disable while
      `data-aja-mif-form-state="validating"` /
      `data-aja-mif-submit-state="validating"`.
- [x] **Mobile/touch containment** - form controls and route actions remain at
      least 44 px tall with no horizontal overflow.

## Interactions

### Validate form (`data-aja-mif-form`)

- [x] **Alembic-JSON document** - textarea `data-aja-mif-content` seeded with a
      valid Alembic-JSON sample.
- [x] **Validate document** - submit `data-aja-mif-submit`; fires
      `POST /v1/admin/aja/mocap-input-formats/validate` with `{ content }`;
      locked with `data-aja-mif-submit-state="validating"` while the real
      request is pending.

### Capability Summary panel

- [x] **4 cards** (`data-aja-mocap-input-formats-capability=<id>`):
      `format-governance-control-plane`, `diagnostics-and-trace-observability`,
      `security-permission-audit-controls`, and
      `api-parity-and-contract-assurance` - non-interactive.

### Route Map panel

- [x] **Route entries** (5) - non-interactive listing with exact path ordering.

### Quick-action lane

- [x] **"Open Aja Human Mesh Recovery workspace"** -
      `/studio/aja/human-mesh-recovery`
- [x] **"Back to Studio workspace index"** - `/studio`

## Data & contracts

- **Reads**: `GET /v1/admin/aja/mocap-input-formats` (catalog: `validator`,
  `summary`, `errorChecks`, `warningChecks`); client fails closed unless the
  expected `alembic-json` validator and required error/warning checks are
  present.
- **Writes**: `POST /v1/admin/aja/mocap-input-formats/validate` →
  `{ result: { valid, errors, warnings, info } }`; client fails closed unless
  errors/warnings are string arrays and info contains finite sample, fps, and
  joint counts.
- **Realtime**: none.
- **Caching**: client fetch on mount (`cache: 'no-store'`); SSR shell.
- **Auth/role check**: BFF endpoints are admin-scoped and fail-closed (401/403 →
  unauthorized render); route is gated signed-in + studio via proxy.

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Sibling from quick-actions: `/studio/aja/human-mesh-recovery`
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaMocapInputFormatsWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaMocapInputFormatsRouteMap.ts`

## Verification evidence

- `apps/oshun/web/e2e/studio-aja-mocap-input-formats.spec.ts` runs against the
  real Next Studio shell and local BFF, forwarding browser bearer auth rather
  than mocking the Alembic-JSON contract.
- The spec covers anonymous redirect, Aja-admin catalog load, exact shipped
  valid-document readback, edited malformed-document errors/warnings, local
  blank validation with no POST, BFF validation details, malformed result,
  transport failure, loading / 503 / malformed / non-admin states, pending form
  locking, mobile no-overflow / 44px controls, scoped axe, and direct BFF
  401/403/400/200 gates.

## Open questions / known gaps

- [ ] Route Map lists `scenes`/`exports`/`revisions`/`governance` child routes
      that are not yet implemented as pages.
