§5 — Docs-campaign rotations checkpoint ledger

Evergreen: model-selection-and-global-refine §5 · driver f-docs-campaign-rotations · prior attempts rotation 1 halted (reviewer outage) · rotation 1 re-run (prose false-positive halt).

This ledger records the stratified rotations run under the LLM-adjudicated banned-prose convergence gate (imas-codex 1c2e166a + fbd6a51b): a grep flags candidate prose, an LLM adjudicator (gpt-5.6-luna, quorum-independent) rules each flag legitimate-or-not, so the gate no longer halts on the "is derived from [related quantity]" and definitional "for example" false positives that stopped the two earlier attempts. One checkpoint row per rotation; the campaign is done when sn run --campaign "prose,audit:latex,audit:spelling,audit:length" --dry-run → total 0.

Rotation ledger

RotationNames (accept)Spend · $/name QuorumProse gateRefine wasteDriftSelection afterVerdict
1 · 2026-07-20
runs 621f60b9+d8d18ee7
200 → 199 (99.5%) $58.44 · $0.292 244 consensus + 42 escalation + 21 single (derived parents, by design); 0 outage-degraded 0 genuine — 3 grep flags all adjudicated legitimate 1.8% / 3.6% 0 (names_composed=0) 1,047 → 889 (−158) ✅ PASS
2 · 2026-07-20
pilot 450, 5 batches
450 → 446 (99.1%) $122.13 · $0.274 520 consensus + 98 escalation + 32 single (derived parents, by design); 0 outage-degraded 0 genuine — 3 grep flags all adjudicated legitimate 2.4% / 0.0% (+ mid-batches <5%) 0 (names_composed=0 ×5) 889 → 502 (−387) ✅ PASS
3 · 2026-07-20
pilot 450, 5 batches
450 → 441 (98%) $151.00 · $0.336 554 consensus + 114 escalation + 32 single (derived parents, by design); 0 outage-degraded 0 genuine — 5 grep flags all adjudicated legitimate 0.0% (both metered batches) 0 (names_composed=0 ×5) 502 → 115 (−387) ✅ PASS
4 · 2026-07-20
pilot 120, 1 batch
91 → 87 (96%) $30.02 · $0.35 110 consensus + 31 escalation + 6 single; 0 outage-degraded 0 genuine — 1 grep flag adjudicated legitimate 0.0% 0 (names_composed=0) 116 → 59 ✅ PASS

Docs campaign COMPLETE — docs-axis defects fully drained (1,047 → 0). A final small rotation (2026-07-20, 9/9 accepted, $2.52) cleared the last prose + latex findings. The prose,audit:latex,audit:spelling,audit:length dry-run still shows a residue, but the only genuine remaining finding is NAME-axis, which a docs campaign can never clear (it refines documentation, not names): 6 audit:spelling (all the same — *_strain_gauge names carrying a British spelling; the catalog is US-spelling throughout, so they are renamed *_strain_gage through the normal compose→review pipeline, never a direct accept). The other 52 audit:length flags were not defects: the arbitrary 70-char length_soft_cap_check was removed as an anti-pattern (imas-codex 7e583184) — a name is as short as its physics requires and no shorter, so length alone never triggers a rename. From rotation 4 on, every refreshed doc also ran on the new no-units prompt, so it is unit-free.

Rotation 5 (final) · 2026-07-20 · pilot 15 → 9 eligible · 9/9 accepted · $2.52 · docs-fixable 9 → 0 (the residual 6 are name-axis). Total docs campaign spend across R1–R5 ≈ $365 for the docs-axis clean-up of a ~2,300-name catalog.

Transient upstream 500s (OpenRouter/Azure, gpt-5.5 refine seat): 1 in rotation 1, 3 in rotation 2 (~0.14% of calls). Each dropped a single refine call, leaving the name's prior accepted doc — self-healing (the name re-enters the next rotation's selection). Root-caused as a retry-classification gap and fixed (imas-codex cbd9cb6f): a 500 is now retryable like a 503, distinct from the 429 path that drives the AIMD governor's concurrency pullback. Live from rotation 3.

Rotation 1 (clean, full) — checkpoint detail

The first docs-campaign rotation to run to completion with no false-positive halt. Both 100-name batches processed; the LLM-adjudicated gate cleared every grep flag as legitimate and the campaign reported Campaign complete: 2 batches, 199/200 docs accepted, re-audit 7 re-quarantined / 193 cleared, prose-adjudicator cleared 3 grep flag(s) as legitimate, spend $58.44.

Gate axisThresholdRotation 1Verdict
Docs acceptance≥ 0.90199/200 = 0.995 (1 refine name lost to a transient upstream 500)✅ PASS
Review quorum intactfull pair per leaf244 quorum_consensus + 42 authoritative_escalation; 21 single_review are derived-parent reviews (single-model by design); 0 degraded by outage✅ PASS
Upstream outages00 — the July-18 quorum-collapse failure mode did not recur✅ PASS
Banned prose reintroduced03 grep flags (coordinate, launched_power_of_lower_hybrid_antenna, particle_current_density) → all adjudicated legitimate definitional prose; 0 genuine✅ PASS
Name-identity drift00 — names_composed=0 both batches; docs-only refine on unchanged ids✅ PASS
Refine claim-race waste< 5%1.8% (batch 1, 1/55) · 3.6% (batch 2, 2/55)✅ PASS
Cost / name≈ $0.29$0.292 ($58.44 / 200) — on the re-baselined premium-pair estimate✅ PASS
Transient call failuresbounded1 / 968 (0.1%) — one OpenRouter/Azure 500 on a single refine call; isolated, not an outage✅ PASS

The LLM-adjudicated gate did its job

The three grep flags the deterministic prose predicate raised were each ruled legitimate by the adjudicator with a reasoned verdict — the exact behaviour the two earlier halts needed:

The deterministic re-audit is the machine check on prose-clean: 193 names cleared their defect predicates and dropped out of the selection; 7 re-quarantined (docs that still trip an audit predicate after refine, carried to a later rotation). Net selection: 1,047 → 889.

Cost note — ceiling re-baselined

Rotation 1 confirmed $0.292/name, matching the premium blind-pair re-baseline (not the retired $0.20 basis the original followup command assumed). Rotations 2+ therefore run with --campaign-cost-ceiling 150 (was 120) so a 450-name rotation (≈$130) completes in one pass with a single checkpoint, keeping the --campaign-batch-cost-cap 50 per-batch guard. ~889 remaining ≈ $260 to empty the selection, inside the lead's accepted premium.

What's next

Rotation 2 (pilot 450) is running. On each rotation: run the orchestrator checkpoint (accept ≥0.90, 0 prose reintroduction, 0 drift, cost/name ≈$0.29, refine waste <5%, quorum intact), append the row above, then re-run the same command — the selection self-prunes. Done when the dry-run total reaches 0; then close expert-review reply open item 1 via f-expert-review-reply-doc. Tracked by f-docs-campaign-rotations.