Context. surface studio · domain isis · route /studio/isis/account-protection · auth signed-in + studio entitlement (segment not in AAA_ONLY_STUDIO_ROUTES — renders as-is) · source apps/oshun/web/src/app/studio/isis/account-protection/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 that screens session/login events for account-takeover risk. The workspace fetches previously-analyzed sessions and submits new ones to the real anomaly-detection session analyzer, which raises signals for new devices (+20), new locations (+25), and VPN/Tor usage (+15), then returns a risk score, risk level, and recommended protective actions.
Entry points#
- Sibling quick-action card from
/studio/isis/cli-surface - Studio index (
/studio) - Direct URL / bookmark
Layout regions#
page.tsx mounts ShellLayout active="studio" and three panels (no breadcrumb
panel).
- Workspace panel (
data-isis-account-protection-workspace): theStudioIsisAccountProtectionWorkspacelane console —<h1>"Isis Account Protection Workspace" (WorkspaceHeading)- Summary paragraph (
data-account-summary) - Aggregate band (
data-account-aggregate) withdata-account-band={level}chips and the analyzed-session count - The "Analyze a session" form (
data-account-form) - Analyzed-session list (
data-account-sessions) ofdata-account-sessioncards
- Route map panel (
data-isis-account-protection-route-map):<h2>"Route Map" enumeratingSTUDIO_ISIS_ACCOUNT_PROTECTION_ROUTE_MAP(5 entries) - Quick-actions panel:
quickActionlinks to/studio/isis/chargeback-preventionand "Back to Studio workspace index" →/studio
States#
- Loading —
data-account-loading"Loading analyzed sessions…" while the GET resolves - Unauthorized —
data-account-unauthorized(admin-scope fail-closed on 401/403, "Isis workspace scope required to analyze account-protection sessions.") - Error —
data-account-erroron non-OK / malformed response - Ready (form) — aggregate + analyze form + session list render
- Result —
data-account-resultwithdata-account-status(ok/error), e.g. duplicate-session validation message
Interactions#
Analyze a session (data-account-form)#
- Session id —
data-account-sessionidtext input - User id —
data-account-useridtext input - Event type —
data-account-eventtypetext input (defaultslogin) - Device fingerprint (optional) —
data-account-devicetext input - Country (optional) —
data-account-countrytext input - VPN —
data-account-vpncheckbox - Tor —
data-account-torcheckbox - Analyze session —
data-account-analyzesubmit; POSTs to/v1/admin/isis/account-protection, then reloads the session list
Route map#
- Route-map articles ×5 — non-interactive path + purpose entries
Quick-actions#
- Open Isis Chargeback Prevention workspace →
/studio/isis/chargeback-prevention - Back to Studio workspace index →
/studio
Data & contracts#
- Reads:
GET /v1/admin/isis/account-protection(ACCOUNT_ENDPOINT) on mount — analyzed sessions + aggregate - Writes:
POST /v1/admin/isis/account-protection— screen a session - Realtime: None
- Caching: client
fetchon mount,cache: 'no-store',buildBffAuthHeaders() - Auth: admin-scoped fail-closed (401/403 → unauthorized state); route behind the signed-in + studio proxy gate
- Component sources:
apps/oshun/web/src/components/studio/StudioIsisAccountProtectionWorkspace.tsxapps/oshun/web/src/components/studio/StudioIsisAccountProtectionRouteMap.ts
Cross-references#
- Studio overview:
../../studio-overview.md - Sibling routes:
Open questions / known gaps#
- Route-map deep routes (
/scenes,/exports,/revisions,/governance) are advertised contract paths, not yet implemented pages - The session analyzer scores unknown users purely from session context — confirm how persistent per-user baselines are seeded in production