Context. surface admin · domain isis · route /isis/lora-training · auth signed-in (admin) · source apps/oshun/admin/src/app/isis/lora-training/page.tsx
Last walked. —
Purpose#
LoRA training queue admin (§24.5): surfaces operator queue, per-run dataset
rights attestation, training-run config, progress timeline (sample previews per
checkpoint), cost estimate, abort, and the promotion-to-managed-models rehearsal
gate. Backed by @isis/lora-training-surface.
Entry points#
- Direct URL —
/isis/lora-training - External runbooks / deep links
- Not in canonical IA — no sidebar entry
Layout regions#
Page does NOT wrap in AdminShell. Resolves runs via binding
(bindTrainingRunsLoader) and renders <LoraTrainingPanel runs={runs} />:
- LoraTrainingPanel —
<main>with 260px aside + detail:- Aside / Training queue:
- State filter —
<select data-field="stateFilter">with optionsallplus eachTrainingRunStatefromTRAINING_RUN_STATES - Run list (
<ul data-testid="run-list">) — entries withdata-run-id,data-run-state; each shows display name, state, rank, cost estimate in cents
- State filter —
- Detail pane — selected run (
data-testid="run-detail"); fields include dataset rights attestation, training config, progress timeline, cost estimate, abort, rehearsal gate (per the file fileoverview; visible source confirms list + selector pattern)
- Aside / Training queue:
States#
- Anonymous → global middleware redirects
- Binding not set →
[]; queue empty - State filter
all→ all runs shown - State filter a specific
TrainingRunState→ runs filtered byr.state === stateFilter - Empty filtered list →
selectednull - Selected run has dataset rights attestation → detail surfaces the attestation block (verify from full source)
- Selected run is
running→ progress timeline / abort affordance visible - Selected run is
completed→ promotion-to-managed-models rehearsal gate visible (per the file comment)
Interactions#
- State filter select —
data-field="stateFilter"- Function: sets
stateFilter('all'orTrainingRunState)
- Function: sets
- Run list item (
<li role="button" tabIndex={0}>)- Function: sets
selectedIdx; Enter activates
- Function: sets
- Detail-pane interactions for the selected run (abort, rehearsal-gate advance, attestation review) — discoverable in the full panel source
Data & contracts#
- Reads:
binding()returnsreadonly TrainingRun[]from@isis/lora-training-surface - Writes: per panel (abort, rehearsal-gate progression, promotion) — not visible in the inspected portion; verify in full source
- Realtime: progress timelines are a natural fit for realtime but the page is server-rendered with a static binding
- Auth/role check: only the global middleware
Cross-references#
- Shell:
shell/02-routing-layouts.md - Sibling Isis routes:
isis-model-merging.md,isis-runpod-endpoints.md,isis-civitai-intake.md(intake → training → merging → promotion is the implicit funnel) - Related canonical workspace:
../workspaces/content/models.md(model registry is where promoted runs land) - Library:
@isis/lora-training-surface—TRAINING_RUN_STATES,TrainingRun,TrainingRunState - Component source:
apps/oshun/admin/src/app/isis/lora-training/LoraTrainingPanel.tsx
Open questions / known gaps#
- No session / scope check at the page level
-
bindTrainingRunsLoadermodule-level mutable state pattern reused across the Isis-ops routes — document the binding strategy - Document the rehearsal gate / promotion handoff into
/models(the canonical model registry) — relationship not declared inOSHUN_ADMIN_WORKSPACE_RELATIONSHIPSbecause the Isis routes are outside the canonical IA