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:
StudioHathorWorkbenchWorkspacemounts this workspace inline as its "Workbench Timeline Lane" - Direct URL / bookmark — yes;
alternates.canonicalset - 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 fromSTUDIO_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> - Unauthorized —
data-hathor-wbt-unauthorizedon 401/403 (admin Hathor scope required); fail-closed - Error —
data-hathor-wbt-erroron non-OK GET / malformed catalog - Ready (form) —
data-hathor-wbt-validate-formonce the catalog loads, withdata-hathor-wbt-catalog - Pending submit —
data-hathor-wbt-submit-state="pending"; submit is disabled witharia-disabled="true"andaria-busy="true"until the BFF response returns - Result —
data-hathor-wbt-resultafter a 200 validate, withdata-hathor-wbt-valid/data-hathor-wbt-countsand adata-hathor-wbt-issueslist ofdata-hathor-wbt-issue-item, ordata-hathor-wbt-clean;data-hathor-wbt-validate-errorfor 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 - Result —
data-hathor-wbt-valid,data-hathor-wbt-counts, the issue list (data-hathor-wbt-issues→data-hathor-wbt-issue-item), ordata-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-timelineon mount - Writes: POST
/v1/admin/hathor/workbench-timeline/validate - Realtime: none
- Caching: client
fetchon mount,cache: 'no-store';buildBffAuthHeaders - Auth/role check: admin-scoped fail-closed (401/403); behind the signed-in and studio proxy gate
Cross-references#
- Parent:
../../studio-overview.md - Shell:
../../../shell/04-auth-session.md - Sibling routes:
./studio-hathor-workbench.md(aggregator that embeds this workspace),./studio-hathor-timeline-modeling.md(sameworkbench-timelinevalidator endpoint) - Component sources:
apps/oshun/web/src/components/studio/StudioHathorWorkbenchTimelineWorkspace.tsxapps/oshun/web/src/components/studio/StudioHathorWorkbenchTimelineRouteMap.ts
E2E coverage#
apps/oshun/web/e2e/studio-hathor-workbench-timeline.spec.tscovers 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.csvandWALKTHROUGH/matrix/coverage.md(product-owner confirmation recorded 2026-05-29 for Bellona / Hathor / Neith). - This route and
timeline-modelingboth wire the sameworkbench-timelinevalidator endpoint; confirm whether the duplication is intentional or the two routes should converge. - Route Map advertises
catalog/,events/,revisions/, andgovernance/sub-routes with nopage.tsxyet. - Manual screen-reader pass remains for the live browser surface; automated axe and touch-target coverage now pass for the standalone route.