V1 Web PWA · Surface walkthrough

Studio Hathor · Workbench Timeline

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

walked
9sections3 minread

On this page

Context. surface studio · domain hathor · route /studio/hathor/workbench-timeline · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/hathor/workbench-timeline/page.tsx

Last walked. 2026-06-29 standalone real-BFF route addendum: the dedicated Playwright spec now covers direct admin navigation, real scene-order catalog GET, seeded blocking story-order/causal integrity verdict, edited clean export-ready packet, warning-only uncovered world-state tag, client-only JSON rejection, live BFF 400 detail, catalog loading/error state, pending submit disablement, non-admin fail-closed state, route-map and quick-action affordances, 44px touch checks, shared axe, and anonymous redirect. Evidence: WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §232; apps/oshun/web/e2e/studio-hathor-workbench-timeline.spec.ts. 2026-05-29 automated runtime walk 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 for the real @hathor/timeline scene-order packet validator. Submit a story-vs-shoot scene order and check its integrity — every required scene present, each scene's story order matching its chronological rank, causal prerequisites preceding their dependents, required world-state tags covered, and CGI export metadata present. Blocking issues fail the packet; an uncovered tag is a warning. Admin-scoped and fail-closed.

Entry points#

  • Quick-action link from /studio/hathor/workbench-locations (this page links out to workbench-locations)
  • Aggregator embed: StudioHathorWorkbenchWorkspace mounts this workspace inline as its "Workbench Timeline Lane"
  • Direct URL / bookmark — yes; alternates.canonical set
  • Studio overview — see ../../studio-overview.md

Layout regions#

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

  • Workspace <section data-hathor-workbench-timeline-workspace>:
    • <h1> (WorkspaceHeading) "Hathor Workbench Timeline Workspace"
    • Summary <p data-hathor-workbench-timeline-summary>
    • Catalog evidence (data-hathor-wbt-catalog) and the validate form lane: data-hathor-wbt-validate-form
  • Route Map panel (data-hathor-workbench-timeline-route-map, data-hathor-wbt-route-count="5"): <h2> "Route Map" + 5 entries from STUDIO_HATHOR_WORKBENCH_TIMELINE_ROUTE_MAP
  • Quick-action lane (data-hathor-wbt-quick-actions, data-hathor-wbt-quick-action-count="2"): Workbench Locations (data-hathor-wbt-quick-action="workbench-locations"), Back to Studio workspace index (data-hathor-wbt-quick-action="studio-index")

States#

  • Loading<p data-hathor-wbt-loading>
  • Unauthorizeddata-hathor-wbt-unauthorized on 401/403 (admin Hathor scope required); fail-closed
  • Errordata-hathor-wbt-error on non-OK GET / malformed catalog
  • Ready (form)data-hathor-wbt-validate-form once the catalog loads, with data-hathor-wbt-catalog
  • Pending submitdata-hathor-wbt-submit-state="pending"; submit is disabled with aria-disabled="true" and aria-busy="true" until the BFF response returns
  • Resultdata-hathor-wbt-result after a 200 validate, with data-hathor-wbt-valid / data-hathor-wbt-counts and a data-hathor-wbt-issues list of data-hathor-wbt-issue-item, or data-hathor-wbt-clean; data-hathor-wbt-validate-error for invalid JSON / non-200

Interactions#

Workspace body (validate form lane)#

  • Scene-order packet (JSON)<textarea data-hathor-wbt-packet> (aria-label "packet json")
  • Validate scene order<button data-hathor-wbt-validate-submit type="submit"> → POST /v1/admin/hathor/workbench-timeline/validate
  • Resultdata-hathor-wbt-valid, data-hathor-wbt-counts, the issue list (data-hathor-wbt-issuesdata-hathor-wbt-issue-item), or data-hathor-wbt-clean

Route Map panel#

  • 5 route entries — verify match with STUDIO_HATHOR_WORKBENCH_TIMELINE_ROUTE_MAP

Quick-action lane#

  • "Open Hathor Workbench Locations workspace" (→ /studio/hathor/workbench-locations)
  • "Back to Studio workspace index" (→ /studio)

Data & contracts#

  • Reads: GET /v1/admin/hathor/workbench-timeline on mount
  • Writes: POST /v1/admin/hathor/workbench-timeline/validate
  • Realtime: none
  • Caching: client fetch on mount, cache: 'no-store'; buildBffAuthHeaders
  • Auth/role check: admin-scoped fail-closed (401/403); behind the signed-in and studio proxy gate

Cross-references#

E2E coverage#

  • apps/oshun/web/e2e/studio-hathor-workbench-timeline.spec.ts covers the standalone route against the real dev BFF: direct admin navigation, catalog GET with bearer forwarding, seeded blocking story-order and causal dependency verdict, edited clean export-ready packet, warning-only uncovered world-state tag, malformed JSON and primitive JSON zero-POST rejection, live BFF 400 detail, catalog loading/error state, pending submit lockout, non-admin fail-closed state, route-map and quick-action affordances, 44px checks for the editor, submit control, and quick-action links, anonymous redirect-before-render, and the shared axe gate.

Open questions / known gaps#

  • Hathor is confirmed in V1 per WALKTHROUGH/matrix/routes.csv and WALKTHROUGH/matrix/coverage.md (product-owner confirmation recorded 2026-05-29 for Bellona / Hathor / Neith).
  • This route and timeline-modeling both wire the same workbench-timeline validator endpoint; confirm whether the duplication is intentional or the two routes should converge.
  • Route Map advertises catalog/, events/, revisions/, and governance/ sub-routes with no page.tsx yet.
  • Manual screen-reader pass remains for the live browser surface; automated axe and touch-target coverage now pass for the standalone route.