V1 Web PWA · Surface walkthrough

Isis Text-to-Speech

A per-surface walkthrough of the V1 Web PWA studio surface: layout, states, interactions, data, and cross-references.

walked
9sections3 minread

On this page

Context. surface studio · domain isis · route /studio/isis/text-to-speech · auth signed-in + studio entitlement (AAA-gated — text-to-speech is in AAA_ONLY_STUDIO_ROUTES) · source apps/oshun/web/src/app/studio/isis/text-to-speech/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-03 addendum: real-dev-infra Playwright coverage added in apps/oshun/web/e2e/studio-isis-text-to-speech.spec.ts. The spec verifies the Studio Isis boundary, localhost E2E lane, live BFF voice-cloning records, filters, route map, quick actions, touch targets, create workflow, every visible lifecycle transition through release, revoke, high-abuse auto-reject, invalid transition feedback, loading, service failure, malformed response, network failure, non-admin unauthorized, and anonymous redirect.

Purpose#

Admin §24.7 voice-clone governance console (a cloned voice profile is the input a TTS voice runs on): it reads the live clone-workflow records from GET /v1/admin/isis/voice-cloning and drives each through consent → id-verification → samples → naturalness → watermark → abuse-risk → multi-party signoff → registration → release (or revoke) via POST …/voice-cloning/workflows + …/:workflowId/transition. The state machine is the enforcer (high abuse-risk auto-rejects); it is admin-scoped and fails closed.

Entry points#

  • Sibling quick-action from /studio/isis/live-preview
  • 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-text-to-speech-workspace):
    • <h1> (WorkspaceHeading) "Isis Text-to-Speech Workspace"
    • Summary paragraph (data-isis-text-to-speech-summary)
    • Workflow list (data-tts-workflow-row=<workflowId>, active data-tts-workflow-row-active); filter data-tts-search
    • Create-workflow form (data-tts-create-form)
    • Workflow detail (data-tts-detail) with the lifecycle action panel (data-tts-action-panel) offering only the transitions valid for the workflow's current state
  • Route Map panel (data-isis-text-to-speech-route-map): <h2>Route Map</h2> over STUDIO_ISIS_TEXT_TO_SPEECH_ROUTE_MAP (5 entries)
  • Sibling quick-actions panel: /studio/isis/live-preview, /studio

States#

  • Loadingdata-tts-loading
  • Unauthorized — 401/403 admin-scope fail-closed; data-tts-unauthorized
  • Error — non-OK, malformed response, or network failure; data-tts-error
  • Ready — records present; list + detail + action panel render
  • Result — after a create or transition POST, data-tts-action-result (data-tts-action-status)

Interactions#

Create-workflow form (data-tts-create-form)#

  • New workflow id (data-tts-create-workflow, text input)
  • Subject id (data-tts-create-subject, text input)
  • Create (data-tts-create-submit) — POST /v1/admin/isis/voice-cloning/workflows

Workflow action panel (data-tts-action-panel) — state-gated transitions#

  • Consent (data-tts-action-consentdata-tts-action-consent-submit)
  • Verify identity (data-tts-action-verify, action verify-identity)
  • Samples (data-tts-action-samplesdata-tts-action-samples-submit)
  • Naturalness scores (data-tts-action-scoresdata-tts-action-scores-submit)
  • Watermark (data-tts-action-watermarkdata-tts-action-watermark-submit)
  • Abuse-risk (data-tts-action-abusedata-tts-action-abuse-submit)
  • Signoff (data-tts-action-signoffdata-tts-action-signoff-submit)
  • Register (data-tts-action-registerdata-tts-action-register-submit)
  • Revoke (data-tts-action-revoke, action revoke)
  • Each transition → POST /v1/admin/isis/voice-cloning/workflows/:workflowId/transition

Route Map#

  • Route-map articles ×5

Sibling quick-actions#

  • Open Isis Live Preview workspace/studio/isis/live-preview
  • Back to Studio workspace index/studio

E2E coverage#

  • apps/oshun/web/e2e/studio-isis-text-to-speech.spec.ts runs against the real Next shell and local BFF, with browser voice-cloning requests forwarded into /v1/admin/isis/voice-cloning.
  • It proves direct route hard-blocking (x-studio-boundary: hard-block) and the localhost-only ?__oshunStudioIsisLaneE2E=1 admin lane.
  • It walks a unique workflow through create, consent, identity verification, samples, naturalness scores, watermark, low abuse-risk, all four signoff roles, profile registration/release, and exact POST body capture.
  • It also covers pending-consent revoke, invalid consent payload feedback, high abuse-risk auto-reject, loading, 503, malformed response, aborted GET, non-admin 403, anonymous redirect, route-map articles, filters, quick actions, and 44px minimum touch targets for the main controls.

Data & contracts#

  • Reads: GET /v1/admin/isis/voice-cloning (clone-workflow records)
  • Writes:
    • POST /v1/admin/isis/voice-cloning/workflows (create a clone workflow)
    • POST /v1/admin/isis/voice-cloning/workflows/:workflowId/transition (drive the consent → … → release/revoke state machine)
  • Realtime: none
  • Caching: client fetch on mount, cache: 'no-store', buildBffAuthHeaders()
  • Auth/role check: admin-scoped, fail-closed (401/403); route gated on signed-in + studio entitlement (AAA segment)
  • Component sources:
    • apps/oshun/web/src/components/studio/StudioIsisTextToSpeechWorkspace.tsx
    • apps/oshun/web/src/components/studio/StudioIsisTextToSpeechRouteMap.ts

Cross-references#

Open questions / known gaps#

  • No breadcrumb on this route — navigation is via sibling quick-actions
  • This console governs the clone-workflow lifecycle, not the TTS synthesis itself; confirm where the registered voice profile feeds the synthesis path