# V1 SOTA Audit Remediation Ledger — 2026-07-02

Source: `V1_AUTONOMOUS_CONTENT_SOTA_AUDIT_2026-07-02.md`. Rules: one task at a
time; `[x]` only after the code is read, built, and its tests pass in this
conversation; adversarial stub scan before every commit. Data/creds-gated items
are delivered as real algorithms behind honest fail-loud seams (never fabricated
results) and marked `(seam)`.

## Phase 1 — P0 verified defects

- [x] H1 restart double-learning: persist/restore the director's learned-item
      set through the plane snapshot (`director.ts:218`,
      `plane-persistence.ts:42-57`) — director
      `snapshotLearnedItemIds`/`restoreLearnedItemIds`, snapshot field +
      resolved-status fallback for pre-migration snapshots; regression test
      asserts arms unchanged after restore+cycle (e2e suite 5/5)
- [x] H2 heterogeneous judge panel: `resolveJudgePanelModels` assigns distinct
      models (Opus/Sonnet/Fable) per member with degraded-diversity auditing;
      wired into content-service main.ts buildJudgePanel (10 routing tests)
- [x] H3 injection fencing on all judge prompts (judge-engine + player-proxy) +
      judge-red-team regression suite (cqj committed)
- [x] H4 job-drain double-execution race: re-check `queued` per job before
      executing (`jobs-route.ts:142-159`); gallery cataloging verified already
      idempotent (`OutputGalleryAdminStore.addRecord` replaces on outputId) —
      jobs-route suite 17/17
- [x] H5 bind publish-readiness gates into the autonomous editorial publisher
      (real inputs only — Lilith review, authoring evaluation, Isis gate ids for
      media, rights/provenance from the catalog)
- [x] M1 feedback dedupe per (user, item): stable `fb-{item}-{user}` id +
      learner-level `recordedFeedbackIds` set (snapshotted, restore-safe) +
      route 409 `feedback_already_recorded`; learner + route tests green
- [x] M2 failed-topic cooldown keyed to resolution time (max history
      `atUnixSeconds`), not submission time; discriminating 7.5d-late-rejection
      test added (director suite 22/22)
- [x] M3 replace additive calibration EMA with per-category Platt/isotonic
      scaling once observations ≥ N (EMA as cold-start) (`learner.ts:152-190`)
- [x] M4 gate-retry parks the attempt-0 judged champion when the retry produces
      nothing (break to park path); `completeVariantCount` now accumulates
      across attempts like `variantCount`; test added
- [x] M5 LLM-synthesized topics sanitized at admission via `sanitizeTopic`
      (single-line, 160-char cap); hostile-topic test added
- [x] M6 slop detector apostrophe/quote normalization (U+2019 etc.) (`slop.ts`)
- [x] M7 run-id collision: unique run ids, never overwrite persisted run records
      (`content-pipeline-service.ts:95-97`)
- [x] M8 compute ceiling + budget meter wiring on the content-service HTTP path
      (`http-router.ts`, dispatcher; cap `candidateCount`, validate
      `contentType`)
- [x] M9 grounding gate configured in deployed mount: real
      `createBriefCanonGroundingFactory` (declarative-claim extraction +
      lexical-support retriever over brief canon, documented approximation)
      wired into createDurableContentService (5 tests)
- [x] M10 external-benchmark honesty: stop labeling authored fixtures with real
      dataset identities/scores (`external-benchmark.ts:152-216`)
- [x] M11 best-draft (argmax) tracking in `critique-revise.ts` and `@oshun/ai`
      reflexion
- [x] M12 deterministic critic must not read grading references from the
      artifact under test (move to `node.params`/independent measurement)
      (`default-critic.ts`)
- [x] M13 orchestrator governance: pre-dispatch spend recording incl.
      failures/revisions, honor `options.signal` in the dispatch loop
      (`router.ts`, `governance.ts`)
- [x] M14 gut residual fabrication stubs in `libs/shared/ai/src/prompts/`
      (`testing.ts`, `advanced/index.ts`) to fail-loud
- [x] M15 media dead-path honesty: planner advertises only domains whose outputs
      can actually release; stop paying for guaranteed-discard cycles
      (`server.ts:1158-1164`, adapters)
- [x] M16 route `needs_review` media into the plane's review queue instead of
      throwing (`generation-producer.ts:52-57`)
- [x] M17 domain-routed critics: media domains get media-capable critics, never
      the text-LLM-over-JSON critic (`create-plane.ts:125`)
- [x] M18 `analysis` release exemption must be content-based, not URL-based
      (`release-gate.ts:132-138`)
- [x] M19 validate executor requests (no unvalidated casts; admin raw-enqueue
      schema) + fix provider attribution labels (`image-executor.ts:61,67`)
- [x] M20 wire gold-set consumption: scheduled assembly → holdout → panel
      re-score → κ report feeding per-category calibration
- [x] M21 wire editorial calendar + plane `planCalendar` into the publish path
      (scheduled publishing, embargo law)
- [x] M22 voice-disclosure gate: `synthesis-disclosure` canonical gate blocks
      synthetic-voice audio/video lacking an audible AI-voice disclosure
      (backward-compat optional measurement fields); isis suite 410/410 matching
      the release-gate-model header contract
- [x] M23 McNemar paired test for champion-challenger readiness + durable
      editorial records/transition history

## Phase 2 — LOW defects

- [x] L1 pointwise variance at a fixed operating point (no temperature ladder
      conflation) (`judge-engine.ts:220-224`)
- [x] L2 κ/Pearson fail loud on mismatched arrays (`calibration.ts`)
- [x] L3 drift guards: n≥2 windows for Welch z; editorial drift `delta===0` not
      "better" (`drift.ts`, `drift-detection.ts`)
- [x] L4 `structured-output.ts` honors `stopReason` (truncation → raise
      maxTokens or fail with the real reason)
- [x] L5 plan schema `maxItems` + bounded default governance (`plan-schema.ts`,
      `router.ts`)
- [x] L6 `formattingDensity` must not count plain newlines
      (`reward-model.ts:82-88`)
- [x] L7 review-queue pruning/compaction + snapshot size bounds
      (`review-queue.ts`, `plane-persistence.ts`)
- [x] L8 `aggregateFeedback` homogeneity check (`feedback.ts:50-64`)
- [x] L9 rubric-version pinning into `GateVerdict`, editorial history, and gold
      entries (also R21 prerequisite)
- [x] L10 per-content-type editorial checklists bound and consumed
      (`EditorialChecklistEntry`)

## Phase 3 — Theme 1: media quality plane

- [x] R1 VLM-as-judge for images feeding `qualityAggregate` + domain-routed
      `criticFor` (OpenRouter multimodal; fail-loud without creds)
- [x] R2 cross-modal consistency judge (VLM caption/VQA + embedding cosine vs
      brief); media-aware compellingness judge
- [x] R3 audio probes: ffmpeg ebur128/silencedetect/ffprobe duration on
      narration + music; independent `measuredLufs` (ASR WER: seam)
- [x] R4 video probes: ffprobe duration/resolution, frame sampling → existing
      image moderation, SSIM flicker variance
- [x] R5 media best-of-N with seed control (K jobs, VLM selection, losers
      cataloged unreleased; `seed` threaded to providers)
- [x] R6 structured media prompts: per-stylePreset style-guide table + optional
      LLM prompt-director pass
- [x] R7 provider quality routing: per-kind registry, measured
      win-rate/latency/cost, weighted routing + fallback (stats sink now)
- [x] R8 caption/dub faithfulness seam (ASR → back-translation similarity)
      (seam)

## Phase 4 — Theme 2: learning-loop back half

- [x] R9 preference-pair persistence (tournament + best-of-N + human verdicts →
      JSONL export, DPO/RM-ready)
- [x] R10 gold-set → judge-calibration job (assemble, holdout, re-score, κ,
      recalibrate bars)
- [x] R11 human post-edit diff channel into the preference learner
- [x] R12 per-dimension human verdicts (queue API + per-dimension calibration)
- [x] R13 Platt/isotonic calibration (= M3)
- [x] R14 engagement-outcome attribution poller binding (seam over a metrics
      source interface)

## Phase 5 — Theme 3: judge robustness

- [x] R15 heterogeneous panels (= H2) + κ-weighted aggregation option
- [x] R16 injection fencing + red-team suite (= H3)
- [x] R17 production judging `samples ≥ 2` + fixed-operating-point variance (=
      L1) in the BFF plane wiring
- [x] R18 cost-aware cascaded judging (cheap screen → full panel near
      threshold/variance)
- [x] R19 exemplar-anchored judging (scored gold exemplars in rubric prompts);
      optional retrieval-augmented judging seam
- [x] R20 reconciliation/debate round before human escalation
- [x] R21 rubric-version regression gating (champion-challenger over judge
      versions vs gold benchmark) + version pinning (= L9)

## Phase 6 — Theme 4: production-time search

- [x] R22 plan-quality judge before execution (reject/re-plan below bar)
- [x] R23 multi-plan sampling + argmax selection
- [x] R24 node-level best-of-N + best-draft tracking (= M11)
- [x] R25 dimension-targeted critics (per-dimension scores + evidence +
      compare-to-prior) + full critique trajectory threading
- [x] R26 retrieval tools for writer nodes (AgentLoop-backed generator over
      Sophia BM25; verifiable citations)
- [x] R27 replanning on node failure (`repairPlan`, `requireMetDependencies`
      policy)
- [x] R28 parallel frontier execution + context budgeting
      (`summarizeDependencies`) + content-hash cache + `seedArtifacts` resume
- [x] R29 per-node model routing (`modelFor(node)`)

## Phase 7 — Theme 5: ideation & portfolio

- [x] R30 multi-candidate ideation (N synthesizer samples, dedupe, union)
- [x] R31 semantic embedding novelty seam (injectable `TopicEmbedder`; CPU
      MiniLM binding where runnable)
- [x] R32 OPRO-style rejection-reason mining → rubric/brief-template steering
      suggestions
- [x] R33 cross-cycle per-category style memos (versioned, injected into briefs)
- [x] R34 persona/audience simulation judges per category audience card
- [x] R35 uncertainty-aware compute routing (escalate low-confidence,
      per-category stakes scaling)
- [x] R36 exploration floor (min-trial quota) + contextual bandit (LinTS behind
      `CategorySampler`, Beta cold-start fallback)
- [x] R37 wire `planCalendar` + week-level angle-mix variety objective (= M21
      plane side)

## Phase 8 — Theme 6: editorial & post-publish

- [x] R38 bind publish-readiness pipeline + per-type checklists (= H5, L10)
- [x] R39 A/B holdout publishing machinery (segment selector, paired McNemar
      readiness; live traffic = deploy-bound) (seam)
- [x] R40 staleness re-review sweeps over published artifacts (recurrence reuse)
- [x] R41 inter-rater reliability: sampled dual-assignment + per-pair κ
      scorecards (real κ math now; dual reviews accrue at deploy)
- [x] R42 post-publish quality monitoring seam (corrections/complaints/
      engagement → ReviewOutcome + auto re-review entry)
