Context. surface studio · domain aja · route /studio/aja/pose-lifting · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/aja/pose-lifting/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#
Leaf lane console that wires the real @aja/pose-lifting validatePose
anthropometric validator. The operator enters a 3D keypoint set and the lane
checks whether the lifted pose is physically plausible — bone ratios, joint
angles, left/right symmetry, and proportions — the acceptance gate for monocular
2D→3D lifting, returning a verdict, overall score, and any constraint
violations.
Entry points#
- Direct URL / bookmark —
/studio/aja/pose-lifting. - Studio nav — Domain-bridge studios section of
/studio. - Breadcrumb parent —
/studio/aja/pose-estimation(page breadcrumb). - Sibling quick-actions — Pose Estimation, Depth Sensing, Multi-View Reconstruction, Motion Validation.
Layout regions#
page.tsx renders inside <ShellLayout active="studio">:
- Breadcrumb panel (
data-aja-pose-lifting-breadcrumbs):<nav aria-label="Aja Pose Lifting breadcrumbs">→Studio(link) /Aja Pose Estimation(link →/studio/aja/pose-estimation) /Pose Lifting(aria-current="page"). - Workspace
<StudioAjaPoseLiftingWorkspace />:<h1>"Aja Pose Lifting Workspace" + summary (data-aja-pl-summary).- The validate form (states below).
- Route Map panel (
data-aja-pose-lifting-route-map,<h2>"Route Map"): 6STUDIO_AJA_POSE_LIFTING_ROUTE_MAPentries — primary, jobs, baselines, evidence, parity, governance. - Quick-action lane: five
Link.quickActionanchors (no self-link).
States#
The lane fetches GET /v1/admin/aja/pose-lifting on mount.
- Loading —
data-aja-pl-loading"Loading validator…". - Unauthorized —
data-aja-pl-unauthorized(401/403; default "Aja workspace scope required to view pose lifting."). - Error —
data-aja-pl-error. - Ready (form) —
data-aja-pl-validate-form. - Result —
data-aja-pl-resultwithdata-aja-pl-valid(plausible + score),data-aja-pl-violation-count, and per-violation rows (data-aja-pl-violation). - Validation error —
data-aja-pl-validate-error(e.g. 'Enter at least one "joint:x,y,z" keypoint.').
Interactions#
Validate form (data-aja-pl-validate-form)#
- Skeleton type — select
data-aja-pl-field-skeleton(catalogskeletonTypes; defaulth36m). - Keypoints — "joint:x,y,z; …" — input
data-aja-pl-field-keypoints. - Validate pose — submit
data-aja-pl-validate-submit; firesPOST /v1/admin/aja/pose-lifting/validatewith{ skeletonType, keypoints }.
Route Map#
- Route entries (6) — non-interactive listing.
Quick-action lane#
- "Open Aja Pose Estimation workspace" →
/studio/aja/pose-estimation - "Open Aja Depth Sensing workspace" →
/studio/aja/depth-sensing - "Open Aja Multi-View Reconstruction workspace" →
/studio/aja/multi-view-reconstruction - "Open Aja Motion Validation workspace" →
/studio/aja/motion-validation - "Back to Studio workspace index" →
/studio
Data & contracts#
- Reads:
GET /v1/admin/aja/pose-lifting(catalog:skeletonTypes,constraintTypes,symmetryTolerance). - Writes:
POST /v1/admin/aja/pose-lifting/validate→{ isValid, overallScore, violationCount, byType, violations }. - Realtime: none.
- Caching: client fetch on mount (
cache: 'no-store'); SSR shell. - Auth/role check: BFF endpoint admin-scoped + fail-closed; route gated signed-in + studio via proxy.
Cross-references#
- Parent:
../../studio-overview.md - Siblings (quick-actions):
/studio/aja/pose-estimation,/studio/aja/depth-sensing,/studio/aja/multi-view-reconstruction,/studio/aja/motion-validation - Component sources:
apps/oshun/web/src/components/studio/StudioAjaPoseLiftingWorkspace.tsxapps/oshun/web/src/components/studio/StudioAjaPoseLiftingRouteMap.ts
Open questions / known gaps#
- Route Map lists
jobs/baselines/evidence/parity/governancechild routes that are not yet implemented as pages.