Context. surface studio · domain hathor · route /studio/hathor/culture-evolution-simulation · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/hathor/culture-evolution-simulation/page.tsx
Last walked. 2026-07-04 focused real-dev-infra Playwright — anonymous redirect, Hathor-admin catalog load, bearer propagation, live BFF culture assessments, fail-closed states, pending form lockout, mobile controls, scoped axe, and direct BFF contract gates. Evidence: WALKTHROUGH/results/v1-real-infra-run-2026-06-22.md §282; spec: apps/oshun/web/e2e/studio-hathor-culture-evolution-simulation.spec.ts
Purpose#
Admin lane console for the real @hathor/domain-models cultural-compatibility
and social-analysis algorithms. Describe two cultures (social structure, values,
mutual attitudes, social classes) and read back their compatibility score
(−100…100, from shared values + structure match + mutual attitudes) plus each
culture's dominant value category, social mobility, and Gini-like inequality
index. Admin-scoped and fail-closed.
Entry points#
- Quick-action link from
/studio/hathor/politics-simulation— this page links out to politics-simulation, which reciprocally links back - 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-culture-evolution-simulation-workspace>:<h1>(WorkspaceHeading) "Hathor Culture Evolution Simulation Workspace"- Summary
<p data-hathor-culture-evolution-simulation-summary> - The assess form lane (catalog-gated):
data-hathor-ce-form, strict catalog disclosuredata-hathor-ce-catalog, two JSON editors, submit, and result/error output.
- Route Map panel (
data-hathor-culture-evolution-simulation-route-map):<h2>"Route Map" + 5 entries fromSTUDIO_HATHOR_CULTURE_EVOLUTION_SIMULATION_ROUTE_MAP, withdata-hathor-ce-route-countanddata-hathor-ce-route-map-entry[data-route-path]. - Quick-action lane (
data-hathor-ce-quick-actions): twoLink.quickActionanchors — Politics Simulation (data-hathor-ce-quick-action="politics-simulation"), Back to Studio workspace index (data-hathor-ce-quick-action="studio-index").
States#
- Loading —
<p data-hathor-ce-loading role="status">"Loading culture engine…" - Unauthorized —
data-hathor-ce-unauthorized"Access restricted." on 401/403 (admin Hathor scope required); fail-closed withrole="alert". - Error —
data-hathor-ce-error"Could not load the culture engine." on non-OK GET, network failure, or malformed catalog. - Ready (form) —
data-hathor-ce-formonce the complete catalog (socialStructures,attitudes) loads; idle state isdata-hathor-ce-form-state="idle". - Pending assessment —
data-hathor-ce-form-state="pending"/aria-busy="true"while both editors and the submit button are disabled. - Result —
data-hathor-ce-resultafter a 200 assess withdata-compatibility;data-hathor-ce-assess-errorfor invalid JSON, non-object JSON, malformed 200 payloads, transport failure, or non-200.
Interactions#
Workspace body (assess form lane)#
- Culture A (JSON) —
<textarea data-hathor-ce-culture-a>(aria-label "culture a json"), seeded with a default culture - Culture B (JSON) —
<textarea data-hathor-ce-culture-b>(aria-label "culture b json") - Reference
<details>—data-hathor-ce-catalogwithdata-hathor-ce-social-structure-count/data-hathor-ce-attitude-count;data-hathor-ce-structuresanddata-hathor-ce-attitudesecho the catalog enums. - Assess cultures —
<button data-hathor-ce-submit type="submit">→ POST/v1/admin/hathor/culture-evolution-simulation/assesswith{ cultureA, cultureB }. - Result —
data-hathor-ce-compatibility("compatibility: N / 100") plus twodata-hathor-ce-metricsblocks (a / b) withdata-culture-id, dominant value, social mobility, and inequality index.
Route Map panel#
- 5 route entries — verified against
STUDIO_HATHOR_CULTURE_EVOLUTION_SIMULATION_ROUTE_MAP
Quick-action lane#
- "Open Hathor Politics Simulation workspace" (link →
/studio/hathor/politics-simulation) - "Back to Studio workspace index" (link →
/studio)
Data & contracts#
- Reads: GET
/v1/admin/hathor/culture-evolution-simulation(social structures + attitudes catalog) on mount - Writes: POST
/v1/admin/hathor/culture-evolution-simulation/assess - Realtime: none
- Caching: client
fetchon mount,cache: 'no-store';buildBffAuthHeaders - Auth/role check: admin-scoped fail-closed (401/403); behind the signed-in
- studio proxy gate
- Catalog guard: client requires every expected Hathor social-structure and attitude enum before exposing the form. Malformed or incomplete catalog payloads fail closed.
- Assessment guard: client rejects malformed JSON and non-object JSON before POST, rejects malformed 200 result payloads, and disables both editors while a real BFF assessment is pending.
- Covered BFF outcomes: seeded default pair (
compatibility: 70), hostile/different-structure pair (compatibility: -20), unknown social structure detail, malformed success payload, transport failure, and direct BFF auth/schema gates.
Cross-references#
- Parent:
../../studio-overview.md - Shell:
../../../shell/04-auth-session.md - Sibling routes:
./studio-hathor-politics-simulation.md,./studio-hathor-economy-simulation.md - Component sources:
apps/oshun/web/src/components/studio/StudioHathorCultureEvolutionSimulationWorkspace.tsxapps/oshun/web/src/components/studio/StudioHathorCultureEvolutionSimulationRouteMap.ts
- Focused E2E:
apps/oshun/web/e2e/studio-hathor-culture-evolution-simulation.spec.ts
Open questions / known gaps#
- Hathor is
unconfirmed-v1perWALKTHROUGH/matrix/routes.csv. Confirm whether the dedicated/studio/hathor/*admin lane consoles ship in V1. - The lane computes a one-shot pairwise compatibility assessment, not a multi-generation cultural-drift simulation; confirm whether a time-series evolution engine is planned for this route.
- Route Map advertises
scenarios/,clusters/,regions/, andgovernance/sub-routes with nopage.tsxyet.