Disciplines · Audits

V1 Studio Surface — Comprehensive Gap Analysis (2026-05-30)

Census of every apps/oshun/web/src/components/studio/Studio*Workspace.tsx component (the unit a /studio/.../page.tsx route renders), classified three ways by static inspection:

10sections4 minread

On this page

This is the entire-surface analysis of the operator/creator Studio workspace layer for Oshun V1, the dominant remaining gap toward "every feature and flow and journey fully and correctly implemented." It is evidence-backed: every number below comes from a census of the actual component files, not estimates. It complements the prior backend/engine audits (V1_INDEPENDENT_REVERIFICATION_2026-05-30.md, V1_PRODUCTION_READINESS_GAP_ANALYSIS_2026-05-30.md) and the deploy-tier map (V1_DEPLOYMENT_REQUIREMENTS.md).

Method#

Census of every apps/oshun/web/src/components/studio/Studio*Workspace.tsx component (the unit a /studio/.../page.tsx route renders), classified three ways by static inspection:

  • WIRED — issues a real backend call (fetch / buildBffAuthHeaders / a /v1/... endpoint) and renders that data.
  • BREADCRUMB — ≤30 lines, renders only the shared StudioHathorEconomyModelingLaneCard navigational card; zero domain content.
  • STATIC — larger hand-written content (route-maps, capability lists, governance copy) but no backend call — it looks built yet is wired to nothing.

Headline census#

Status Count Meaning
Total Studio*Workspace components 469 the full studio surface
WIRED (any /v1/ call) 19 …but 5 only call /v1/auth/validate-context (an auth shell, not a feature backend) → ~14 genuinely feature-wired
BREADCRUMB (pure stub) 202 render only the lane card
STATIC (fabricated, unwired) 248 substantial copy, no backend

~450 of 469 studio components are not wired to a real backend. The earlier "~234" figure counted only components that render the lane card; the true surface (including the 248 fabricated-static pages that embed it indirectly or not at all) is larger.

Per-domain matrix#

Domain WIRED BREADCRUMB STATIC TOTAL
Aja (mocap/animation) 1 54 43 98
Isis (generation) 10 56 22 88
Bellona (Meta Quest) 1 1 80 82
Yemaya (production) 1 49 29 79
Hathor (narrative/NPC) 5 42 27 74
Other (ApiGateway/Tara/misc) 1 0 47 48

Notable shape: Bellona is 80/82 STATIC (hand-written Meta Quest feature pages, none wired); Aja is the largest pure-breadcrumb domain (54); Isis is the most-wired (the generation backends exist).

What IS genuinely wired (14 feature pages)#

Pre-existing: HathorQuestAuthoring, HathorStoryGraphAuthoring, HathorTimelineModeling, HathorWorldConfiguration (the §Hathor studio record routes), ApiGatewayBffComposition (the studio workflow-composition routes).

Built this program (Isis, 9, each with a real backend + tests): CivitaiIntegration (intake review + decisions), ComfyuiNodes (node registry

  • deprecation), LoRATraining (§24.5 lifecycle), ModelMerging (provenance bundles), CollectionManagement (output-gallery bulk curation), GPUWorker­Architecture (RunPod ops + secret rotation), TextToSpeech (§24.7 voice-clone lifecycle), JobManagement (generation queue list/retry), LineageGraph (provenance DAG).

Auth-shell-only (call /v1/auth/validate-context, no feature backend): AjaApiEndpoints, BellonaClient, HathorClient, IsisGenerationApi, YemayaApi.

Gap taxonomy (the ~450)#

  1. Pure breadcrumbs (202)[domain] route with dense expert-mode controls placeholder text + the lane card. No domain logic, no data. Converting each = build the page's real feature and its backend (most have none), per the standing directive (full QuestAuthoring-density, build the backend too).

  2. Fabricated static (248) — these are the subtler gap: they pass a naive "is there code here?" check (hundreds of LOC of capability cards, route-maps, governance copy) but render invented constants, not real data. Example already corrected: TextToSpeech was 504 LOC of static governance sections embedding the breadcrumb; it is now wired to the real clone-workflow backend. The other 247 (esp. all of Bellona) remain fabricated-static.

Non-page V1 systems — status (cross-ref prior audits)#

These are real and reachable (verified in prior turns; not part of the 450): domain engines + the takedown/DSAR/crisis cascades; the Isis generation gate + async job queue + per-provider adapters; messaging transports + LTI 1.3 verify + SCORM 1.2/2004 RTE + the reminder planner/worker/delivery and now the 4 producers; the abuse-protection durable limiter; the agentic-studio kill-switch/budget guard and now its real full-mutation tool catalog; the Living-Scenes render→watermark→PSE→C2PA→durable-share pipeline.

Irreducible externals (not source code)#

Documented in V1_DEPLOYMENT_REQUIREMENTS.md: trained AI-video model weights + GPU endpoint; live Twilio/SES/FCM/Meta + Suno/RunPod/Meshy credentials; per-tenant LMS connector registrations; the reminder/worker cron host; expanded editorial corpus; the C2PA signing key. Each has ready in-repo code that consumes it and a functioning in-repo default without it.

Production-readiness verdict#

  • Backend / safety / governance / generation / messaging layers: production-real and reachable. The algorithmic, security, protocol, and pipeline gaps the earlier audits flagged are closed.
  • Operator/creator Studio frontend: ~3% wired (14 feature pages of 469). This is the dominant remaining in-repo gap. It is not blocked on missing engineering primitives — most pages need a straightforward read/mutate backend over an existing domain lib + the page itself, on the proven pattern. It is blocked on volume: ~450 pages × (backend + page + tests) is a multi-week, per-page program.

Definition of done (per user decision #11)#

Done = all in-repo code complete: all studio pages + their backends, plus the now-complete reminder producers + agentic catalog; externals documented (above), not blockers. Against that bar, the studio surface is the open item, quantified here at ~450 unwired components.

Per the standing directive: one verified page per turn — read the page's V1/ feature, build the full-density workspace and its backend (mirror the admin-isis pattern: store + admin-scoped fail-closed route + lib algorithm where one exists), rewrite the breadcrumb-enshrining tests onto real behavior, commit + push both refs. Priority order in flight: remaining Isis (most have or are near a backend) → AjaYemayaHathorBellona. Highest-leverage targets next: Isis pages with existing libs (ContentSafety, ModelRegistry, ProvenanceTracking, CostTracking) before the net-new-backend Aja/Yemaya domains.