V1 Web PWA · Surface walkthrough

Aja Foot Sliding Correction

A per-surface walkthrough of the V1 Web PWA studio surface: layout, states, interactions, data, and cross-references.

walked + e2e-covered
9sections3 minread

On this page

Context. surface studio · domain aja · route /studio/aja/foot-sliding-correction · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/aja/foot-sliding-correction/page.tsx

Last walked. 2026-07-02 cleanup-lane console addendum — Playwright real-dev-infra coverage now proves signed-in render, route-map contract, quick-action href order, ready ground-contact catalog, 44 px submit target, short-track client guard with no POST, real BFF foot-sliding result, fail-closed loading/unauthorized/malformed-catalog states, mobile no-overflow, and direct BFF 401/403/400/200 gates. Spec: apps/oshun/web/e2e/studio-aja-cleanup-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)

Purpose#

Admin lane console wired to the real @aja/motion-processing measureFootSliding analyzer via /v1/admin/aja/foot-sliding-correction: it accumulates the horizontal drift a foot joint shows while planted on the ground (below the ground-contact height threshold) — the sliding metric that drives IK foot-locking correction. The operator supplies a per-frame (x,y,z) foot-joint track.

Entry points#

  • Direct URL/studio/aja/foot-sliding-correction (signed-in + studio entitlement)
  • Sibling quick-actions from this page — Noise Reduction, Back to Studio

Layout regions#

page.tsx mounts ShellLayout with active="studio" and renders three panels.

  • Workspace panel (data-aja-foot-sliding-correction-workspace):
    • <h1> "Aja Foot Sliding Correction Workspace" (via WorkspaceHeading)
    • <p data-aja-foot-sliding-correction-summary> — "Measure the horizontal drift a foot joint accumulates while planted on the ground — the sliding metric that drives IK foot-locking correction."
    • data-aja-fsc-model (ground-contact threshold + unit) + the measure form
  • Route Map panel (data-aja-foot-sliding-correction-route-map): <h2> "Route Map" + one <article> per STUDIO_AJA_FOOT_SLIDING_CORRECTION_ROUTE_MAP entry (5 entries)
  • Quick actions panel: .quickAction <Link>s — see Interactions

States#

  • Loadingdata-aja-fsc-loading "Loading foot-sliding model…"
  • Unauthorized — on 401/403, data-aja-fsc-unauthorized ("Access restricted." + reason, default "Aja workspace scope required to view foot-sliding correction.")
  • Error — non-OK / malformed / unreachable → data-aja-fsc-error
  • Ready (form) — catalog present: data-aja-fsc-model + the measure form
  • Resultdata-aja-fsc-result with data-aja-fsc-total (total sliding, m) and data-aja-fsc-contact (contact frames / total)
  • Validation errordata-aja-fsc-measure-error (e.g. "Track must contain at least 2 frames of x,y,z." / "Frame rate must be a positive number.")

Interactions#

Measure form (data-aja-fsc-measure-form)#

  • Foot joint nameinput data-aja-fsc-field-joint
  • Foot track ("x,y,z; x,y,z; …")input data-aja-fsc-field-track
  • Frame rate (Hz)input data-aja-fsc-field-rate
  • Measure slidingbutton data-aja-fsc-measure-submit; parses the track into {x,y,z} frames, then POSTs to /v1/admin/aja/foot-sliding-correction/measure with { footJointName, track, frameRate }

Route Map panel (data-aja-foot-sliding-correction-route-map)#

Non-interactive <article> blocks from STUDIO_AJA_FOOT_SLIDING_CORRECTION_ROUTE_MAP (5 entries): /studio/aja/foot-sliding-correction plus …/scenes/[sceneId], …/exports/[exportId], …/revisions/[revisionId], …/governance/[policyId].

Quick actions panel#

  • Open Aja Noise Reduction workspace/studio/aja/noise-reduction
  • Back to Studio workspace index/studio

E2E coverage#

  • apps/oshun/web/e2e/studio-aja-cleanup-lane-consoles.spec.ts covers signed-in shell render, ready ground-contact catalog (0.1 m, meters), short-track client guard with no POST, real BFF planted-foot sliding output (total sliding: 5 m, contact frames: 3 / 3), route-map count, exact quick-action hrefs, 44 px submit target, loading / unauthorized / malformed-catalog fail-closed states, mobile no-overflow, and direct BFF auth/schema/happy-path gates.

Data & contracts#

  • Reads: GET /v1/admin/aja/foot-sliding-correction (catalog: groundContactHeight, measures, unit) on mount via buildBffAuthHeaders(), cache: 'no-store'
  • Writes: POST …/measure{ measurement }
  • Realtime: none
  • Caching: client fetch on mount (no-store); SSR shell only
  • Auth: BFF endpoints admin-scoped + fail-closed (401/403 → unauthorized render); the route is signed-in + studio (proxy gate)

Cross-references#

  • Parent: ../../studio-overview.md
  • Component sources:
    • apps/oshun/web/src/components/studio/StudioAjaFootSlidingCorrectionWorkspace.tsx
    • apps/oshun/web/src/components/studio/StudioAjaFootSlidingCorrectionRouteMap.ts
  • Sibling from quick-actions: /studio/aja/noise-reduction

Known downstream boundaries#

  • Route-map sub-routes are descriptive contracts; implementation status of those child pages is tracked separately from this leaf console.
  • Studio entitlement / proxy policy remains a shell-auth boundary outside this lane console.