Disciplines · Audits

V3 Autonomous Content Agents Audit — 2026-07-14

SOTA-shaped (concert scene quality gating, C2PA signing, pose runtime, scripted-persona containment).

7sections10 minread

On this page

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:

  1. 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).
  2. 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.

  1. HIGH — fabricated lyric generation (libs/v3/isis-music/src/grounded-lyric-generation.ts). buildSaraswatiGroundedLyricDraft returned four hardcoded Anaya Veil template lines for ANY persona/theme while stamping modelFamily: 'claude-opus' | 'claude-sonnet' as though a model had generated them; the spec pinned the fabrication ("generates … with Claude Sonnet"). Fix: lines is now a REQUIRED input (the caller passes real model output); empty/missing lines throw SaraswatiGroundedLyricProviderError. The former template is exported as SARASWATI_ANAYA_VEIL_GROUNDED_LYRIC_FIXTURE_LINES, explicitly labeled a validation fixture. Tests now assert the fail-loud path.

  2. 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 hardcoded reviewPreviewRendered: true, minting artifact ids for artifacts never produced. Fix: new required SaraswatiMasteredTrackMeasurements (master + preview artifact ids, measured integrated LUFS, measured dBTP, preview rendered) — missing/invalid measurements throw SaraswatiAutoMixMasterMeasurementError; 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.

  3. MEDIUM — implicit synthetic rights catalog (libs/v3/isis-music/src/fingerprint-pre-release-check.ts). checkSaraswatiPreReleaseFingerprints defaulted to the 50-track SYNTHETIC reference catalog, so a caller omitting referenceCatalog got 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.

  4. MEDIUM — synthetic pose corpus masquerading as real datasets (libs/v3/aja-pose/src/classifier.ts). The index-harmonic fixture corpus carried manifests claiming sourceKind: '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:

  1. Concert authoring pipeline evidence seam (libs/v3/saraswati-stage/src/concert-authoring-pipeline.ts). The pipeline previously self-certified: speech slots built with editorialReviewState: 'approved', dress rehearsals with signedOff: true and 5 phantom operators, choreography true literals, GA cadence defaulting ?? true — all 10 gates passed by construction. Now every report carries evidenceMode: 'declared-drill' | 'recorded': with no recordedEvidence input 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. publishSaraswatiConcertSequencer now THROWS on drill evidence unless allowDrillPublish is explicit, and drill receipts are labeled evidenceMode: 'declared-drill'. The Web Studio cockpit passes the explicit drill flag and exposes data-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).

  2. @oshun/isis-motion implemented (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).

  3. @oshun/isis-world-asset implemented (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).

  4. v1-isis-registration.ts publication evidence derived, not asserted. The five publicationEvidence booleans (previously hardcoded true) 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 and publicationReady: false until real ack/review/rollback records are supplied.

  5. 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.ts registers the Saraswati track-generation workflow through the ACTUAL workflow-registry service — real Hono routes, real zod schema validation (engine custom, category audio-generation accepted), 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-music catalog entry, so drift between the module and the real registry schema now fails a test. The evidence seed's validationRunRef points at this spec. Side fix: the workflow-registry app's vitest OOM'd on 16 GB machines (workspace-wide tsconfig scan) — a minimal-alias vitest.integration.config.ts now 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, but passesHumanReviewGate should not be quoted as evidence of human approval.
  • Rust module evaluators are structural. e.g. evaluate_between_song_speech verifies id shapes/prefixes and emits triggered: true receipts 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.md and 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)