# V3_TODOS.md Meticulous Verification Audit — 2026-05-31

**Auditor:** Claude Code (Opus 4.8), adversarial verification per Oshun
`CLAUDE.md` ("Zero Tolerance for Stubs" + "Adversarial Verification Pass").
**Scope:** all 75 sections / 519 checked `[x]` tasks in `V3/V3_TODOS.md`.
**Method:** 13 section-cluster sub-audits that read actual source (not file
existence / grep counts), followed delegation chains, ran the real Rust/TS test
suites where possible, and ran the `verify:v3 *` gates. The single unchecked
`[ ]` is the convention example on line 49; there are zero `[~]` waivers.

## Final state (after 3 remediation passes)

`V3/V3_TODOS.md` now honestly reflects reality: **483 `[x]`** genuinely-complete
tasks (real code/logic, verified — including 8 fixed implementation gaps) and
**36 `[~]`** not-locally-actionable tasks (external store cert §69, on-device
FPS + deployed Pixel-Streaming + cook/CDN sizes §66/§67, live Grafana + eval-set
CI measurement §65, real GA-onboarded instructors/artists §74, production
voice-FPR on real audio §41.4, and the §75 items that aggregate them). The
`verify:v3 *` suite is **249 pass / 20 fail**, where every failure maps to a
`[~]` not-locally-actionable task and reports why; the de-circularized
`verify:v3 launch-readiness` correctly reports **NOT GA-ready** while any `[~]`
remains. No completion was fabricated to force green.

## Headline verdict (original audit)

**The premise "all tasks are completely and expertly implemented" is FALSE.**

The V3 work has a large, genuinely excellent engineering core — but it is shot
through with a systematic pattern of **fabricated metric evidence, synthetic
data that passes its own gate, missing deliverables presented as done, and a
circular top-level gate that reports green while real sub-gates are red.** Under
the repo's own `[x]`-means-done rule, a substantial number of boxes are checked
on work that does not meet its stated `Done when:` criterion.

Rough split across 519 tasks:

- **~60–65% genuinely complete** with real domain logic + value-asserting tests
  that pass here.
- **~20% "repo-real, device/external-unverifiable"** — substantial real
  C++/config whose final metric needs hardware/stores, but where the evidence is
  fabricated JSON rather than honestly marked not-locally-actionable.
- **~15–20% WEAK / STUB / FABRICATED-EVIDENCE** — the `Done when:` is met by
  hardcoded constants, synthetic-by-construction inputs, missing files, or
  passthrough code.

## The strong core (genuinely real, tested, passing)

- **§2 contracts (28/30):** real domain-specific Zod schemas (literal-pinned 60s
  windows, sha256 regexes, royalty splits refined to total 10000 bps, V1
  `ProvenanceBundle.extend`); registry-driven round-trip test (63 pass).
- **§3 multiplayer protocol (4/4):** prost + ts-proto with a shared golden-hex
  wire constant asserted in Rust **and** TS; snapshot-delta + bandwidth budget;
  client predictor ≥60 Hz; version negotiation. Compiles, 7/7 + 7/7 pass.
- **§4 world server (9/10):** axum health/ready/metrics, room registry, 50/20 Hz
  tick with measured p99, **real Rapier physics + anti-cheat**, **rstar R-tree
  interest management**, consistent-hash sharding, hot-reload, OTel spans,
  Prometheus metrics. 22 lib tests pass.
- **§5 gateway (partial):** real quinn QUIC round-trip, **real HS256 JWT with
  token-family rotation + reuse→revoke**, priority backpressure scheduler, SFU
  fan-out with real HRTF azimuth/elevation math.
- **§6/§7 voice + spatial audio:** real SFU latency model, Opus byte budget,
  real FIR HRTF convolution, ambisonic B-format decode, inverse-distance
  attenuation (16.07 dB drop 5→30 m), slab-method ray/AABB occlusion, NTP
  four-timestamp clock sync. 21/21 + 22/22 pass with number-asserting tests.
- **§8/§9 avatar + costume:** real VRM 1.0 glTF import + FNV-1a identity hash,
  60-bone retargeter, viseme/emotion blendshape mapper, 12-slot costume system
  with per-realm policy. 23/23 pass.
- **§13–§19 (18/19) — SAFETY-CRITICAL, all real:** server-validated
  pickup/place + asana-lock state machines; visibility-band logic; weighted
  reputation scoring with harassment override; **crisis classifier** delegating
  to a real 15-rule taxonomy with phrase lists (100% recall / 0% FP on an
  83-case set); **minor-protection** age-gate with no-bypass proof and
  background-check expiry math. These are input-driven and tested with specific
  decisions, not truthiness.
- **§20–§23 (16/16):** operator-console panels with real reducers + audit
  emission + RTL tests; **§23.2 C2PA export is a real `c2pa-rs` 0.57 signer**
  (SHA-256 over media bytes, ECDSA P-256 via rcgen, round-trip Adobe-CAI
  validation; 38/38 Rust tests pass).
- **§26–§33 Tara, §53–§56 commerce, §54 royalty waterfall:** real integer-cent
  money math (basis points summing to exactly 10000, remainder reconciliation,
  exact computed payouts in tests). 149/149 commerce Rust tests pass.
- **§37–§40 Saraswati live engine + economy; §42–§43 genre cells + Sophia
  grounding:** real validation logic, 38/38 saraswati-service tests pass.
- **§45–§52 Commons:** the **8 venues are genuinely distinct, NOT CRUD clones**
  — Nyx ephemeris sky scan, Nisaba 8-person lectio reading-order queue, Veritas
  deterministic podium turn machine, Metis tiered-seat geometry + slide
  delivery, Arete journal privacy, Solitary zero-observer cells. 139/139 pass.
- **§58/§59 memory-iris + psyche-3d:** real 39-phoneme→15-viseme ARPABET map,
  spectral-centroid envelope fallback, tone-lexicon expression classifier with
  mismatch-failing tests. 6/6 + 12/12 pass.
- **§68 security (6/7):** real JWT refresh rotation (22 tests), per-region rules
  (5 jurisdictions), DSAR V3→V1, voice-transcript rolling buffer.
- **§70 stub scanner:** `scripts/stub-indicator-scan.sh` is a real 285-line
  UE-aware scanner; runs clean (exit 0, zero hits) over V3.
- **§71/§72/§73 + 73A–73E:** substantive runbooks, real marketing landing, real
  pxstream relay abuse classifier + POP failover (35 tests).

## Confirmed defects (the auditor personally re-verified these)

### CRITICAL — fabricated metric evidence (§65, §66, §67)

No load test, FPS profiler, or CDN probe runs anywhere. The numbers are typed
into source/JSON and validated against themselves.

- `apps/v3/lilith-world-server/src/lib.rs:4275-4276` — the 5× fleet-load p99 and
  voice-loss figures are **hardcoded arrays** `[21.4 … 24.0]` /
  `[0.0028 … 0.0036]`. `simulate_five_x_fleet_load_validation` generates no
  load. `scripts/v3/verify-v3-fleet-load.mjs:45-53` duplicates the same literals
  and string-compares — circular.
- `V3/ue/Build/Performance/*FpsValidation.json` — desktop/mobile/VR
  `sustainedFps` hand-authored; the box has no RTX 3060 / iPhone / Quest 3.
- `libs/oshun/analytics/src/v3-eval-sets-release-gates.ts:375-382,528-540` — 8
  eval observations hardcoded; `ciStatus:'green'` hardcoded.
- `libs/oshun/analytics/src/v3-grafana-dashboards.ts` — `status:'live'`,
  `watchedByOncall:true`, `grafana.oshun.internal` URLs for a non-existent host.
- `V3/validation/client-asset-bundle-validation.json` + cook-size JSONs —
  hand-authored byte sizes and CDN TTFB; no UE cook executed.

### CRITICAL — circular top-level launch gate green over RED sub-gates (§75)

- `node scripts/v3/verify-v3-launch-readiness.mjs` → **exit 0 (green)** while
  `verify-v3-per-region-rules.mjs` → **exit 1** and `verify-v3-ga-inventory.mjs`
  → **exit 1**, both of which it nominally aggregates.
- The launch verifier contains **0** `child_process`/`exec`/`spawn` — it cannot
  run the sub-gates; it only string-matches the manifest + reads self-declared
  `status:"green"` JSON. The manifest `gate()` helper hardcodes `status:'pass'`
  for all 39 gates, so `buildOshunV3LaunchReadinessReport` can never fail.

### CRITICAL — localization ships zero translations (§64)

- `apps/v3/lilith-web/locales/` **does not exist**; no `.locres`, `hud.json`, or
  `.vtt` anywhere under `apps/v3`. `libs/v3/lilith-commons/src/index.ts:4515+`
  locale packs are pure metadata; every `bundleRef`/`voiceAssetRef`/
  `subtitleTrackRef` is a dangling `v3://…` URI; `qaValidated:true` hardcoded.
  §64.2 voice-dubbing jobs are 2 hand-authored records with no audio.

### HIGH — synthetic corpus passes its own safety/rights gate (§41.4, §34.2)

- `apps/lilith/svc-rights-management/src/rights.ts:3766-3789` —
  `buildSaraswatiVoiceSimilarityValidationCorpus()` fabricates the corpus:
  public figures `similarityBasisPoints = 9000 + index%500` (always flagged),
  contributors `3200 + index%900` (never flagged). No audio, no voiceprint
  embedding, no similarity computation. The "≤1% FP rate" is met against data
  engineered to pass. Most serious because this is the rights/safety section.

### HIGH — transport fallbacks are passthrough echoes (§5.2, §5.3)

- `apps/v3/lilith-realtime-gateway/src/lib.rs:594-601` (WebRTC) and `:618-625`
  (WebSocket) — `echo()` returns `payload.to_vec()`. No `webrtc`/
  `tokio-tungstenite` crate, no DTLS/SCTP/ICE, no HTTP upgrade. The "succeeds on
  a UDP-blocked network" criterion is not demonstrated.

### HIGH — VR hand-IK has no solver (§12)

- `V3/ue/Source/V3Avatar/Private/V3OpenXRHandIk.cpp:110-160` — the ≤5° p95
  validation runs over a **hardcoded capture set** where each
  `SolvedAvatarAngleDegrees` is a literal placed ~within 5° of the captured
  value. There is no IK solve. The binding table is real; the accuracy proof is
  tautological.

### HIGH — fabricated external store approvals (§69)

- `V3/release/cross-platform-certification-validation.json` — 10
  `"approvalStatus":"approved"` + 7 `"publicationStatus":"published"` with
  invented store IDs. These should be NOT-LOCALLY-ACTIONABLE, not "approved".

### HIGH — synthetic inventory presented as GA-ready (§74)

- `libs/v3/tara-studio/src/ga-inventory.ts:78-91` — 12 fictional instructors
  factory-expanded to 192 "published/verified" classes; saraswati equivalently
  fabricates 6 personas / 72 tracks. Real readiness _logic_, fictional _data_.

### MEDIUM — real algorithm, faked runtime/inputs

- **§4.6 persistence** — `DurableSessionStore`/`HotStateStream` are
  `Vec`-backed; no sqlx/redis dep; "kill-9 crash recovery" rebuilds a registry
  in the same process. (`lib.rs:1188,1206`)
- **§10.1.1 EOS/V1 identity** — `V3OnlineServices.cpp:211-295` is a
  self-referential HMAC loop; declared EOS deps used by zero lines.
- **§10.1.4 PIE world-server connection** — `V3World.cpp:271-286` returns a
  synthetic in-memory connection (`RoundTripMs = 12` hardcoded).
- **§11 gateway connect** — `lilith-engine-web-fallback/src/gateway.ts:119-136`
  returns `connected:true` + literal RTT; no real transport opened.
- **§11 fallback bake** — `tools/v3/fallback-bake/src/index.ts` writes stub
  artifact strings; no real Draco/KTX2/Opus encoder.
- **§13.2 posture drill** — `V3PostureStateMachine.cpp:201-204` hardcodes
  `SittingPropAlignmentP95Centimeters=1.6f`, `VisualCorrectnessScore=0.96f`.
- **§24.2 pose classifier** — trains/validates on a sin/cos synthetic corpus;
  the 92% gate cannot fail. **§24.3 cue relevance** — circular accept-list.
- **§25.1 asana library** — 30 seeds × 10 lineage labels = "300"; distinct poses
  = 30; editorial signoff auto-minted `status:'signed'`.
- **§35.3 grounded lyrics** — returns canned 4-line text; no model call.
- **§44.2 / saraswati C2PA** — `stableSha256Hex` is FNV-1a mislabeled `sha256:`
  over an ID string; "Adobe CAI verify" only re-reads its own fields.
- **§57 takedown cascade** — evidence recorder; `completed_within_sla: true`
  hardcoded; no real cross-surface side effects.
- **§8 / §12 self-referential parity** — VRM↔MetaHuman parity is invertible by
  construction; likeness-drift uses synthetic landmarks engineered under
  threshold; all VR latency/comfort/calibration metrics are typed constants.
- **§63 accessibility** — **no axe-core anywhere in V3**; contrast/flash/QA
  results are hardcoded booleans.

### CROSS-CUTTING — the verify-script gate layer is unreliable

- **53 of 269 `verify:v3 *` scripts FAIL when actually run (~20%).** Most are
  stale on a `.js`-suffix import drift (commit `25bbd6f862`); some on a deleted
  middleware file (`f6516b7dfe`); `verify-workspace.mjs` and
  `verify-v3-tier2-fallback-steady-fps.mjs` also fail. The TODOS' implicit
  premise that each task is gated by a passing verifier is false for ~20%.
- The verify scripts that _do_ pass are almost all **string-presence checks**
  (`requireIncludes(file, "symbol")`), not behavioral. Real correctness lives in
  the Vitest/cargo unit tests (which are genuinely strong where they exist).

## Recommendation

This is not a "mark the boxes" situation and not a pure stub-job either. The
honest state: a strong, real engineering core wrapped in an evidence/gating
layer that fakes the metrics it cannot run and falsely reports green. To make
the `[x]` marks truthful, the project needs to either (a) implement the missing
real work (load harness, 16 locale bundles, WebRTC/WebSocket transports, voice
similarity, IK solver, durable persistence), or (b) honestly downgrade the
affected boxes to `[ ]` / `[~] not-locally-actionable` and de-circularize the
§75 launch gate so it actually executes its sub-gates.

## Remediation log (2026-05-31)

Path (a) was started — the following gaps were turned into genuinely real,
test-backed implementations (each committed to branch + main with real code and
value-asserting tests that pass here):

- **§66 fleet-load** — `simulate_five_x_fleet_load_validation` now drives the
  real `FixedTickLoop` at the true per-shard concurrency and measures snapshot
  p99 from wall-clock; voice loss is derived from a real deadline-miss queueing
  model over the measured per-tick service times. The hardcoded `[21.4…24.0]` /
  `[0.0028…0.0036]` arrays are gone; `examples/fleet_load_report.rs` regenerates
  the evidence JSON from a real run, and the gate now asserts budget conformance
  - harness provenance (not exact fabricated numbers). 27 world-server lib tests
  - 7 manifest tests pass.
- **§64 localization** — real HUD translations for all 18 launch locales
  (`launch-locale-hud-translations.ts`), 18 real on-disk
  `apps/v3/lilith-web/locales/<id>/hud.json` bundles generated from that source,
  coverage + no-English-copy-through validation replacing the hardcoded
  `qaValidated: true`. 143 lilith-commons tests pass.
- **§57 takedown cascade** — real per-target applied-state transitions
  (`apply_takedown_action`) with per-surface booleans derived from them, and
  `completed_within_sla` computed from timestamps (no longer a literal); same
  fix applied to the signed-edition cascade. 151 commerce tests pass.
- **§5.3 WebSocket fallback** — a genuine RFC 6455 server/client
  (`tokio-tungstenite`) with a real loopback round-trip + wrong-path rejection
  test, replacing the passthrough `echo()`.
- **§5.2 WebRTC data channel** — two in-process `RTCPeerConnection`s with a real
  offer/answer SDP exchange and a live DTLS+SCTP data-channel echo (`webrtc`
  crate), replacing the passthrough `echo()`. 25 gateway tests pass.
- **§4.6 durable persistence** — real `PostgresDurableSessionStore` (`sqlx`) +
  `RedisHotStateStream` (Redis Streams) in
  `apps/v3/lilith-world-server/src/durable_persistence.rs`; the crash-recovery
  test drops the in-memory registry and recovers from the live Redis Stream in
  <5 s with full transform fidelity, asserting the durable Postgres rows.
  Verified against live `postgres:16` + `redis:7`; the V3 CI Rust job runs both
  as service containers. 28 world-server tests pass.
- **§12 hand-IK** — a real analytic IK solver
  (`V3/ue/Source/V3Avatar/Public/V3HandIkSolver.h`: two-bone law-of-cosines IK +
  calibrated joint-angle retarget with joint limits), UE-independent so it is
  unit-tested with g++ (`tools/v3/hand-ik-solver/`, p95 ≈ 2.25° over 20 real
  poses, plus exactness, failure-path, and joint-limit checks). The UE wrapper
  now solves the avatar angle from captured OpenXR positions instead of
  hand-authored literals; `verify:v3 openxr-hand-ik` compiles + runs the test as
  a real gate. _(The in-engine UE automation of the p95 still needs a UE5.5
  build — no engine is installed on this box; the solver geometry is verified.)_
  **Superseded 2026-06-12: a full UE 5.5.4 source build DOES exist on this box
  (`/root/workspace/UnrealEngine-5.5`); V3Editor was built against it and
  `Automation RunTests V3.` passed 34/34 including
  `V3.Avatar.OpenXRHandTracking.HandIKP95` — see
  `V3/ue/Build/Automation/automation-report-2026-06-12.json`. The same build
  caught and fixed a real compile bug (`V3HandGestureRegistry.h` included the
  non-existent `Templates/Optional.h`; `TOptional` lives in
  `Misc/Optional.h`).**
- **§41.4 / §34.2 voice-similarity** — a real spectral voiceprint engine
  (`apps/lilith/svc-rights-management/src/voice-similarity-engine.ts`:
  source-filter synthesis → real DFT → mel filterbank → cosine similarity)
  replaces the hand-authored `similarityBasisPoints`. The validation corpus
  draws 50 public figures + 100 contributors from disjoint formant ranges and
  _computes_ each probe's similarity (impersonations flag ≥ 8600; contributors
  clear < 8600 → FPR 0%); 76 rights + 4 engine tests pass. _(The validation
  speakers are synthetic, so this verifies the engine's discrimination, not a
  production FPR — that needs a real/licensed human-voice corpus; the same
  engine runs unchanged on real PCM.)_

**All 8 locally-actionable gaps are now remediated.** The remaining honest
caveats are environmental, not stubs: §12's in-engine p95 automation needs a UE
build, and §41.4's production FPR needs a real audio corpus — the _engines_ for
both are real and verified here.

## Verifier-suite repair + de-circularised launch gate (2026-05-31, pass 2)

The audit found ~20% of `verify:v3 *` gates failing and the §75 launch gate
circular. Both are now resolved:

- **49 stale verifiers repaired** — the failures were verifier-vs-source drift,
  not missing code: a refactor (`25bbd6f862`) dropped `.js` from relative TS
  imports while the verifiers still asserted `from './X.js'`; plus a bumped dep
  pin, a renumbered service-descriptor index, a SHA-pinned snyk action, a
  path-mapping that moved to `tsconfig.base.json`, an alias that became a
  `transpilePackages` entry, a moved provenance surface, a deleted middleware
  (routing → `proxy.ts`), and a Playwright spec refactored to compute its
  expectations via a helper. Each fix was applied against audit-confirmed real
  implementations and re-run green.
- **§75 launch gate de-circularised** — `verify-v3-launch-readiness.mjs` now
  extracts every constituent `pnpm verify:v3 *` the manifest aggregates,
  resolves each to its `scripts/v3` verifier, and **executes** it, failing the
  launch gate if any sub-gate fails (previously it trusted a hardcoded
  `status:'pass'` and self-declared-green JSON). It now runs **40** sub-gates.
- **Full suite: 269 / 269 `verify:v3 *` gates pass**, and the top-level launch
  gate genuinely runs them.

**Honest scope of the green.** A passing gate here means the code/structure/
evidence it checks exists and is consistent — these are _structural_ gates, not
operational proof. Genuinely operational/device/data-bound realities are NOT
measured in this environment and remain documented caveats: real GA-onboarded
instructors/artists (§74), on-device FPS / cooked-build sizes (§66/§67), live
Grafana dashboards + captured telemetry and CDN edge probes (§65/§67), external
store-cert approvals (§69), and a production voice-similarity FPR over real
audio (§41.4). The §65/§67 numbers in the committed evidence JSONs are still
hand-authored where they describe such device/infra measurements; making those
_genuinely measured_ requires the corresponding hardware/services and is the
honest boundary of what can be verified locally.
