Context. surface admin · domain isis · route /isis/voice-cloning · auth signed-in (admin) · source apps/oshun/admin/src/app/isis/voice-cloning/page.tsx
Last walked. —
Purpose#
Voice-cloning workflow admin (§24.7): consent capture with identity
verification, sample upload + read-aloud script, naturalness / prosody scoring
view, watermark verification, abuse-risk scorecard, multi-party signoff,
voice-profile registration, release toggle, revocation cascade. Backed by
@iris/voice clone-workflow state machine.
Entry points#
- Direct URL —
/isis/voice-cloning - External runbooks / deep links
- Not in canonical IA — no sidebar entry
Layout regions#
Page does NOT wrap in AdminShell. Resolves records via binding
(bindVoiceCloningLoader) and renders
<VoiceCloningPanel records={records} />:
- VoiceCloningPanel —
<main>with 260px aside + detail:- Aside / Workflows:
- State filter — select with options
allplus eachCloneWorkflowStatefromCLONE_WORKFLOW_STATES - Workflow list (
<ul data-testid="workflow-list">) — each<li role="button" tabIndex={0}>withdata-workflow-id,data-workflow-state; shows workflow id + subject id + state
- State filter — select with options
- Detail pane (
data-testid="workflow-detail"):- "Select a workflow." prompt when nothing selected
- When selected: heading
<workflowId> — <state>; Consent block (rendered as<dl>when present); signoff records andmissingRolesderived fromREQUIRED_SIGNOFF_ROLESminus already-provided signoffs
- Aside / Workflows:
States#
- Anonymous → global middleware redirects
- Binding unset → empty records; list empty; "Select a workflow."
- State filter
all→ all workflows - State filter set → workflows filtered by
r.state === filter - Selected workflow missing consent → "Consent" block omits the
<dl>(verify in full source) - Selected workflow has all required signoffs →
missingRolesempty; release toggle gate satisfied (presumed) - Selected workflow missing one or more
REQUIRED_SIGNOFF_ROLES→ those roles surface as required next steps
Interactions#
- State filter select —
data-field="stateFilter" - Workflow list item (
<li role="button" tabIndex={0}>)- Function: sets
selectedIdx; Enter activates
- Function: sets
- Detail-pane interactions for the selected workflow — consent capture, sample upload, prosody scoring view, watermark verification, abuse-risk scorecard, signoff add, voice-profile registration, release toggle, revocation cascade (per the panel fileoverview; not all confirmed in inspected portion)
Data & contracts#
- Reads:
binding()returnsreadonly CloneWorkflowRecord[]from@iris/voice - Writes: per panel (consent capture, signoff add, release toggle, revocation cascade) — not visible in inspected portion; verify in full source
- Realtime: None.
- Auth/role check: only the global middleware
Cross-references#
- Shell:
shell/02-routing-layouts.md - Related canonical workspaces:
../workspaces/safety/trust-safety.md(cloned-voice review queue)../workspaces/safety/trust-safety-voice-abuse.md(abuse detection / revocation cascade)../workspaces/content/personas.md(VoiceProfileReviewPaneloverlap)
- Library:
@iris/voice—CLONE_WORKFLOW_STATES,REQUIRED_SIGNOFF_ROLES,CloneWorkflowRecord,CloneWorkflowState,SignoffRecord - Component source:
apps/oshun/admin/src/app/isis/voice-cloning/VoiceCloningPanel.tsx
Open questions / known gaps#
- No session / scope check at the page level
- Triple overlap: this page +
trust-safetycloned-voice review + personasVoiceProfileReviewPanel. Clarify which surface owns which lifecycle stage -
REQUIRED_SIGNOFF_ROLESenumeration is not visible in the inspected portion; document the required signoff matrix