---
path: /isis/voice-cloning
surface: admin
domain: isis
auth: signed-in (admin)
source: apps/oshun/admin/src/app/isis/voice-cloning/page.tsx
status: drafted
last_walked: '—'
---

# Isis ops · Voice cloning

## 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 `all` plus each
      `CloneWorkflowState` from `CLONE_WORKFLOW_STATES`
    - **Workflow list** (`<ul data-testid="workflow-list">`) — each
      `<li role="button" tabIndex={0}>` with `data-workflow-id`,
      `data-workflow-state`; shows workflow id + subject id + state
  - **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 and `missingRoles` derived from
      `REQUIRED_SIGNOFF_ROLES` minus already-provided signoffs

## 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 → `missingRoles` empty;
      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
- [ ] 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()` returns `readonly 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` (`VoiceProfileReviewPanel` overlap)
- 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-safety` cloned-voice review + personas
      `VoiceProfileReviewPanel`. Clarify which surface owns which lifecycle
      stage
- [ ] `REQUIRED_SIGNOFF_ROLES` enumeration is not visible in the inspected
      portion; document the required signoff matrix
