---
path: /studio/aja/depth-sensing
surface: studio
domain: aja
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/aja/depth-sensing/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 · Depth Sensing

## Purpose

Aggregator console that unifies the Aja spatial-capture lane consoles for depth
sensing. It has no /v1 fetch of its own — it renders a capability summary plus
five named lanes, each embedding a sibling leaf workspace (Depth Analysis,
Multi-View Reconstruction, Pose Estimation, Segmentation, Ground Truth
Comparison), so the operator can run all the depth-sensing primitives from one
surface.

## Entry points

- **Direct URL / bookmark** — `/studio/aja/depth-sensing`; metadata canonical to
  this path
- **Studio nav** — Domain-bridge studios section of `/studio`
- **Breadcrumb parent** — `/studio/aja/depth-analysis` (declared in the page.tsx
  breadcrumb `<ol>`)
- **Sibling quick-actions on this page**: Depth Analysis, Multi-View
  Reconstruction, Pose Estimation, Segmentation, Back to Studio
- **Operator surfacing** — see
  [`../../studio-overview.md`](../../studio-overview.md)

## Layout regions

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

- **Breadcrumb panel** (`data-aja-depth-sensing-breadcrumbs`):
  `<nav aria-label="Aja Depth Sensing breadcrumbs">` →
  `Studio / Aja Depth Analysis / Depth Sensing`
- **Workspace** (`<StudioAjaDepthSensingWorkspace />`, archetype: AGGREGATOR):
  - `<h1>` (`WorkspaceHeading`) "Aja Depth Sensing Workspace"
  - Summary `<p data-aja-depth-sensing-summary>` — unified depth-sensing surface
  - **Capability Summary** panel (`data-aja-depth-sensing-capability-summary`,
    `<h2>Capability Summary</h2>`) — 4 `data-aja-depth-sensing-capability`
    cards: `sensing-control-plane`, `diagnostics-and-trace-observability`,
    `security-permission-audit-controls`, `api-parity-and-contract-assurance`
  - **Named lanes** (each a `<h2>` panel embedding a sibling via
    `WorkspaceSection`):
    - `data-aja-depth-sensing-depth-analysis-lane` → "Depth Analysis Lane" →
      `<StudioAjaDepthAnalysisWorkspace />`
    - `data-aja-depth-sensing-multi-view-reconstruction-lane` → "Multi-View
      Reconstruction Lane" → `<StudioAjaMultiViewReconstructionWorkspace />`
    - `data-aja-depth-sensing-pose-estimation-lane` → "Pose Estimation Lane" →
      `<StudioAjaPoseEstimationWorkspace />`
    - `data-aja-depth-sensing-segmentation-lane` → "Segmentation Lane" →
      `<StudioAjaSegmentationWorkspace />`
    - `data-aja-depth-sensing-ground-truth-comparison-lane` → "Ground Truth
      Comparison Lane" → `<StudioAjaGroundTruthComparisonWorkspace />`
- **Route Map panel** (`data-aja-depth-sensing-route-map`): `<h2>Route Map</h2>`
  listing 6 entries from `STUDIO_AJA_DEPTH_SENSING_ROUTE_MAP` (primary, streams,
  calibrations, reconstructions, parity, governance)
- **Quick-action panel**: five `Link.quickAction` anchors — Depth Analysis,
  Multi-View Reconstruction, Pose Estimation, Segmentation, Back to Studio

## States

The aggregator has no fetch of its own; loading / unauthorized / error / ready /
result states are owned per embedded lane (each leaf GETs its own catalog on
mount and renders its own admin-scope unauthorized / error / form / result
blocks — see the individual sibling docs):

- [ ] **Depth Analysis Lane** — `<StudioAjaDepthAnalysisWorkspace />`
- [ ] **Multi-View Reconstruction Lane** —
      `<StudioAjaMultiViewReconstructionWorkspace />`
- [ ] **Pose Estimation Lane** — `<StudioAjaPoseEstimationWorkspace />`
- [ ] **Segmentation Lane** — `<StudioAjaSegmentationWorkspace />`
- [ ] **Ground Truth Comparison Lane** —
      `<StudioAjaGroundTruthComparisonWorkspace />`
- [x] **Empty / Standalone PWA / offline** — N/A at the aggregator level; shell
      is SSR, each lane is a client fetch on mount

## Interactions

### Embedded lanes

Each lane's form fields and submit are owned by the embedded leaf:

- [ ] **Depth Analysis Lane** — embeds `StudioAjaDepthAnalysisWorkspace`
- [ ] **Multi-View Reconstruction Lane** — embeds
      `StudioAjaMultiViewReconstructionWorkspace`
- [ ] **Pose Estimation Lane** — embeds `StudioAjaPoseEstimationWorkspace`
- [ ] **Segmentation Lane** — embeds `StudioAjaSegmentationWorkspace`
- [ ] **Ground Truth Comparison Lane** — embeds
      `StudioAjaGroundTruthComparisonWorkspace`

### Capability Summary

- [ ] **Capability cards** (4 × `<article>`) — non-interactive descriptive copy

### Route Map panel

- [ ] **Route entries** (6 × `<article>`) — non-interactive path+purpose

### Quick-action panel

- [ ] **"Open Aja Depth Analysis workspace"** → `/studio/aja/depth-analysis`
- [ ] **"Open Aja Multi-View Reconstruction workspace"** →
      `/studio/aja/multi-view-reconstruction`
- [ ] **"Open Aja Pose Estimation workspace"** → `/studio/aja/pose-estimation`
- [ ] **"Open Aja Segmentation workspace"** → `/studio/aja/segmentation`
- [ ] **"Back to Studio workspace index"** → `/studio`

## Data & contracts

- **Reads / Writes**: none at the aggregator level; delegated to the embedded
  leaves, which GET their catalog on mount and POST their verb:
  - `GET /v1/admin/aja/depth-analysis`
  - `GET /v1/admin/aja/multi-view-reconstruction`
  - `GET /v1/admin/aja/pose-estimation` /
    `POST /v1/admin/aja/pose-estimation/evaluate`
  - `GET /v1/admin/aja/segmentation`
  - `GET /v1/admin/aja/ground-truth-comparison` /
    `POST /v1/admin/aja/ground-truth-comparison/compare`
- **Realtime**: none
- **Caching**: each embedded lane does a client `fetch` on mount with
  `cache: 'no-store'` and `buildBffAuthHeaders()`; SSR shell only
- **Auth/role check**: each embedded BFF endpoint is admin-scoped + fail-closed
  (401/403 → that lane's unauthorized render); route behind the signed-in +
  studio proxy gate

## Cross-references

- Parent: [`../../studio-overview.md`](../../studio-overview.md)
- Shell:
  [`../../../shell/04-auth-session.md`](../../../shell/04-auth-session.md)
- Embedded / sibling routes:
  [`./studio-aja-depth-analysis.md`](./studio-aja-depth-analysis.md)
  (breadcrumb parent),
  [`./studio-aja-multi-view-reconstruction.md`](./studio-aja-multi-view-reconstruction.md),
  [`./studio-aja-pose-estimation.md`](./studio-aja-pose-estimation.md),
  [`./studio-aja-segmentation.md`](./studio-aja-segmentation.md),
  [`./studio-aja-ground-truth-comparison.md`](./studio-aja-ground-truth-comparison.md)
  (embedded but not in the quick-action lane)
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioAjaDepthSensingWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioAjaDepthSensingRouteMap.ts`

## Open questions / known gaps

- [ ] Ground Truth Comparison is embedded as a lane but is not surfaced in the
      quick-action panel; confirm whether that omission is intentional
- [ ] Route-map sub-routes are advertised but have no `page.tsx` in V1
