Context. surface studio · domain hathor · route /studio/hathor/npc-platform-integrations · auth signed-in + studio entitlement · source apps/oshun/web/src/app/studio/hathor/npc-platform-integrations/page.tsx
Last walked. 2026-05-29 automated runtime walk (Playwright headless) — render, /v1 data (2xx), console/page-errors, expected content, screenshot verified; live screen-reader, touch, offline, and telemetry-delivery checks pending a manual AT pass. 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 NPC platform capability checker. The single Live Platform Capability Matrix lane checks each target platform's supported capabilities against the NPC feature's required set, returning per-platform compatibility and the missing capabilities. Admin-scoped and fail-closed.
Entry points#
- Direct URL / bookmark —
/studio/hathor/npc-platform-integrations;alternates.canonicalis set. - Quick-action from siblings — the Lore Validation Timeline lane links here; this page links to NPC-to-NPC Conversations.
- Studio overview — see
../../studio-overview.md.
Layout regions#
page.tsx renders inside <ShellLayout active="studio">:
- Workspace (
StudioHathorNpcPlatformIntegrationsWorkspace,data-hathor-npc-platform-integrations-workspace):<h1>WorkspaceHeading— "Hathor NPC Platform Integrations Workspace"- Summary
<p data-hathor-npc-platform-integrations-summary> - The embedded
PlatformCapabilityLane(data-pcm-lane,<h2 data-pcm-heading>Live Platform Capability Matrix</h2>): its own fetch-on-mount catalog state, then the evaluation form + result table.
- Route Map panel
(
<section data-hathor-npc-platform-integrations-route-map>,<h2>Route Map</h2>): 5 entries fromSTUDIO_HATHOR_NPC_PLATFORM_INTEGRATIONS_ROUTE_MAP(path + purpose). - Quick-action lane (
className="quickAction"Links): NPC-to-NPC Conversations, Back to Studio workspace index.
States#
- Loading —
<p data-pcm-loading>"Loading platform capability checker…". - Unauthorized —
data-pcm-unauthorizedon 401/403 (admin-scope). - Error —
data-pcm-erroron a non-OK catalog response or network failure. - Ready (form) —
data-pcm-formwith the capabilities/platforms textarea. - Result —
data-pcm-resultwithdata-pcm-headline(data-pcm-compatible-count) and thedata-pcm-platformstable (data-pcm-platform-rowcarryingdata-platform/data-compatible,data-pcm-missing). - Validation error —
data-pcm-evaluate-errorfor malformed JSON or a failed POST.
Interactions#
-
data-pcm-payload(textarea,aria-label="platform capabilities json") — edit the{ requiredCapabilities[], platforms[{ platformId, supportedCapabilities[] }] }JSON. -
data-pcm-submit("Evaluate platforms") — parses the JSON and POSTs it to the evaluate endpoint; on 200 with a validresultrenders the matrix. - Route Map entries — verify against
STUDIO_HATHOR_NPC_PLATFORM_INTEGRATIONS_ROUTE_MAP(5 entries). - Quick-action links — NPC-to-NPC Conversations
(
/studio/hathor/npc-to-npc-conversations), Back to Studio (/studio).
Data & contracts#
- Reads:
GET /v1/admin/hathor/npc-platform-integrations(the catalog body is fetched to gate the lane; the form itself supplies the evaluation input). - Writes:
POST /v1/admin/hathor/npc-platform-integrations/evaluatewith the capabilities/platforms payload. - Realtime: none.
- Caching: client fetch on mount,
cache: 'no-store',buildBffAuthHeaders(),AbortControlleron unmount. - Auth: admin-scoped, fail-closed (401/403 → unauthorized); route is behind the signed-in + studio proxy gate.
Cross-references#
- Parent:
../../studio-overview.md - Component sources:
apps/oshun/web/src/components/studio/StudioHathorNpcPlatformIntegrationsWorkspace.tsx(wraps thePlatformCapabilityLane)apps/oshun/web/src/components/studio/StudioHathorNpcPlatformIntegrationsRouteMap.ts
- Siblings:
./studio-hathor-npc-to-npc-conversations.md,./studio-hathor-lore-validation-timeline.md
Open questions / known gaps#
- Hathor is
unconfirmed-v1perWALKTHROUGH/matrix/routes.csv; confirm whether the dedicated/studio/hathor/*admin lanes ship V1 or are internal-only.