Context. surface studio · domain isis · route /studio/isis/civitai-integration · auth signed-in + studio entitlement (segment not in AAA_ONLY_STUDIO_ROUTES — renders as-is) · source apps/oshun/web/src/app/studio/isis/civitai-integration/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 §24.2 intake-review console for Civitai asset candidates: it reads the live
intake-review context and renders the rights/license/safety review queue plus the
searchable-candidate pool with full governance metadata (license tag, NSFW
posture, lineage, content labels, recommended sampler config, compatibility
notes), the position of each queued entry along the canonical promotion pipeline,
and the decision history that moved it there. Reads flow through
/v1/admin/isis/civitai-intake and decisions through
/v1/admin/isis/civitai-intake/decisions; it is admin-scoped and fails closed —
without the Isis scope the operator gets a governance message and no candidate
data.
Entry points#
- Sibling quick-action from
/studio/isis/model-registry - Studio index (
/studio) - Direct URL / bookmark
Layout regions#
page.tsx mounts <ShellLayout active="studio"> (no breadcrumb panel) and three
panels: the workspace, the Route Map, and sibling quick-actions.
- Header: shell header
- Workspace panel (
data-isis-civitai-integration-workspace):<h1>(WorkspaceHeading) "Isis Civitai Integration Workspace"- Summary paragraph (
data-isis-civitai-integration-summary) - Promotion-pipeline rail (
data-civitai-pipeline-rail) with per-stagedata-civitai-pipeline-stageanddata-civitai-pipeline-current; off-pipeline terminal queues (data-civitai-terminal-state) - Review queue (
<h2>) —data-civitai-review-queueofdata-civitai-review-row(active rowdata-civitai-review-row-active); empty statedata-civitai-review-queue-empty; queue filterdata-civitai-queue-filter - Candidate detail (
<h2>) —data-civitai-review-detailwith NSFW badge (data-civitai-nsfw-badge), decision history (data-civitai-history/data-civitai-history-entry), and the Decision form (data-civitai-decision-form) - Searchable candidate pool (
<h2>) —data-civitai-search-poolofdata-civitai-search-candidate; search inputdata-civitai-search-input, asset filterdata-civitai-asset-filter; empty statedata-civitai-search-pool-empty
- Route Map panel (
data-isis-civitai-integration-route-map):<h2>Route Map</h2>overSTUDIO_ISIS_CIVITAI_INTEGRATION_ROUTE_MAP(5 entries) - Sibling quick-actions panel:
/studio/isis/model-registry,/studio
States#
- Loading —
data-civitai-loading - Unauthorized — 401/403 admin-scope fail-closed;
data-civitai-unauthorized(governance message, no candidate data) - Error — non-OK or malformed response;
data-civitai-error - Ready — context present; review queue + candidate detail + search pool render; selecting a row populates the detail/decision form
- Result — after a decision POST,
data-civitai-decision-result(data-civitai-decision-status)
Interactions#
Review queue / pool#
- Review row (
data-civitai-review-row) — selects the active candidate - Queue filter (
data-civitai-queue-filter,<select>) - Search input (
data-civitai-search-input) + asset filter (data-civitai-asset-filter) - Search candidate (
data-civitai-search-candidate) — selectable pool entries
Decision form (data-civitai-decision-form)#
- Decision kind (
data-civitai-decision-kind,<select>) - Note (
data-civitai-decision-note, text) - Conditions (
data-civitai-decision-conditions) - Recipe (
data-civitai-decision-recipe) - Record decision (
data-civitai-decision-submit) —POST /v1/admin/isis/civitai-intake/decisions
Route Map#
- Route-map articles ×5
Sibling quick-actions#
- Open Isis Model Registry workspace →
/studio/isis/model-registry - Back to Studio workspace index →
/studio
Data & contracts#
- Reads:
GET /v1/admin/isis/civitai-intake(review-queue context: rows, candidate pool, pipeline stages, decision history) - Writes:
POST /v1/admin/isis/civitai-intake/decisions(record a rights/license/safety decision; advances the candidate along the@isis/ai-providers/civitai-intakeREVIEW_QUEUES state machine) - Realtime: none
- Caching: client fetch on mount,
cache: 'no-store',buildBffAuthHeaders() - Auth/role check: admin-scoped, fail-closed (401/403); route gated on signed-in + studio entitlement
- Component sources:
apps/oshun/web/src/components/studio/StudioIsisCivitaiIntegrationWorkspace.tsxapps/oshun/web/src/components/studio/StudioIsisCivitaiIntegrationRouteMap.ts
Cross-references#
- Studio overview:
../../studio-overview.md - Review-queue domain:
@isis/ai-providers/civitai-intake(REVIEW_QUEUES) - Sibling routes:
Open questions / known gaps#
- No breadcrumb on this route — navigation is via sibling quick-actions
- This intake console is a distinct review/decision shape (queue + pipeline
rail + decision history), not the single-form lane used by most Isis
surfaces; image/LoRA intake here is separate from the
model-governance-3ddomain