Context. surface studio · domain isis · route /studio/isis/model-merging · auth signed-in + studio entitlement (AAA-gated — model-merging is in AAA_ONLY_STUDIO_ROUTES) · source apps/oshun/web/src/app/studio/isis/model-merging/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 model-merge planning. It reads the candidate component set
and available fixture sets, lets the operator compose a weighted merge, and builds
a provenance bundle for the plan, persisting saved plans. Reads the context via
/v1/admin/isis/model-merging and saves plans to
/v1/admin/isis/model-merging/plans; admin-scoped and fail-closed.
Entry points#
- Sibling quick-action from
/studio/isis/lora-training - Studio index (
/studio) - Direct URL / bookmark (AAA entitlement required)
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-model-merging-workspace):<h1>(WorkspaceHeading) "Isis Model Merging Workspace"- Summary paragraph (
data-isis-model-merging-summary) - Merge composer (
data-merge-composer): candidate list (data-merge-candidate=<id>withdata-merge-candidate-select/data-merge-candidate-weight) and fixture set (data-merge-fixture) - Saved plans (
data-merge-saved-plans,data-merge-saved-plan=<id>); empty statedata-merge-saved-plans-empty
- Route Map panel (
data-isis-model-merging-route-map):<h2>Route Map</h2>over the route map (5 entries) - Sibling quick-actions panel:
/studio/isis/lora-training,/studio
States#
- Loading —
data-merge-loading - Unauthorized — 401/403 admin-scope fail-closed;
data-merge-unauthorized - Error — non-OK / malformed;
data-merge-error - Ready (composer) — candidates + fixture sets + composer render
- Empty (saved plans) —
data-merge-saved-plans-empty - Result —
data-merge-build-result(data-merge-build-status) after building
Interactions#
Merge composer (data-merge-composer)#
- Merge id (
data-merge-mergeid, input) - Fixture set (
data-merge-fixture,<select>) - Filter candidates (
data-merge-search,aria-label="Filter candidate components") - Candidate select + weight (
data-merge-candidate-select,data-merge-candidate-weight) - Build provenance bundle (
data-merge-build-submit) — disabled until a valid composition;POST /v1/admin/isis/model-merging/plans
Route Map#
- Route-map articles ×5
Sibling quick-actions#
- Open Isis LoRA Training workspace →
/studio/isis/lora-training - Back to Studio workspace index →
/studio
Data & contracts#
- Reads:
GET /v1/admin/isis/model-merging(candidate components, fixture sets, saved plans) - Writes:
POST /v1/admin/isis/model-merging/plans(build + save a merge plan / provenance bundle) - Realtime: none
- Caching: client fetch on mount,
cache: 'no-store',buildBffAuthHeaders() - Auth/role check: admin-scoped, fail-closed (401/403); route AAA-gated
(
model-merginginAAA_ONLY_STUDIO_ROUTES) - Component sources:
apps/oshun/web/src/components/studio/StudioIsisModelMergingWorkspace.tsxapps/oshun/web/src/components/studio/StudioIsisModelMergingRouteMap.ts
Cross-references#
- Studio overview:
../../studio-overview.md - AAA gating:
libs/isis/entitlements/src/studio-boundary.ts - Sibling routes:
Open questions / known gaps#
- No breadcrumb on this route — navigation via sibling quick-actions
- Route-map sub-paths are declared but not yet implemented as separate pages