Context. surface studio · domain hathor · route /studio/hathor/lore-validation-taxonomy · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/hathor/lore-validation-taxonomy/page.tsx
Last walked. 2026-06-29 real-BFF route addendum — Playwright now covers the signed-in admin route, real catalog GET, seeded cycle-detection POST, unknown-type POST, clean hierarchy POST, hierarchy-warning POST, client-only validation errors, live BFF 400 detail, loading/error, pending submit disablement, non-admin fail-closed state, anonymous redirect, route map, quick actions, 44px automated touch checks, and the shared axe gate. Evidence: WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §226; apps/oshun/web/e2e/studio-hathor-lore-validation-taxonomy.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 that validates an era taxonomy — checking the era hierarchy (parent/child relationships, types) for structural validity. The operator supplies a JSON array of eras and the lane returns a valid/clean verdict plus issue counts and a list of taxonomy issues.
Entry points#
- Direct URL / bookmark — yes;
alternates.canonicalset to/studio/hathor/lore-validation-taxonomy - Validation hub / Studio overview links — Hathor validation and Studio overview navigation link directly to this lane.
- Studio overview — see
../../studio-overview.md
Layout regions#
page.tsx renders inside <ShellLayout active="studio">:
- Workspace
<StudioHathorLoreValidationTaxonomyWorkspace />(data-hathor-lore-validation-taxonomy-workspace):WorkspaceHeading<h1>— "Hathor Lore Validation Taxonomy Workspace"- Summary
<p data-hathor-lore-validation-taxonomy-summary> - The taxonomy-validation catalog (
data-hathor-lvtx-catalog), form lane, pending submit state, validation errors, and result
- Route Map panel
data-hathor-lore-validation-taxonomy-route-map—<h2>"Route Map" listing the 5STUDIO_HATHOR_LORE_VALIDATION_TAXONOMY_ROUTE_MAPentries (events / conflicts / threads / governance child paths) - Quick-action lane (
data-hathor-lvtx-quick-actions,data-hathor-lvtx-quick-action-count="2") — Lore Validation Causality (data-hathor-lvtx-quick-action="lore-validation-causality") and Back to Studio workspace index (data-hathor-lvtx-quick-action="studio-index")
States#
- Loading —
data-hathor-lvtx-loadingwhile the GET catalog request is in flight - Unauthorized (admin-scope 401/403) —
data-hathor-lvtx-unauthorized - Error —
data-hathor-lvtx-error - Ready (form) —
data-hathor-lvtx-validate-formwithdata-hathor-lvtx-form-state="idle", eras textarea, and submit - Pending submit —
data-hathor-lvtx-form-state="validating"anddata-hathor-lvtx-submit-state="validating"; submit is disabled witharia-disabled="true"andaria-busy="true"until the BFF response returns - Result —
data-hathor-lvtx-resultwithdata-hathor-lvtx-valid/data-hathor-lvtx-countsanddata-hathor-lvtx-issues(per-issuedata-hathor-lvtx-issue-item) ordata-hathor-lvtx-clean - Validation error —
data-hathor-lvtx-validate-error
Interactions#
Taxonomy validation lane#
- Eras — eras textarea (
data-hathor-lvtx-eras,aria-label="eras json"), JSON array of{ id, name, type, parentEra? } - Submit —
<button data-hathor-lvtx-validate-submit>"Validate taxonomy" → POSTVALIDATE_ENDPOINT
Route Map panel#
- Route entries — verify match with
STUDIO_HATHOR_LORE_VALIDATION_TAXONOMY_ROUTE_MAP(5 entries)
Quick-action lane#
- "Open Hathor Lore Validation Causality workspace" →
/studio/hathor/lore-validation-causality - "Back to Studio workspace index" →
/studio
Data & contracts#
- Reads:
GET /v1/admin/hathor/lore-validation-taxonomy(LVTX_ENDPOINT) — the taxonomy validation catalog, rendered asdata-hathor-lvtx-catalog - Writes:
POST /v1/admin/hathor/lore-validation-taxonomy/validate(VALIDATE_ENDPOINT) with the eras array. The happy path returns{ ok: true, result }; malformed era payloads return BFF 400reasonstrings such asinvalid_era, which the lane surfaces indata-hathor-lvtx-validate-error. - Realtime: none
- Caching: client
fetchon mount,cache: 'no-store',buildBffAuthHeaders() - Auth/role check: admin-scoped, fail-closed on 401/403; route additionally gated signed-in + studio by the BFF proxy
Cross-references#
- Parent:
../../studio-overview.md - Shell:
../../../shell/04-auth-session.md - Sibling routes:
./studio-hathor-lore-validation-causality.md,./studio-hathor-lore-validation-contradictions.md,./studio-hathor-lore-validation-timeline.md - Component sources:
apps/oshun/web/src/components/studio/StudioHathorLoreValidationTaxonomyWorkspace.tsxapps/oshun/web/src/components/studio/StudioHathorLoreValidationTaxonomyRouteMap.ts
E2E coverage#
apps/oshun/web/e2e/studio-hathor-lore-validation-taxonomy.spec.ts— signed-in admin route; real Hathor taxonomy-validation BFF catalog and validate calls; seededTAXONOMY_CYCLE_DETECTED; editedTAXONOMY_INVALID_TYPE; clean age → epoch nesting; warningTAXONOMY_HIERARCHY_VIOLATION; malformed JSON and empty-array zero-POST branches; live BFFinvalid_era400 detail; catalog loading/error; pending submit lockout; non-admin fail-closed state; anonymous redirect; route-map and quick-action anchors; automated 44px checks for the main editable controls and quick actions; shared axe gate.- Supporting route contract coverage:
apps/oshun/bff/src/__tests__/admin-hathor-lore-validation-taxonomy-route.test.tscovers auth/scope, issue-code/type catalog, invalid type, missing parent, cycle detection, valid nesting, disallowed nesting warnings, and BFF 400 payload validation.
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). - Manual screen-reader pass remains for the live browser surface; automated axe and touch-target coverage now pass for the route-level controls.