Context. surface studio · domain isis · route /studio/isis/model-registry · auth signed-in + studio entitlement (NOT AAA-gated) · source apps/oshun/web/src/app/studio/isis/model-registry/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); 2026-07-01 addendum: studio-isis-model-registry.spec.ts proved the direct route remains hard-blocked by the Studio Isis boundary, then drove the localhost-only lane-bypass route against the real local BFF, including the seeded managed-model registry, search/asset-type/NSFW/commercial filters, cursor pagination, loading/empty/error/malformed/unauthorized/anonymous states, route-map articles, sibling quick-actions, and 44px automated hit-target checks for filters, toggles, load-more, and quick-actions.
Purpose#
Read-only admin lane console for the §24.2 registry of post-intake, Isis-managed approved models. It filters by text (title/creator), asset type, NSFW, and commercial-use, returning intake-time-ordered results with cursor pagination. NSFW and non-commercial models stay hidden unless explicitly enabled.
Entry points#
- Sibling quick-action card from
/studio/isis/analytics-and-reporting - Studio index (
/studio) - Direct URL / bookmark
Layout regions#
page.tsx mounts ShellLayout active="studio" and three panels (no breadcrumb
panel).
- Workspace panel (
data-isis-model-registry-workspace):<h1>"Isis Model Registry Workspace" (WorkspaceHeading)- Summary paragraph (
data-isis-model-registry-summary) - Result summary (
data-registry-summary): matching total, showing count, generatedAt - Filter controls (
data-registry-search,data-registry-asset-filter,data-registry-nsfw-toggle,data-registry-commercial-toggle) - Model list (
data-registry-list) ofdata-registry-modelcards (withdata-registry-model-nsfwbadge) +data-registry-load-more
- Route map panel (
data-isis-model-registry-route-map):<h2>"Route Map" enumeratingSTUDIO_ISIS_MODEL_REGISTRY_ROUTE_MAP - Quick-actions panel:
quickActionlinks to/studio/isis/analytics-and-reportingand "Back to Studio workspace index" →/studio
States#
- Loading —
data-registry-loading"Loading model registry…" - Unauthorized —
data-registry-unauthorized(admin-scope fail-closed on 401/403) - Error —
data-registry-erroron non-OK / malformed response - Ready — summary + filters + model list render
- Empty (filtered) —
data-registry-empty"No managed models match the current filters."
Interactions#
Filters (client-driven re-query)#
- Search (title, creator) —
data-registry-searchsearch input - Asset type —
data-registry-asset-filterselect (options from responseassetTypes) - Show NSFW —
data-registry-nsfw-togglecheckbox - Commercial-use only —
data-registry-commercial-togglecheckbox - Load more —
data-registry-load-morebutton (cursor pagination vianextCursor)
(Filter prefs persisted via useStudioWorkspacePersistence.)
Route map#
- Route-map articles — non-interactive path + purpose entries
Quick-actions#
- Open Isis Analytics And Reporting workspace →
/studio/isis/analytics-and-reporting - Back to Studio workspace index →
/studio
Data & contracts#
- Reads:
GET /v1/admin/isis/model-registry(REGISTRY_ENDPOINT) on mount and on filter/cursor change — items + total + assetTypes + nextCursor - Writes: None (read-only registry; filters re-query)
- Realtime: None
- Caching: client
fetch,cache: 'no-store',buildBffAuthHeaders(); filter preferences persisted locally - 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/StudioIsisModelRegistryWorkspace.tsxapps/oshun/web/src/components/studio/StudioIsisModelRegistryRouteMap.ts
E2E coverage#
apps/oshun/web/e2e/studio-isis-model-registry.spec.ts— proves direct/studio/isis/model-registryis still hard-blocked by the Studio Isis boundary, then drives the localhost-only?__oshunStudioIsisLaneE2E=1lane bypass in the real Next shell with browser requests forwarded to the real local BFF. Covered paths:- Admin lane-bypass navigation loads the seeded registry with four default
safe rows, hides
mm_mature_studies_v1by default, keepsmm_portrait_warmth_v2visible as non-commercial, renders asset-type facets, route-map articles, sibling quick-actions, and bearer-authenticated catalog requests. - Filter interactions re-query the live BFF for search (
line art), asset-type (checkpoint), commercial-use-only, and explicit NSFW inclusion, proving that the browser UI is backed by the realManagedModelBrowserquery contract. - Cursor pagination is exercised by constraining the forwarded BFF request to
two rows, then clicking
data-registry-load-moreand asserting the appended second page and live cursor query. - Loading, empty catalog, 503 catalog error, malformed catalog, non-admin unauthorized, anonymous redirect-before-render, and automated 44px hit-target checks for filters, toggles, load-more, and quick-actions are asserted.
- Admin lane-bypass navigation loads the seeded registry with four default
safe rows, hides
Cross-references#
- Studio overview:
../../studio-overview.md - Sibling routes:
Open questions / known gaps#
- Read-only — intake / approval of a model happens upstream (Civitai intake), not from this view
- Pagination is cursor-based; the matching
totalis computed server-side per filter set - Route-map sub-paths are declared but not yet implemented as separate pages
- Live screen-reader, touch-device, offline/PWA-cache, and telemetry-delivery passes still need a manual or dedicated-device run; automated coverage includes Playwright role/locator checks, explicit 44px hit-target measurements, and the suite-wide axe pass.