# V7 (Mawu) Autonomous Content-Creation Audit — 2026-07-14

**Scope:** every agent/system in V7 that _autonomously creates or verifies
top‑tier content_ — AI‑assisted asset/world/NPC creation, the Crucible balance
agent-fleet, the Loom world‑genome generators, and the runtime degradation and
governance gates that guard them. Question asked: **is it all SOTA and
prod‑ready?**

**Method:** confirmatory + adversarial two‑pass read of each surface (every
public function and the private functions it delegates to), the mandatory
stub‑indicator grep plus a silent‑stub pattern scan, test‑coherence review, and
wiring checks. All fixes were applied in this session and their libraries'
tests re‑run to green.

**Headline verdict:** the generation and verification **cores are real and
SOTA‑shaped** (deterministic economy simulation, correct Wilson/Gini/entropy
statistics, real greedy pairwise covering arrays, real hydraulic‑erosion
terrain, a genuine LLM‑backed co‑creator with an executable trust boundary, and
a fail‑loud generation‑policy gate). **They are NOT yet prod‑ready end‑to‑end:**
the neural/RL/vision backends (RL agent training, meta‑discovery match
simulation, ML terrain diffusion, reference‑image estimation, live Themis
dispatch, the product text‑to‑3D/texture/world/NPC models) are **seams, not
running systems.** Before this audit, several of those seams **fabricated
their results** (claimed trained policies, invented win rates, self‑verified
parity, hardcoded quality scores). Those were the real problem, and they are
now fixed: **20 fabrication seams closed** (4 HIGH, 12 MED, 4 LOW), each
replaced with either a fail‑loud refusal, a measured computation, or an
explicitly labeled design prior/target.

---

## Per‑surface verdict

| Surface | Core | Verdict | Findings fixed |
| --- | --- | --- | --- |
| `apps/v7/eunomia-governance-service` (Crucible balance agents, Maya Variants, plural voting, Themis routing) | real | SOTA‑shaped; prod‑ready except live Themis dispatch | 1 MED |
| `apps/v7/danu-mesh-cluster` (AI cost/fidelity degradation levers) | real | prod‑ready (honest telemetry, coverage‑flagged) | none |
| `libs/isis/three-d-pipelines/mawu-studio-ai-creation.ts` (generation‑policy gate + Sophia grounding) | real | exemplary honest seam; fails loud w/o backend | none |
| `libs/maya/forge-assist` (AI co‑creator + CapabilityPolicy trust boundary) | real | SOTA‑shaped, prod‑ready | none |
| `libs/maya/forge-ai-assist` (deterministic planning primitives) | real | real after de‑fabricating 3 metric seams | 2 MED + 1 LOW |
| `libs/maya/forge-ai` (behavior/personality/routine composition) | real | prod‑ready | none |
| `libs/maya/crucible-core` (headless economy sim, snapshots, campaigns, profiling) | real (strong) | real after removing self‑parity + fake profiling + non‑sweeping sweeps | 1 HIGH + 3 MED + 4 LOW |
| `libs/maya/crucible-agents` (RL / meta / exploit / coordination "agent fleet") | mixed | the fabricated half now fails loud or is measured | 3 HIGH + 2 MED + 1 LOW |
| `libs/maya/crucible-adversarial` (static exploit scanners) | real (strongest) | prod‑ready after de‑fabricating rescan/proof claims | 2 MED |
| `libs/maya/crucible-balance` (Wilson/Gini/TTK/power‑curve stats) | real (strong) | real after de‑inventing scorecard + graph metrics | 2 MED |
| `libs/maya/crucible-scenarios` (pairwise covering arrays) | real | real after labeling asymmetry priors + real Spearman | 1 MED + 1 LOW |
| `libs/maya/crucible-regression` (regression stats, gates) | real (cleanest) | prod‑ready after 1 rename | 1 LOW |
| `libs/maya/crucible-live` (telemetry, meta patterns, hotfix) | real | real after de‑fabricating the Rust hotfix validation | 1 HIGH |
| `libs/maya/loom-inverse` (reference→genome estimation) | seam | rebuilt: priors + fail‑loud vision/training seams | rewrite |
| `libs/maya/loom-terrain-ml` (Earthbender/TerraFusion/Mesa ML terrain) | procedural stand‑in | labeled stand‑ins + real measured seam scores | struct/label rework |
| `libs/maya/loom-agent` (LLM/RL world‑gen orchestration) | rule‑based | relabeled: measured/derived fields, checked coherence | struct/label rework |
| `libs/maya/loom-diffgen` (differentiable pipeline) | real | 1 derived‑score fix | 1 LOW |
| `libs/maya/loom-{core,biomes,evolution,dimensions,multiverse,semantic}` | real | genome/world modeling real; no findings | none |
| `libs/maya/engine-core/crates/maya-genesis-{terrain,flora,urban}` (procedural generation) | real (huge) | real hydraulic/thermal erosion, L‑systems; no findings | none |
| `libs/maya/genesis-scene-agent`, `npc-distillation`, `npc-cloud-fallback`, `voice-*` | real | rule‑based planners + real distillation math; honest fallbacks | none |

---

## HIGH findings (fabricated results presented as real) — all fixed

1. **`crucible-agents::train_rl_agent` fabricated a trained policy.**
   `win_rate_milli` was arithmetic on config fields, `frames_trained` claimed
   frames that never ran, entropy was a constant `250`. No training happened.
   The test asserted `win_rate_milli > 900`, enshrining the fabrication.
   **Fix:** `train_rl_agent` now returns
   `Err(RlTrainingBackendNotConfigured)`; real checkpoints from an external run
   enter through a validating `ingest_policy_checkpoint`. Same fix mirrored in
   the Python `run_training`/`resume_training`
   (`RlTrainingUnavailableError` + `ingest_checkpoint`).

2. **`crucible-agents::run_meta_discovery` invented win rates.**
   `win_rate_milli = 500 + rng() % 220 + index*5` — random numbers presented as
   measured loadout win rates; `generations`/`matches_per_genome` were ignored.
   **Fix:** split into `plan_meta_discovery` (enumerates the genome population,
   carries no win rates) and `rank_dominant_loadouts` (ranks from **measured**
   `LoadoutMatchObservations`, Wilson‑interval lower bound gating the
   overpowered flag).

3. **`crucible-agents::run_exploit_hunter` echoed its own input.**
   `discovered: planted_exploit` — the "discovery" was the caller's boolean
   parroted back; the episode number was hardcoded. This is V7's flagship
   "fleets of AI agents discover exploits" capability, and it discovered
   nothing. **Fix:** now takes measured `ExploitEpisode` telemetry and detects
   the first episode whose reward crosses the objective threshold (or reports
   no breakthrough).

4. **`crucible-core::verify_headless_full_engine_parity` self‑verified.**
   It ran the same `HeadlessSimulation` twice and labeled run #2
   `full_engine_hash`; `within_one_percent` was true by construction. There is
   no full engine here. **Fix:** replaced with
   `verify_headless_parity_against_reference`, which requires a supplied
   `FullEngineReference` (a real full‑engine run's hash + margin), refuses an
   empty reference, and reports divergence honestly.

5. **`crucible-live::recommend_hotfix` (Rust) claimed sim validation.**
   Returned `validated_by_simulation: true`, `no_new_regressions: true`, and
   evidence `"accelerated simulation passed"` as literals — no simulation ran.
   **Fix:** now takes a `HotfixValidationResults` input (run id +
   pass/regression‑free booleans) and reports failures as failures. (The TS
   `packageHotfixProposal` already did this correctly.)

## MED findings (misleading labels / invented sub‑scores / self‑approving) — all fixed

- **crucible-core:** parameter sweeps that renamed the scenario but changed no
  simulation input → `expand_campaign` now **applies** each sweep value
  (`seed`, `skill`, `rule:<name>`), rejects unknown sweep params, and re‑derives
  the mod‑loadout hash; test asserts low‑ vs high‑skill runs produce **different
  state hashes**. Fabricated per‑system profiling nanos → now **measured**
  `Instant::elapsed()` per dispatch. Fake `Lz4`/`CRUCIBLE-LZ4` label over an RLE
  codec → renamed to `Rle`. `run_campaign` hardcoded `failed: 0` → derived from
  expanded‑vs‑completed counts. Fabricated per‑kill TTK stamps → `kill_ticks`/
  `death_ticks` now read from real `"kill"` events emitted at the kill site.
- **crucible-agents:** `build_observation` hardcoded `resources:100`,
  `own_health:100_000` → now takes real `ObserverOwnState`. `test_coordination`
  premade/solo win rates were a hand‑tuned formula → now computed from measured
  `MatchRecord`s. `training_dashboard` invented the first two baseline points →
  takes the measured win‑rate history.
- **crucible-adversarial:** every mitigation hardcoded
  `validated_by_rescan: true` (Rust + Python) → now `false`, with a real
  `validate_mitigation_by_rescan` that flips it only when a supplied rescan no
  longer reproduces the finding. `ExploitProof` documented as a reproduction
  **package**, not an executed verification.
- **crucible-balance:** scorecard invented `EndgameDepth: 850` and an
  inflation‑keyed `ExploitRisk` → those categories moved to a `not_computed`
  list (absence ≠ passing grade). `matchup_graph.strongly_connected` (actually
  matrix completeness) mislabeled + `broad_cycles`/`degenerate_rps` claimed
  cycles never detected → renamed `matrix_complete` and added **real
  intransitive beat‑cycle counting**. Sensitivity safe‑band was a flat ±5% →
  now derived from the measured derivative.
- **crucible-scenarios:** generated asymmetry win probabilities were unlabeled
  model constants → tagged `probability_source: DesignModelPrior` vs
  `Measured`. `spearman_rho` computed Pearson of raw scores → now
  **rank‑transforms both sides** (true Spearman with tie averaging).
- **forge-ai-assist:** hardcoded `consistency_score_bps: 8_400` → derived
  `style_anchoring_bps` from supplied style‑ref count; `themis_originality_…`
  (a caller input echoed as if scored here) → renamed `input_originality_…`;
  `impact_score_bps` (a text‑length proxy) → renamed `length_proxy_bps`. Both
  Rust and TS mirrors.
- **eunomia-governance-service:** `routeProposalAppealToThemis` returned
  `routed_to_themis` while dispatching nothing → added
  `deliveryStatus: 'pending-dispatch'` so route **construction** is never
  mistaken for **delivery** (the case id/appealRef were already documented
  honest seams).

## LOW findings — fixed

- crucible-core `SimulationSpeed` multiplier fed nothing → removed. Campaign
  retry path swallowed errors into empty results → now surfaces diagnostics.
- crucible-regression `run_ab_simulation` (analyzes supplied observations, runs
  no sim) → renamed `analyze_ab_observations`.
- loom‑diffgen `content_preservation_score: 0.84` / `preserves_content: true` →
  derived from the measured `gram_matrix_loss`.
- forge‑ai‑assist quest objective/dialogue fixed lists (mitigated by the
  documented planning‑primitive framing) — left as documented design content.

## Loom generator relabeling (stand‑ins, not fabrications, now labeled)

`loom-inverse`, `loom-terrain-ml`, and `loom-agent` modeled neural/LLM/RL
approaches with deterministic code and dressed the outputs in fabricated
quality scores (`sketch_match_score: 0.78`, `copernicus_prior_score: 0.83`,
`parameter_r2`, `benchmark winner: MlDiffusion`, agent "reward" constants).
Reworked so each:

- **fails loud** where a real model/vision/training backend is required
  (`estimate_*_from_reference`, `train_neural_parameter_predictor` →
  `*NotConfigured`);
- **tags stand‑ins** (`procedural_stand_in: true`,
  `TERRAIN_ML_IMPLEMENTATION = "deterministic-procedural-stand-in"`,
  rule‑based orchestration header);
- **measures what it can** from real data (inpainting seam‑continuity and
  context‑match computed from the actual heightmaps; world‑grow genome
  consistency computed over generated blocks; audit‑trail provenance hashing
  the full decision content; multi‑agent dependency ordering checked);
- **exposes targets, not results** (`InverseQualityTargets`,
  `TerrainQualityTargets`, `MlTerrainQualityBenchmarkPlan` replace the
  fabricated benchmark that declared a winner without running).

---

## What remains for prod‑readiness (honest seam inventory)

These are external‑backend integrations, correctly represented in code as
fail‑loud seams or labeled stand‑ins — **not** stubs that fake success:

- Product text‑to‑3D / texture / world / NPC generation backends (Isis gate is
  ready and fails loud with `backend-not-configured`).
- The RL training runtime + match simulator behind the Crucible "agent fleet"
  (planning + measured‑ingest paths are ready).
- ML terrain diffusion + reference‑image (vision/CNN) estimation backends.
- Live Themis arbitration dispatch (route construction is ready).
- The full engine that Crucible parity is measured against.

None of these can be completed on this box (no GPU, no vendor models, no live
Themis bus); each is now a loud refusal the moment it is called without its
backend, which is the correct production posture.

---

## Verification

Every modified library's tests were re‑run to green in this session:
crucible‑core 10, crucible‑agents 10 (+4 Python), crucible‑adversarial 13 (+4
Python), crucible‑balance 11, crucible‑scenarios 7, crucible‑regression 9,
crucible‑live 6, loom‑inverse 5, loom‑terrain‑ml 5, loom‑agent 5, loom‑diffgen
5, forge‑ai‑assist 4 (Rust) + 6 (TS); eunomia‑governance‑service 12, isis
three‑d‑pipelines 22, forge‑assist 15, danu‑mesh‑cluster 22 (Rust). The rewritten
tests assert the honest semantics — fail‑loud refusals, measured values against
known‑correct answers, and different‑input‑different‑output — so they would
**fail** against the fabricated versions they replaced.
