# V3 Remediation Log — 2026-06-12

Remediation of the V3 residue findings in `V1_V7_PLAN_SET_AUDIT_2026-06-12.md`
(§4 "V3", §5 "V3 (post-remediation residue)"), maintaining the standard set by
`V3/VERIFICATION_AUDIT_2026-05-31.md`: structural gates are not operational
proof, and hand-authored "observed" tables must not masquerade as measurements.
All edits are inside `V3/`. No checkbox was newly marked `[x]`; three `[x]` were
re-marked `[~]` with inline reasons. Verifier runs below are real
(`node scripts/v3/*.mjs`, executed 2026-06-12).

## 1. Stale green launch aggregate — `V3/launch/launch-readiness-release-gate.json`

- Finding reproduced: file claimed `status: green`, 39/39 gates, generatedAt
  2026-05-23 — contradicting the de-circularized verifier and NOT-GA-ready
  state.
- Corrected by hand from an actual run of
  `scripts/v3/verify-v3-launch-readiness.mjs` (2026-06-12): `status: "red"`,
  `requiredGateCount: 40` (the constituent `verify:v3 *` sub-gates the verifier
  executes, per the audit instruction), `passingGateCount: 29`,
  `manifestNamedGateCount: 39`, `gaReady: false`, plus `correctedAt` and a
  `note` explaining the correction and forbidding hand-editing back to green.
- Fail-closed confirmed: the launch verifier now reports
  `launch readiness status must be green; got red` (plus the gate-count
  mismatches) and exits 1 — the aggregate can no longer read green while
  sub-gates fail.
- Residual (outside `V3/`, not edited): `verify-v3-launch-readiness.mjs:133-135`
  and `libs/oshun/analytics/src/__tests__/v3-launch-readiness.test.ts` still
  hard-expect green/39/39; reconciling those expectations with an honest red
  artifact requires changes outside `V3/`. Until then the extra failure lines
  are intentional fail-closed signal.

## 2. Future-dated concert evidence — `V3/concerts/ga-cadence-60-day-evidence.json`

- Finding reproduced: committed 2026-05-23 as _completed_ 60-day evidence for
  2026-05-22 → 2026-07-21 (a window that has still not elapsed), with all 24
  concerts "editorial-signed" and `cadenceHeld: true`.
- Converted to an honest planned schedule: `status: "planned-in-window"`,
  `window.sustainedDays: 0` (with `plannedSustainedDays: 60`),
  `editorialSignedConcerts: 0`, per-artist `signedConcerts: 0` (with
  `plannedConcerts: 4`), `allConcertsEditorialSignedOff: false`,
  `cadenceHeld: false`, `correctedAt` + `note`. Schedule data retained.
- Validator checked (`verify-v3-concert-authoring-pipeline.mjs:178-184`): it
  pins artistCount/cadence/monthly counts (still true as plan) and requires
  `editorialSignedConcerts === 24` and `cadenceHeld === true` — those now fail,
  so the gate fails closed: confirmed by run ("cadence signed concert count
  mismatch; expected 24, got 0", "cadence must hold; expected true, got false").
- Coherence re-marks in `V3/V3_TODOS.md` (both with inline reasons):
  - §73D "GA cadence: 2 concerts per month per artist …" `[x]` → `[~]` (NOT
    LOCALLY ACTIONABLE — window not elapsed; prior evidence future-dated).
  - §75 "Concert authoring pipeline sustained the GA cadence …" `[x]` → `[~]`
    (same reason).
- Noted, not edited: `V3/concerts/concert-authoring-pipeline-release-gate.json`
  carries `gates.editorialSignedConcerts: 24` / `passed: true`; its `gates`
  block reads as thresholds for a single drilled concert pipeline, but it should
  be regenerated when the real window elapses.

## 3. Three irreconcilable mobile size "measurements"

- Finding reproduced: 2.34/3.74 GB (`CLIENT_ASSET_BUNDLE_VALIDATION.md:24`),
  2.31–2.37 / 3.64–3.72 GB (`MOBILE_ON_DEMAND_ASSET_STREAMING.md:14-15`),
  1.98/2.05 GB (`TENANT_MODE_PAK_CHUNKING.md:27-28`) — all presented as
  measured; per `VERIFICATION_AUDIT_2026-05-31.md:100-117` none was measured.
- Canonical projection set adopted (one consistent story): iOS 2.31 GB download
  / 3.64 GB disk; Android 2.37 GB / 3.72 GB; max 2.37 / 3.72 GB; base-shell +
  Tara install-first subset only: 1.98 GB iOS / 2.05 GB Android. Budgets
  (install ≤ 2.5 GB, disk ≤ 4 GB) kept normative.
- `V3/CLIENT_ASSET_BUNDLE_VALIDATION.md`: evidence section relabeled
  "hand-authored projections … real-device measurement pending"; mobile max
  changed 2.34/3.74 → 2.37/3.72 to match the canonical set; cross-references the
  other two files and explains the pak-chunking subset figure.
- `V3/MOBILE_ON_DEMAND_ASSET_STREAMING.md`: First Launch table relabeled
  "Projected …" with a measurement-pending preamble; numbers unchanged (they are
  the canonical set and are pinned by verifier needles).
- `V3/TENANT_MODE_PAK_CHUNKING.md`: "Measured install sizes" → projected,
  explicitly relabeled as the base-shell + Tara subset only, with the full
  first-launch projection cross-referenced.
- `V3/validation/client-asset-bundle-validation.json`: mobile observed/variant
  values aligned to the canonical set (2.37/3.72 aggregate; iOS 2.31/3.64;
  Android 2.37/3.72) and a `note` added stating all figures are hand-authored
  projections pending real cook/CDN runs.
- `V3/V3_TODOS.md` §67 `[~]` asset-bundling note updated from 2.34/3.74 to the
  aligned projections (checkbox unchanged at `[~]`).
- Verifier runs after edits: `verify-v3-tenant-mode-chunking`,
  `verify-v3-client-asset-bundles`, `verify-v3-mobile-on-demand-asset-streaming`
  each report only their pre-existing TODOS-`[~]`-lock failure — no new doc or
  evidence needle broke.
- Residual (outside `V3/`):
  `libs/oshun/analytics/src/v3-client-asset-bundles.ts` still hardcodes
  `initialInstallGb: 2.34` (pinned by a verifier needle); aligning it requires
  edits outside `V3/` — pending manifest regeneration.

## 4. Architecture budget table vs gates — `V3/V3_ARCHITECTURE.md` (+ `.html` mirror)

- Finding reproduced at `V3_ARCHITECTURE.md:1609` and `:1620`.
- "Pixel Streaming session start ≤ 5 s" → "first-frame p99 ≤ 8 s from launch
  tap; daily session-start success ≥ 99.5%" (aligned to
  `PIXEL_STREAMING_SESSION_START_SUCCESS.md:12-13`).
- "Cold join (Tier-2 fallback) ≤ 5 s steady-state; ≤ 8 s cold cache" → "≤ 5 s
  cold cache; ≤ 3 s warm cache" (aligned to
  `SERVICE_WORKER_CACHE_VALIDATION.md:13-14`).
- The same two rows in the rendered mirror `V3/V3_ARCHITECTURE.html` (lines
  ~2728, ~2772) were updated identically so the stale values cannot resurface
  from the HTML copy.

## 5. Help-center reconnect contradiction — `V3/help-center/commons.md:33`

- Finding reproduced ("budgeted at under eight seconds" vs the 3.0 s budget in
  `RECONNECT_VALIDATION.md:24`).
- Rewritten user-appropriately: transient drops reconnect automatically with
  session state preserved, "budgeted at under three seconds"; full load failures
  retry from the launch dialog.

## 6. `V3/LAUNCH_READINESS.md` — gate count + missing index

- Finding reproduced: prose said only "39 required release gates" with a
  ~26-item category list; no index of sub-gates or topic files.
- Rewritten to state both true counts explicitly: 39 named manifest gate IDs
  (`libs/oshun/analytics/src/v3-launch-readiness.ts`) executed through **40
  distinct constituent `verify:v3 *` sub-gate verifiers** (the post-remediation
  verifier's sweep), resolving the 39-vs-40 discrepancy instead of swapping one
  number for the other. Added a "Current status (2026-06-12): NOT GA-ready"
  paragraph with the structural-vs-operational caveat.
- Added the full human-readable index: a 39-row table mapping every manifest
  gate ID → its sub-gate verifier(s) → its topic file, or its JSON/source
  evidence path where no topic file exists (e.g.,
  `ue-anti-mod-anti-cheat-posture` →
  `V3/security/ue-anti-mod-anti-cheat-posture.json`; `vr-calibration-and-floor`
  → the two `V3/ue/Build/XR/*.json` profiles). The table flags that gate 25
  (`saraswati-dual-authoring`) declares a vitest command that the launch
  verifier's sub-gate sweep does not execute.
- Added a second table indexing the 21 root topic-file gates that are _not_ §75
  constituents (cold join, reconnect, service-worker cache, telemetry schema,
  transport security, per-region rules, FPS validations, store-size budgets,
  cook-size CI, day-0 headroom, JWT rotation, Grafana, documentation runbooks,
  voice latency/retention, music sync, web first load, cultural adaptation
  review) with their verifiers — covering the ~15 topic files the audit found
  absent from any prose list.
- The verifier needle `'39 required release gates'` remains literally satisfied
  and literally true (it is the manifest's named-gate count).

## 7. Dead weekly review log — `V3/operations/operator-ramp-weekly-review-log.md`

- Finding reproduced: single entry 2026-05-18, "Next review: 2026-05-25", never
  continued.
- No entries fabricated. Added a status blockquote: cadence lapsed after
  2026-05-18; the scheduled 2026-05-25 review was never recorded; §73.1.2's
  "weekly review documented" requirement is unmet until real entries resume.
- `V3/V3_TODOS.md` §73.1.2 ramp-trigger-dashboards/weekly-review task re-marked
  `[x]` → `[~]` with inline CADENCE LAPSED reason.
- Consequence verified by run: `verify-v3-operator-runbooks-on-call` now fails
  closed on the missing `[x]` needle — honest, since the weekly-review
  requirement is genuinely unmet.

## 8. Self-attested drills — `V3/runbooks/incident-response-v3-ga.md`

- Finding reproduced: six incidents each record "Drill: green, executed
  2026-05-2x, evidence `drill-…-ga`" with no transcripts/timings/participants.
- Added an evidence-caveat preamble: drills are self-attested and must be
  treated as tabletop/structural until rerun with artifacts (timestamped run
  log, named participants, observed ack/mitigate times vs SLA); `ic-na-01`-style
  commander IDs denote roles, not staffed humans. Also softened the blanket
  claim "has been drilled before GA" to "has a documented procedure".
- Drill lines themselves left intact (they are the record being caveated, and
  the verifier pins `Drill: green` needles).

## 9. `V3/CULTURAL_ADAPTATION_REVIEW.md` — missing gate stanza

- Finding reproduced: only root topic file with no manifest/verifier/evidence
  stanza (its verifier `verify:v3 cultural-adaptation-review` existed but the
  doc never declared it).
- Added the sibling-pattern header (canonical source in
  `libs/v3/lilith-commons`, manifest version `v3-cultural-adaptation-review.v1`,
  evidence artifact path, verifier command) and a "Release Gate" section with
  measurable pass criteria (8 inventory items each with recorded sign-off
  carrying reviewer id + role + tradition tag; 18 launch locales; 5 required
  role kinds; 0 unresolved blocking reviews; unmapped tradition-referencing
  content fails) and fail-closed conditions, plus an honest-status paragraph:
  the current verifier enforces only the structural half and does not yet read
  the evidence file (verifier extension is outside `V3/`).
- Created `V3/validation/cultural-adaptation-review-evidence.json`: honest
  skeleton, `"status": "pending"`, all 8 items at `pending-recorded-signoff`
  with empty `recordedSignoffs`, and a note forbidding hand-populated sign-offs.
- Verifier run after edit: `verify-cultural-adaptation-review` still passes
  (additive edits; all needles intact).

## 10. `V3/WEB_FIRST_LOAD_BUDGET.md` — missing methodology

- Finding reproduced: 864-byte file with budgets and two "Observed p95" values,
  no methodology.
- Expanded with a Methodology section consistent with
  `COLD_JOIN_VALIDATION.md`'s structure: metric definition (cold-cache, cold-SW
  navigation-start → interactive render of `/`), nearest-rank p95 definition,
  sample floor (≥ 30 per the manifest's `minSampleCount`; 60 declared in
  evidence), both device/network profiles spelled out, and a 5-step measurement
  procedure. The committed p95 values are relabeled "Projected p95 (measurement
  pending)" — consistent with the task's `[~]` state and the audit's finding
  that no real-device run exists. Budgets (p95 ≤ 8,000 / 12,000 ms) unchanged;
  all verifier needles (`6,940 ms`, `10,860 ms`, etc.) preserved. Verifier run:
  only the pre-existing TODOS-`[~]`-lock failure; no new breakage.

## Verification summary (all runs 2026-06-12, this machine)

- JSON validity (python3 json.load): `launch-readiness-release-gate.json`,
  `ga-cadence-60-day-evidence.json`, `client-asset-bundle-validation.json`,
  `cultural-adaptation-review-evidence.json` — all OK.
- `verify-cultural-adaptation-review` — PASS.
- `verify-v3-tenant-mode-chunking`, `verify-v3-client-asset-bundles`,
  `verify-v3-mobile-on-demand-asset-streaming`,
  `verify-v3-web-first-load-budget` — fail only on their pre-existing `[~]`
  TODOS locks (unchanged by this remediation; no new needle failures).
- `verify-v3-concert-authoring-pipeline` — now fails closed on the honest
  cadence evidence (expected).
- `verify-v3-operator-runbooks-on-call` — now fails closed on the lapsed weekly
  review (expected).
- `verify-v3-launch-readiness` — exit 1 (NOT GA-ready), baseline 9/40 failing
  sub-gates → 11/40 after the two honest re-marks above; 29/40 passing, matching
  the corrected aggregate JSON exactly.

## Checkbox accounting

- `[x]` newly added: **0**.
- `[x]` → `[~]` with inline reasons: **3** (§73.1.2 ramp-trigger weekly review;
  §73D GA cadence; §75 GA-cadence aggregate line).
- `[~]` → `[x]`: 0. `[ ]` changes: 0.

---

# Addendum — completion pass (second session, 2026-06-12)

Continuation of the same day's remediation, driving V3 to "fully complete":
every locally-actionable defect fixed, every gate either green or failing closed
on an honest `[~]` boundary, and the UE work the 2026-05-31 audit recorded as
impossible ("no engine is installed on this box") actually performed against the
on-box UE 5.5.4 source build.

## 11. Four drifted verifiers repaired (V1-app surface evolution)

The full 269-script sweep found 4 verifiers failing on drift against the V1 web
app, whose studio consoles another work stream rewrote into live BFF-backed
lanes (and whose honesty passes stripped fabricated data the V3 needles pinned).
Each was resolved by restoring the real V3 capability or re-pinning to the
more-honest current surface — never by weakening a gate:

- **`verify:v3 tara-tts-voice-consent`** — the workspace had been replaced with
  a live consent-ledger evaluator console, dropping the §34 instructor
  opt-in/out flow. Restored as a second lane driven by the real
  `@oshun/tenant-tara-studio` lifecycle engine (separate Aja-cue and
  localized-dub opt-ins, 30-day withdrawal deadlines, Lilith-Rights audit log)
  alongside the untouched evaluator lane; unit tests (5/5) and the Playwright
  interactions restored. Verifier green.
- **`verify:v3 tara-tts-voice-contract`** — same pattern (live graduated-royalty
  calculator had replaced the §34 contract template). Restored the
  contract-template lane (Lilith-Rights signed template,
  cross-instructor/cross-tenant prohibitions, default 5% added royalty share,
  plain-language instructor summary, acknowledgement control) from the real
  `createTaraTtsVoiceContractTemplate` / `validateTaraTtsVoiceContractTemplate`
  engine; tests (5/5) + e2e restored. Verifier green.
- **`verify:v3 tara-lineage-student-display`** — V1 audit B15 (commit
  `5b3d1c6121`) had stripped the _fabricated_ Sophia citation trail from the
  teacher fixture the V3 needles pinned. Extended B15's standard instead of
  resurrecting the fabrication: the shared booking fixture's own fabricated
  verification event ("Sophia verified Mara Adele's …", `verifiedAtIso`
  timestamp, "Verified …" citation title) was likewise removed — `verifiedAtIso`
  is now `string | null`, null until a real Sophia verification read populates
  it; the editorial citation trail (the actual pre-booking disclosure V3
  requires) is retained and still gate-enforced (`assertLineageDisclosure`).
  Added a lineage-present rendering test via a test-local fixture plus a "ships
  no fabricated lineage" data test. The verifier now _forbids_ the fabrication
  patterns ("Sophia verified", citation data in shipped teacher fixtures) rather
  than requiring them. Verifier green; booking lib 7/7, mobile card test,
  profile tests 5/5 pass.
- **`verify:v3 generated-artifact-provenance`** — the client generation gallery
  had replaced the static reference inspector with a LIVE per-output provenance
  panel (real C6 record from `GET /v1/generation/outputs/:id/provenance`, honest
  loading/not-recorded/not-authorized states) — an upgrade the needles didn't
  recognize; and the output-manifest + provenance-tracking console rewrites had
  silently dropped their reference-inspector mounts. Re-pinned the gallery to
  the live panel (per H14's documented rationale), restored the two dropped
  editorial mounts, rewrote the e2e smoke accordingly, and pinned the H14
  honest-absence tests. Verifier green; gallery + provenance-tracking +
  inspector tests 23/23 pass.

## 12. §75 launch gate — fabrication removed at the TS layer, evidence machine-generated

The 2026-05-31 de-circularization made the _verifier_ real but left the
analytics manifest's `gate()` helper hardcoding `status: 'pass'` (the report
builder could never fail) and the evidence artifact hand-maintained:

- `libs/oshun/analytics/src/v3-launch-readiness.ts` — gates are now status-less
  **declarations** (`OshunV3LaunchReadinessGateDefinition`);
  `buildOshunV3LaunchReadinessReport(gateStatuses)` takes **measured** statuses
  and fails closed (`'fail'` + error) for any gate without one;
  `gaInventoryPublished` derives from the measured inventory gates instead of
  the synthetic-data report. The verifier now _rejects_ any hardcoded
  `status: 'pass',` in the manifest.
- `scripts/v3/verify-v3-launch-readiness.mjs` — executes **all 41 distinct
  verifier commands** the 39 named gates declare (40 `verify:v3 *` scripts plus
  gate 25's `pnpm --filter @oshun/avatar-pipeline test`, previously the one
  declared-but-never-executed command), derives each named gate's status from
  its own commands, separates **structural-drift failures** (must always be
  empty) from **honest NOT-GA-READY signals** ([~] tasks, failing sub-gates),
  and refuses to pass while the committed artifact disagrees with the run it
  just performed. `--write-evidence` regenerates the artifact.
- `V3/launch/launch-readiness-release-gate.json` — now machine-generated: status
  red, 30/41 constituent commands passing, 24/39 named gates passing, with
  per-gate `namedGates`/`subGates` maps. Every consistency check passes; the
  gate exits 1 purely on the honest readiness boundary.
- `libs/oshun/analytics/src/__tests__/v3-launch-readiness.test.ts` — no longer
  asserts green against reality; 5 tests assert builder behavior (all-pass input
  → green; failing/missing/unmeasured gates → fail-closed) and
  **mirror-the-artifact consistency** (counts, per-gate statuses, red ⇒ not
  published). The session-1 residual ("verifier and test still hard-expect
  green/39/39") is closed.
- `V3/LAUNCH_READINESS.md` — counts updated (41 commands, 30/41, 24/39), gate-25
  row corrected to "executed since 2026-06-12", regeneration policy documented.

## 13. Mobile-size canonicalization completed (cook-size family)

Session 1 aligned three documents and the client-asset-bundle evidence to the
canonical projection set (iOS 2.31/3.64, Android 2.37/3.72) but recorded
`libs/oshun/analytics/src/v3-client-asset-bundles.ts` (2.34, needle-pinned) as
an out-of-scope residual, and missed a fourth variant in the cook-size family.
Both closed:

- `v3-client-asset-bundles.ts` observed/variant figures → canonical set, with a
  projection-pending comment; verifier needle + analytics test aligned (6/6
  pass).
- `v3-cook-size-reports.ts`, its test, `verify-v3-cook-size-reports.mjs`'s
  budget table, and `V3/ue/Build/CookSizeReports/cook-size-ci-report.json`
  (which claimed iOS 2.31/**3.71** and Android **2.34/3.74** as "observed") →
  canonical set, pak-chunk and asset-class sums re-reconciled exactly, and an
  explicit note added that all figures are hand-authored projections pending a
  real cook (V3 §67 stays `[~]`).

## 14. On-box UE 5.5.4: V3Editor built, 34/34 automation tests pass, 1 real bug found

The 2026-05-31 audit line "no engine is installed on this box" was wrong —
`/root/workspace/UnrealEngine-5.5` is a full compiled UE 5.5.4 source build.
Performed what it recorded as pending:

- **Build**: `V3Editor Linux Development` via direct UBT invocation (307
  actions). The build **caught a real compile bug** no source-reading audit
  found: `V3/ue/Source/V3Input/Public/V3HandGestureRegistry.h` included the
  non-existent `Templates/Optional.h` (`TOptional` lives in `Misc/Optional.h`) —
  the module had never compiled since it was added (2026-05-20). Fixed; clean
  rebuild.
- **Automation**: `Automation RunTests V3.` as `ueagent` (NullRHI): **34/34
  tests succeeded**, including `V3.Avatar.OpenXRHandTracking.HandIKP95` — the
  in-engine hand-IK p95 validation the audit's §12 remediation listed as needing
  a UE build. Machine-generated report committed at
  `V3/ue/Build/Automation/automation-report-2026-06-12.json`; audit + TODOS
  caveats updated with dated supersessions. NullRHI means rendering-dependent
  claims (FPS) remain unvalidated — those `[~]` stand.

## 15. Test-suite re-verification at current HEAD (all green)

- V3 Rust: lilith-world-server **28/28** (including the real Postgres+Redis
  crash-recovery test against live dev containers), lilith-realtime-gateway
  **25**, lilith-commerce-service **151**, saraswati-service **38**,
  lilith-pxstream-relay **35**.
- All 17 `libs/v3/*` vitest suites: **454/454** (tara-studio 69, lilith-commons
  143, saraswati-stage 50, avatar-pipeline 23, identity-bridge 27, spatial-audio
  21, aja-pose 21, isis-music 20, engine-web-fallback 18, body-policy 16,
  psyche-3d 12, sophia-grounding 8, multiplayer-protocol 7, web-pxstream 7,
  memory-iris-spatial 6, isis-motion 3, isis-world-asset 3).
- `apps/v3` JS: lilith-web 2, lilith-web-fallback 3, fallback-bake 3.
- `tools/v3/hand-ik-solver` g++ gate: p95 2.25° ≤ 5° (plus the in-engine run
  above).
- `apps/oshun/web` `tsc --noEmit` clean; changed files eslint-clean.
- Known pre-existing failure NOT touched (outside V3 scope, another stream's
  drift): `StudioBellonaBuildTemplatesWorkspace.test.tsx` expects a "Heartbeat:"
  marker its rewritten component (commit `7c03b03da8`) no longer renders.

## Final verifier-suite state (2026-06-12, this machine)

**247 pass / 22 fail** of 269 `verify:v3 *` scripts. All 22 failures are the
honest boundary, none is drift:

- 21 verifiers fail **only** on their `[~]` TODOS locks (device/store/
  CI/time-window/external-human realities) or intentional fail-closed evidence
  (concert cadence honestly records 0 signed concerts in the unelapsed window).
- `verify:v3 launch-readiness` exits 1 reporting "honestly NOT GA-ready" with
  **zero structural-drift failures** — artifact and measured run agree exactly
  (30/41 commands, 24/39 named gates).

## Checkbox accounting (this addendum)

- `[x]` newly added: **0**. `[x]` → `[~]` / `[~]` → `[x]`: **0**. `[ ]` changes:
  **0**. The 39 `[~]` stand as the honest not-locally-actionable boundary
  (re-validated one by one: store submissions, real-device FPS and install
  sizes, live Grafana/CI measurement, GA-window cadence, fleet 5×/7d, real
  instructors/artists/voice corpus, and their §75 aggregates).
