Scope: every agent/pipeline that autonomously creates content for V3 (Lilith
Metaverse / Tara Studio / Saraswati Stage). Method: per-library source read,
adversarial stub scan (mandatory grep + silent-stub pattern scan), test-suite
runs, verifier-script runs — main-loop only, no agent fan-out. Companion audits:
V1_AUTONOMOUS_CONTENT_AGENTS_AUDIT_2026-07-13.md,
V2_AUTONOMOUS_CONTENT_AGENTS_AUDIT_2026-07-13.md. Prior V3 adjudications this
audit builds on: V3/VERIFICATION_AUDIT_2026-05-31.md and
V3/REMEDIATION_2026-06-12.md (standard: structural gates are not operational
proof; hand-authored "observed" tables must not masquerade as measurements).
Verdict#
The governance/policy cores are real and strong — several genuinely
SOTA-shaped (concert scene quality gating, C2PA signing, pose runtime,
scripted-persona containment). The stack is NOT production-ready as an
end-to-end autonomous content system, and — to its credit — it says so itself:
V3/launch/launch-readiness-release-gate.json is red at 30/41 required commands
and 24/39 named gates, with gaReady: false, after the 2026-06-12
de-circularization.
Two axes to the verdict:
- Code quality of what exists: high. Fail-loud validation everywhere, domain-specific algorithms, real third-party integrations where they matter (MediaPipe/MoveNet, c2pa-rs), 190+ tests green across the audited surface (149 TS across 6 libs + 38 Rust + 3 re-run verifiers).
- Distance to "autonomously creates top-notch content": material. The generation moments themselves (music synthesis, lyric LLM calls, TTS, motion capture/AI-assist, world assets) are all provider seams or UE-side work that is not in this repo. What IS in repo is the governance shell around those moments. Several of those seams were fail-silent (fabricating results) until this audit — all locally-actionable fabrication paths are now closed (fixes 1–8 below): every generation-governance library either evaluates real supplied inputs or fails loud / labels itself a drill. What remains between here and prod-ready is exclusively external: provider credentials, real V1 Isis registration, real pose-capture training data, UE-side execution, and the operational windows the honest-red launch gates are waiting on. None of those can be truthfully closed from this machine.
Inventory — the autonomous content stack#
| Layer | Package | What it does | Assessment |
|---|---|---|---|
| Music generation governance | @oshun/isis-music (9 files, ~3.8k LOC) |
Provider routing (Suno/Udio/Stable Audio/MusicGen/AudioCraft/Mubert), Sophia-grounded lyric factuality, Lilith tone policy, auto-mix/master review gate, provenance bundles, fingerprint pre-release check, V1 Isis workflow registration | Real policy cores; 3 fabrication seams FIXED this audit |
| Virtual-artist tenant | @oshun/saraswati-stage (36 files, ~21k LOC) |
Persona dossiers, voice-signature consent builds, discography release flow, genre cells, remix rights, Themis adjudication, C2PA manifests, concert authoring pipeline | Real except the concert-authoring evidence generator (structural-only; see findings) |
| Live performance engine | apps/v3/saraswati-service (Rust, ~5.3k LOC, 38 tests) |
Performance-plan → Sequencer compile, per-song execution, between-song speech gates, audience interaction, recording pipeline, royalty settlement, real C2PA signing (c2pa-rs, PEM signer, Reader-verified) | C2PA path production-grade; module evaluators are structural gates, honest fail-loud validation |
| Backstory grounding | @oshun/sophia-saraswati-grounding (~1.3k LOC) |
Citation-trail validation for persona backstory; real-culture claims require supporting Sophia sources; fail-closed | Real |
| Instructor-persona content | @oshun/tara-studio (51 files, ~21k LOC, 69 tests) |
Scripted-only AI personas (out-of-script asana → sponsor handoff or graceful no-op), invitational-language linter, lineage grounding, TTS voice consent/recording/scope-lock/royalty, practice plans | Real; the containment model (persona can only speak sponsor-approved lines) is the right design |
| Pose coaching | @oshun/aja-pose (~3.7k LOC) |
MediaPipe tasks-vision runtime + MoveNet fallback pipeline, geometric feature extraction, nearest-centroid classifier + confusion-matrix gate, rule-based alignment cues, risk-modification ladder, on-device privacy egress guard | Runtime/features/rules real; synthetic corpus mislabeled as in-house/licensed — FIXED |
| Concert quality gates | @oshun/v3-concert-quality (~1k LOC) |
Judge-panel scene quality scoring, corpus diversity (cluster coverage + pairwise distance), slop-density caps, composed with C2PA/consent gates into one fail-closed export suite | Real; genuinely SOTA-shaped content-quality gating |
| Avatar pipeline | @oshun/avatar-pipeline (~5.2k LOC) |
VRM→Oshun retarget, GA personas, likeness-drift metric (normalized landmark distance per canonical angle, fail-closed on missing views), dual authoring, instructor opt-in | Real metric over synthetic gallery fixtures |
| Motion / world-asset generation | @oshun/isis-motion, @oshun/isis-world-asset |
Motion briefs / retarget-pass QA / Sequencer cue export; LOD budgets / cook compliance / asset briefs / provenance | Were descriptor-only shells at audit start; REAL implementations added in the second pass (see fixes 6–7) |
Fixed during this audit#
All three mirror the V2 precedent
(fix(shared): fail-loud v2 translation provider seam): a governance library
must never return a result it did not receive from a real upstream call.
-
HIGH — fabricated lyric generation (
libs/v3/isis-music/src/grounded-lyric-generation.ts).buildSaraswatiGroundedLyricDraftreturned four hardcoded Anaya Veil template lines for ANY persona/theme while stampingmodelFamily: 'claude-opus' | 'claude-sonnet'as though a model had generated them; the spec pinned the fabrication ("generates … with Claude Sonnet"). Fix:linesis now a REQUIRED input (the caller passes real model output); empty/missing lines throwSaraswatiGroundedLyricProviderError. The former template is exported asSARASWATI_ANAYA_VEIL_GROUNDED_LYRIC_FIXTURE_LINES, explicitly labeled a validation fixture. Tests now assert the fail-loud path. -
HIGH — mastering quality gate that could never fail (
libs/v3/isis-music/src/mix-master-review-gate.ts).createSaraswatiAutoMixMasterPass"checked" loudness/true-peak by comparing release-target CONSTANTS to themselves and hardcodedreviewPreviewRendered: true, minting artifact ids for artifacts never produced. Fix: new requiredSaraswatiMasteredTrackMeasurements(master + preview artifact ids, measured integrated LUFS, measured dBTP, preview rendered) — missing/invalid measurements throwSaraswatiAutoMixMasterMeasurementError; checks now evaluate measurements against −14 LUFS ±1 LU and ≤ −1 dBTP. Review queue takes{ track, measurements }submissions. Tests prove the gate fails on out-of-tolerance measurements. -
MEDIUM — implicit synthetic rights catalog (
libs/v3/isis-music/src/fingerprint-pre-release-check.ts).checkSaraswatiPreReleaseFingerprintsdefaulted to the 50-track SYNTHETIC reference catalog, so a caller omittingreferenceCataloggot a guaranteed-'clear' rights verdict against fake references. Fix: the catalog is now a required option (throws otherwise); the synthetic constant is documented as validation-only. -
MEDIUM — synthetic pose corpus masquerading as real datasets (
libs/v3/aja-pose/src/classifier.ts). The index-harmonic fixture corpus carried manifests claimingsourceKind: 'in-house'/'licensed'with invented license refs (licensed-yoga-pose-validation-v3), making the self-fulfilling ≥ 0.92 accuracy gate look like a measured result. Fix: new'synthetic-fixture'source kind used by the default corpus, honest dataset ids/license ref, and a doc contract that production centroids must be trained on real labeled captures.
Verifier needles updated to match
(verify-saraswati-grounded-lyric-generation.mjs,
verify-aja-asana-classifier.mjs); all three touched verifiers re-run green.
Post-fix: isis-music 23/23, aja-pose 21/21, tsc clean on both.
Fixed in the second pass (same day)#
After the initial report, the remaining locally-actionable gaps were closed:
-
Concert authoring pipeline evidence seam (
libs/v3/saraswati-stage/src/concert-authoring-pipeline.ts). The pipeline previously self-certified: speech slots built witheditorialReviewState: 'approved', dress rehearsals withsignedOff: trueand 5 phantom operators, choreographytrueliterals, GA cadence defaulting?? true— all 10 gates passed by construction. Now every report carriesevidenceMode: 'declared-drill' | 'recorded': with norecordedEvidenceinput the run is a labeled drill; with records supplied (reviewer ids + timestamps, named rehearsal participants, bound-interaction lists, observed cadence counts) the artifacts are built FROM the records and honest-zero cadence records fail the gate.publishSaraswatiConcertSequencernow THROWS on drill evidence unlessallowDrillPublishis explicit, and drill receipts are labeledevidenceMode: 'declared-drill'. The Web Studio cockpit passes the explicit drill flag and exposesdata-evidence-mode. Verifier failure set confirmed byte-identical before/after (the 4 remaining failures are the intentional honest-red GA-window signals from the 2026-06-12 remediation). -
@oshun/isis-motionimplemented (was an ~85-LOC descriptor shell). Real domain logic behind all three declared capabilities: motion briefs (metronome tempo classes, energy→intensity ladder, contiguous-section and beat-count validation), retarget-pass QA (17-bone canonical coverage, goniometric joint limits — knee/elbow 0–150°, neck ±70° —, contact-frame foot-slip metric at 2 cm tolerance), and cue export (beat→frame quantization at the 30 fps Sequencer rate with gap-free full-coverage validation). 10 tests assert exact computed values (e.g. 16 beats @120 BPM = 240 frames; 6 cm slip fails). -
@oshun/isis-world-assetimplemented (was an ~86-LOC descriptor shell). Tier-scaled LOD budgets (desktop envelopes per asset class; VR ×0.5, mobile ×0.25, Tier-2 web ×0.1 triangle scales; per-tier texture ceilings; 40%/15% LOD-chain ratios), measured-cook compliance evaluation (fail-loud on over-budget triangles/textures, missing LOD levels, material-slot overruns), tenant-policy asset briefs (per-tenant allowed classes; Tara may not generate architecture), and provenance bundles with a fail-closed inspector that blocks publish on failed cook evidence. 8 tests assert exact budget numbers (hero-prop mobile LOD0 = 37,500 tris). -
v1-isis-registration.tspublication evidence derived, not asserted. The fivepublicationEvidencebooleans (previously hardcodedtrue) now derive from evidence refs; the in-repo seed points validation/dry-run at the real local artifacts and leaves the three human sign-off refs EMPTY — their booleans are honestly false andpublicationReady: falseuntil real ack/review/rollback records are supplied. -
Registration proven against the real V1 Isis registry (third pass, same day). New integration spec
apps/isis/workflow-registry/src/routes/saraswati-v3-workflow-registration.spec.tsregisters the Saraswati track-generation workflow through the ACTUAL workflow-registry service — real Hono routes, real zod schema validation (enginecustom, categoryaudio-generationaccepted), real service layer + security audit log; only the storage backend is swapped in-memory (the same dependency-boundary double the service's own route specs use). Create → publish → fetch round-trip verified; the payload is derived from the@oshun/isis-musiccatalog entry, so drift between the module and the real registry schema now fails a test. The evidence seed'svalidationRunRefpoints at this spec. Side fix: the workflow-registry app's vitest OOM'd on 16 GB machines (workspace-wide tsconfig scan) — a minimal-aliasvitest.integration.config.tsnow runs its specs locally (auth spec 11/11, previously OOM).
Findings noted, not fixed (adjudicated or not locally actionable)#
- Production registry deployment. The registration path is now integration-proven end-to-end against the real service code; executing it against the deployed production registry (real Postgres, real API keys) is a deploy-time step, plus the three human sign-off refs (owner ack, governance review, rollback plan) which stay honestly false until recorded.
- aja-pose "human review" relevance gate builds its accepted-rule sets
procedurally under
reviewerPanel: 'tara-senior-teachers'— expected-decision fixtures, fine as harness, butpassesHumanReviewGateshould not be quoted as evidence of human approval. - Rust module evaluators are structural. e.g.
evaluate_between_song_speechverifies id shapes/prefixes and emitstriggered: truereceipts for transitions that never ran. Validation is real and fail-loud; the reports are drill artifacts, not showtime telemetry.
Deploy boundary (what "prod-ready" additionally requires)#
- Provider credentials + real generation calls behind every seam: music
providers (Suno/Udio/…), lyric LLM (via V1 Isis /
@oshun/ai), TTS (Cartesia/ElevenLabs), fingerprint vendors (Audible Magic/Pex live catalogs). - Real V1 Isis registry registration for
saraswati-stage-track-generation. - Real pose-capture training data for the aja-pose centroids (the runtime is ready; the shipped default model is fixture-trained).
- UE-side execution (Sequencer assets, MetaSounds, motion libraries) — not auditable on this Mac (source-read only; no UE here).
- The 11 currently-red launch sub-gates, GA-cadence window actually elapsing,
real drills replacing self-attested ones (per
V3/LAUNCH_READINESS.mdand the remediation log).
Test evidence (all run 2026-07-14 on this machine)#
| Suite | Result |
|---|---|
libs/v3/isis-music (post-fix) |
23/23 ✓, tsc clean |
libs/v3/isis-motion (post-implementation) |
10/10 ✓, tsc clean |
libs/v3/isis-world-asset (post-implementation) |
8/8 ✓, tsc clean |
libs/v3/aja-pose (post-fix) |
21/21 ✓, tsc clean |
libs/v3/saraswati-stage (post-evidence-seam) |
57/57 ✓, tsc clean |
libs/v3/sophia-saraswati-grounding |
8/8 ✓ |
libs/v3/tara-studio |
69/69 ✓ |
libs/v3/avatar-pipeline |
23/23 ✓ |
libs/v3/concert-quality |
14/14 ✓ |
apps/oshun/web SaraswatiConcertAuthoringPipeline component |
3/3 ✓ |
apps/v3/saraswati-service (cargo) |
38/38 ✓ |
| verifiers: grounded-lyric, auto-mix-master, fingerprint, aja-classifier, v1-isis-workflow | all pass post-fix; concert-authoring verifier failure set byte-identical to pre-change (intentional honest-red GA-window signals only) |