---
path: /studio/hathor/validation
surface: studio
domain: hathor
auth: signed-in + studio entitlement
source: apps/oshun/web/src/app/studio/hathor/validation/page.tsx
status: walked
last_walked:
  '2026-06-29 real-BFF route addendum — Playwright now covers the signed-in
  admin route, all embedded admin-scoped catalog GETs, unified-dashboard POST
  validation, embedded Timeline/Causality/Taxonomy POST validation, client-only
  dashboard validation errors, dashboard catalog-failure isolation, pending
  submit disablement, non-admin fail-closed state, anonymous redirect, route
  map, quick actions including Contradictions, 44px automated touch checks, and
  the shared axe gate. Evidence:
  WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §228;
  apps/oshun/web/e2e/studio-hathor-validation.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)'
---

# Studio Hathor · Validation

## Purpose

Aggregator surface that composes Hathor's lore-validation lanes: a Capability
Summary plus the embedded Unified Validation Dashboard, Lore Validation
Timeline, Lore Validation Causality, and Lore Validation Taxonomy workspaces. It
also links to the dedicated Lore Validation Contradictions detector. The page
itself issues no `/v1` fetch — each embedded lane owns its own admin-scoped,
fail-closed backend wiring.

## Entry points

- **Breadcrumb** — Studio › Hathor Unified Validation Dashboard › Validation
- **Quick-action links** to unified-validation-dashboard,
  lore-validation-timeline, lore-validation-causality, lore-validation-taxonomy,
  lore-validation-contradictions, and Back to Studio
- **Direct URL / bookmark** — yes; `alternates.canonical` set
- **Studio overview** — see
  [`../../studio-overview.md`](../../studio-overview.md)

## Layout regions

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

- **Breadcrumb panel** (`data-hathor-validation-breadcrumbs`): Studio → Hathor
  Unified Validation Dashboard → Validation (current)
- **Workspace** `<section data-hathor-validation-workspace>`:
  - `<h1>` (WorkspaceHeading) "Hathor Validation Workspace"
  - Summary `<p data-hathor-validation-summary>`
- **Capability Summary** (`data-hathor-validation-capability-summary`, `<h2>`)
  - **Unified Validation Dashboard Lane**
    (`data-hathor-validation-dashboard-lane`, `<h2>`) →
    `<StudioHathorUnifiedValidationDashboardWorkspace />`
  - **Lore Validation Timeline Lane** (`data-hathor-validation-timeline-lane`,
    `<h2>`) → `<StudioHathorLoreValidationTimelineWorkspace />`
  - **Lore Validation Causality Lane** (`data-hathor-validation-causality-lane`,
    `<h2>`) → `<StudioHathorLoreValidationCausalityWorkspace />`
  - **Lore Validation Taxonomy Lane** (`data-hathor-validation-taxonomy-lane`,
    `<h2>`) → `<StudioHathorLoreValidationTaxonomyWorkspace />`
- **Route Map panel** (`data-hathor-validation-route-map`): `<h2>` "Route Map" +
  `data-hathor-validation-route-count="7"` + 7 entries from
  `STUDIO_HATHOR_VALIDATION_ROUTE_MAP`
- **Quick-action lane** (`data-hathor-validation-quick-actions`,
  `data-hathor-validation-quick-action-count="6"`): six `Link.quickAction`
  anchors with stable `data-hathor-validation-quick-action` IDs (see Entry
  points)

## States

This page owns no fetch; each embedded lane carries its own loading /
unauthorized / error / ready / pending / result states:

- [x] **Unified Validation Dashboard Lane** — delegated to the dashboard
      workspace; route-level E2E covers catalog ready, result, validation-error,
      pending-submit, unauthorized, and catalog-error states from this
      aggregator.
- [x] **Lore Validation Timeline Lane** — delegated to the timeline workspace;
      route-level E2E covers ready catalog and seeded POST result from this
      aggregator, with deeper lane-specific states in the dedicated route spec.
- [x] **Lore Validation Causality Lane** — delegated to the causality workspace;
      route-level E2E covers ready catalog and seeded POST result from this
      aggregator, with deeper lane-specific states in the dedicated route spec.
- [x] **Lore Validation Taxonomy Lane** — delegated to the taxonomy workspace;
      route-level E2E covers ready catalog and seeded POST result from this
      aggregator, with deeper lane-specific states in the dedicated route spec.

## Interactions

### Embedded lanes

- [x] **Unified Validation Dashboard Lane** — edit events and eras JSON, run
      seeded inconsistent validation, edit to a clean payload, verify pending
      lockout, and verify malformed / non-array / empty client-side validation
      branches do not POST.
- [x] **Lore Validation Timeline Lane** — submit the seeded order-violation
      payload from the aggregator and verify the real BFF
      `TIMELINE_ORDER_VIOLATION` result.
- [x] **Lore Validation Causality Lane** — submit the seeded cycle payload from
      the aggregator and verify the real BFF `CAUSALITY_CYCLE_DETECTED` result.
- [x] **Lore Validation Taxonomy Lane** — submit the seeded cycle payload from
      the aggregator and verify the real BFF `TAXONOMY_CYCLE_DETECTED` result.

### Route Map panel

- [x] **7 route entries** — verify match with
      `STUDIO_HATHOR_VALIDATION_ROUTE_MAP`, including the contradictions
      diagnostic route-map entry.

### Quick-action lane

- [x] **"Open Hathor Unified Validation Dashboard workspace"** (→
      `/studio/hathor/unified-validation-dashboard`)
- [x] **"Open Hathor Lore Validation Timeline workspace"** (→
      `/studio/hathor/lore-validation-timeline`)
- [x] **"Open Hathor Lore Validation Causality workspace"** (→
      `/studio/hathor/lore-validation-causality`)
- [x] **"Open Hathor Lore Validation Taxonomy workspace"** (→
      `/studio/hathor/lore-validation-taxonomy`)
- [x] **"Open Hathor Lore Validation Contradictions workspace"** (→
      `/studio/hathor/lore-validation-contradictions`)
- [x] **"Back to Studio workspace index"** (→ `/studio`)

## Data & contracts

- **Reads / Writes**: none at the aggregator level; embedded lanes own their
  `/v1/admin/hathor/*` fetches:
  - `GET/POST /v1/admin/hathor/unified-validation-dashboard(/validate)`
  - `GET/POST /v1/admin/hathor/lore-validation-timeline(/validate)`
  - `GET/POST /v1/admin/hathor/lore-validation-causality(/validate)`
  - `GET/POST /v1/admin/hathor/lore-validation-taxonomy(/validate)`
- **Realtime**: none
- **Caching**: embedded client fetches use `cache: 'no-store'` +
  `buildBffAuthHeaders`
- **Auth/role check**: each embedded lane is admin-scoped fail-closed; route is
  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 lanes:
  [`./studio-hathor-lore-validation-timeline.md`](./studio-hathor-lore-validation-timeline.md),
  [`./studio-hathor-lore-validation-causality.md`](./studio-hathor-lore-validation-causality.md),
  [`./studio-hathor-lore-validation-taxonomy.md`](./studio-hathor-lore-validation-taxonomy.md),
  [`./studio-hathor-lore-validation-contradictions.md`](./studio-hathor-lore-validation-contradictions.md)
- Component sources:
  - `apps/oshun/web/src/components/studio/StudioHathorValidationWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioHathorValidationRouteMap.ts`
  - `apps/oshun/web/src/components/studio/StudioHathorUnifiedValidationDashboardWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioHathorLoreValidationTimelineWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioHathorLoreValidationCausalityWorkspace.tsx`
  - `apps/oshun/web/src/components/studio/StudioHathorLoreValidationTaxonomyWorkspace.tsx`

## E2E coverage

- [`apps/oshun/web/e2e/studio-hathor-validation.spec.ts`](../../../../apps/oshun/web/e2e/studio-hathor-validation.spec.ts)
  — signed-in admin route; real BFF catalog GETs for Unified Dashboard,
  Timeline, Causality, and Taxonomy; seeded and clean unified-dashboard suite
  POSTs; seeded Timeline / Causality / Taxonomy POSTs from the embedded hub
  lanes; malformed JSON / non-array / empty dashboard zero-POST branches;
  dashboard catalog-failure isolation while sibling lanes remain ready;
  non-admin fail-closed state across every embedded lane; anonymous
  redirect-before-render; route-map and quick-action anchors, including
  Contradictions; automated 44px checks; shared axe gate.
- Supporting lane-level specs: `studio-hathor-lore-validation-timeline.spec.ts`,
  `studio-hathor-lore-validation-causality.spec.ts`,
  `studio-hathor-lore-validation-taxonomy.spec.ts`, and
  `studio-hathor-lore-validation-contradictions.spec.ts` cover each dedicated
  validator route more deeply.

## Open questions / known gaps

- [x] 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).
- [ ] The aggregator links to the dedicated contradictions route but does not
      embed the contradiction detector form inline; confirm whether the detector
      should join this aggregator as a fifth embedded lane.
- [ ] Route Map advertises `dashboard/`, `timeline/`, `causality/`, `taxonomy/`,
      `contradictions/`, 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 route-level controls.
