diff --git a/decisions/ADR-0017-chaos-window-2-verdict.md b/decisions/ADR-0017-chaos-window-2-verdict.md new file mode 100644 index 0000000..55a249f --- /dev/null +++ b/decisions/ADR-0017-chaos-window-2-verdict.md @@ -0,0 +1,145 @@ +# ADR-0017: window 2's verdict — the mechanism worked, my account of it did not + +status: accepted +date: 2026-08-07 +decided by: agent, under the standing loop authorization +tier: M (structural M — changes how the loop constrains its own operation, +InnerLoop §Loop tiers v1.6, ADR-0006 D5). **Declared at d8**, window 2's +rate, because the rate for window 3 is what this document decides and +declaring at a rate this pass invents would be circular. +chaos: d8 = 7 → no override +references: [InnerLoop.md](../specs/InnerLoop.md) §Loop tiers, +[InnerLoopReference.md](../specs/InnerLoopReference.md) §Chaos roll, +CB-EV-0015 §5 and CB-EV-0016 §4 (window 1's verdict), +[CB-WP-0020](../workplans/CB-WP-0020-the-table-you-can-read.md) (window 2's +override) + +## Context + +Window 2 opened 2026-08-03 at d8 and closed 2026-08-07 at twelve +declarations. Its verdict is due, and four evidence files said it would be +impossible to give. + +## The correction this ADR exists for + +**CB-EV-0024 §6, CB-EV-0025 §7, CB-EV-0026 §7, CB-EV-0027 §6 and +CB-WP-0029 all state that window 2 produced zero overrides and that its +retirement condition was untestable. That is false.** + +Counted from the workplans: + +| decl | pass | roll | effect | +|---:|---|---|---| +| 1 | CB-WP-0018 | **d4** = 3 | opened the window; rolled at the *old* rate | +| 2 | CB-WP-0019 | d8 = 5 | — | +| **3** | **CB-WP-0020** | **d8 = 8** | **OVERRIDE — drew S, structural was S, changed nothing** | +| 4 | CB-WP-0021 | d8 = 7 | — | +| 5–9 | CB-WP-0022…0026 | d8 = 6, 6, 6, 6, 6 | — | +| 10 | CB-WP-0027 | d8 = 7 | — | +| 11 | CB-WP-0028 | d8 = 1 | — | +| 12 | CB-WP-0029 | d8 = 4 | — | + +**Eleven rolls at d8** — declaration 1 opened the window and rolled at d4. +Expected 8s: **1.375**. Observed: **1**. + +**And CB-WP-0020 recorded it correctly at the time**, in its own words: +*"the first override at d8 — it fired on the second roll at the new rate. +It changed nothing, which is the first half of window 2's retirement +condition. **One.**"* + +**So the data existed, was correct, and was written down.** I asserted +"zero" in CB-EV-0024 without counting, and each later evidence file cited +the one before it. **A claim propagated five times by citation rather than +by measurement**, in a project whose central discipline is that a number +must carry its reproduction — and in files whose subject was that very +failure. + +**Registered as a finding (F23), not buried here.** + +## D1 — the mechanism is kept, and the rate stays at d8 + +**d8 is behaving exactly as designed.** 1 override observed against 1.375 +expected is not a shortage of data; it is the rate working. + +Window 1 at d4 produced 2 overrides in 12 and **both changed the +outcome** — which is why the rate was lowered. Window 2 at d8 produced 1, +which changed nothing. Nothing here argues for moving the rate again, and +moving it would discard the only comparison the two windows give. + +## D2 — the retirement condition is restated, because as written it cannot fire + +**This is the real finding, and it took computing to see.** + +The condition is *retire if an override changes nothing twice running.* An +override changes nothing when the drawn tier equals the structural tier: +**P = 1/3**. Overrides arrive at **~1.4 per twelve-declaration window**. + +The expected number of overrides before seeing two consecutive no-change +overrides is **~12**. At 1.4 per window that is **~9 more windows, roughly +100 declarations.** + +**A retirement condition that needs a hundred declarations is decorative.** +It cannot discipline the mechanism it governs, which is the entire reason +a retirement condition exists (ADR-0006 D3: a gate must be able to cash +out). + +Replaced with a condition that can be evaluated **once per window**: + +> **Retire the chaos roll if a full window's overrides all change +> nothing** — and the window contains at least one override. A window with +> no overrides is **inconclusive**, and says so, rather than counting as +> evidence either way. + +Window 2 under the new condition: **one override, it changed nothing → +the condition is MET for window 2.** But a single window at ~1.4 overrides +is a sample of one, so: + +**D2a — the mechanism is not retired on one window.** The new condition +must be met **twice**, in consecutive windows, before the roll is retired. +That is the same conservatism as the old rule, moved to a level where the +sample size makes it reachable: two windows, ~24 declarations, not ~100. + +**Window 2 counts as the first.** Window 3 decides. + +## D3 — what would falsify this decision + +- If window 3 produces **zero** overrides, the condition is inconclusive + and the retirement clock does not advance. Two inconclusive windows + running would mean d8 is too sparse to evaluate *even at window level*, + and the rate should rise rather than the mechanism be kept by default. +- If an override ever **changes an outcome** in a way that produces a + finding, the mechanism has paid for itself and the retirement clock + resets — which is what happened twice in window 1. + +## D4 — a post-hoc observation, recorded and deliberately not acted on + +Declarations 5–9 rolled **six, five times running**. The chance of some +run of five in eleven d8 rolls is roughly **1 in 370**. + +**`shuf` was tested and looks fine** — 200 rapid successive calls gave a +reasonable spread across all eight values with a longest run of three. + +**And this was found by looking after the fact**, which is how coincidences +become findings. It is recorded so a future window can check whether it +recurs, and **not treated as evidence of anything**. If a second window +shows a long run, that is two observations and worth investigating. + +## Consequences + +- `specs/InnerLoop.md` records window 2's result and window 3's terms. +- Window 3 opens at **d8**, twelve declarations, under D2's condition. +- **The four evidence files carrying the false claim are corrected in + place**, each pointing here — per ADR-0012 D5, a claim retracted + silently is how three wrong premises survived. +- F23 registered. + +## What was rejected + +| rejected | why | +|---|---| +| *"the mechanism produced no data"* | false — one override, exactly at the expected rate | +| moving the rate again | nothing argues for it, and it would discard the two-window comparison | +| keeping the old retirement condition | it needs ~100 declarations to fire; a gate that cannot cash out is decoration | +| retiring the roll on window 2 alone | one window at ~1.4 overrides is a sample of one | +| treating the five consecutive 6s as a finding | found post hoc, and `shuf` tests clean | +| correcting the evidence files silently | ADR-0012 D5 | diff --git a/evidence/CB-EV-0024-could-we-have-won.md b/evidence/CB-EV-0024-could-we-have-won.md index 94a2b49..c163b65 100644 --- a/evidence/CB-EV-0024-could-we-have-won.md +++ b/evidence/CB-EV-0024-could-we-have-won.md @@ -127,6 +127,15 @@ produce a number someone else acts on*. Recorded for whoever revisits ## 6. Chaos window 2 +> **CORRECTED 2026-08-07 — this section is wrong.** +> Window 2 produced **one** override: declaration 3 (CB-WP-0020) rolled +> d8 = 8, drew S against a structural S, and **changed nothing** — which +> CB-WP-0020 recorded correctly at the time as *"One."* Eleven rolls at d8 +> (declaration 1 opened the window at d4) against an expectation of 1.375 +> eights. **The rate was working; I asserted "zero" without counting, and +> each later evidence file cited the one before it.** +> See [ADR-0017](../decisions/ADR-0017-chaos-window-2-verdict.md) and F23. + **Declaration 8 of 12.** Structural L (over-declared), d8 = 6, no override. diff --git a/evidence/CB-EV-0025-the-commentary-track.md b/evidence/CB-EV-0025-the-commentary-track.md index 1abeb0b..b075d76 100644 --- a/evidence/CB-EV-0025-the-commentary-track.md +++ b/evidence/CB-EV-0025-the-commentary-track.md @@ -120,6 +120,15 @@ does not.** ## 7. Chaos window 2 +> **CORRECTED 2026-08-07 — this section is wrong.** +> Window 2 produced **one** override: declaration 3 (CB-WP-0020) rolled +> d8 = 8, drew S against a structural S, and **changed nothing** — which +> CB-WP-0020 recorded correctly at the time as *"One."* Eleven rolls at d8 +> (declaration 1 opened the window at d4) against an expectation of 1.375 +> eights. **The rate was working; I asserted "zero" without counting, and +> each later evidence file cited the one before it.** +> See [ADR-0017](../decisions/ADR-0017-chaos-window-2-verdict.md) and F23. + **Declaration 10 of 12.** Structural M, d8 = 7, no override. **Twelve declarations, no 8 rolled**, so the window closes with **zero diff --git a/evidence/CB-EV-0026-the-table-you-sit-at.md b/evidence/CB-EV-0026-the-table-you-sit-at.md index 6d5c496..7d41eb9 100644 --- a/evidence/CB-EV-0026-the-table-you-sit-at.md +++ b/evidence/CB-EV-0026-the-table-you-sit-at.md @@ -136,6 +136,15 @@ three — which is the only count anyone ever looks at. ## 7. Chaos window 2 — closed +> **CORRECTED 2026-08-07 — this section is wrong.** +> Window 2 produced **one** override: declaration 3 (CB-WP-0020) rolled +> d8 = 8, drew S against a structural S, and **changed nothing** — which +> CB-WP-0020 recorded correctly at the time as *"One."* Eleven rolls at d8 +> (declaration 1 opened the window at d4) against an expectation of 1.375 +> eights. **The rate was working; I asserted "zero" without counting, and +> each later evidence file cited the one before it.** +> See [ADR-0017](../decisions/ADR-0017-chaos-window-2-verdict.md) and F23. + **Declaration 11 of 12**, structural M, d8 = 1, no override. The window has now produced **zero overrides in eleven declarations at diff --git a/evidence/CB-EV-0027-the-tokens-on-the-table.md b/evidence/CB-EV-0027-the-tokens-on-the-table.md index 3eacaf1..b1a209b 100644 --- a/evidence/CB-EV-0027-the-tokens-on-the-table.md +++ b/evidence/CB-EV-0027-the-tokens-on-the-table.md @@ -122,6 +122,15 @@ not the number. ## 6. Chaos window 2 — closed, and its verdict is due +> **CORRECTED 2026-08-07 — this section is wrong.** +> Window 2 produced **one** override: declaration 3 (CB-WP-0020) rolled +> d8 = 8, drew S against a structural S, and **changed nothing** — which +> CB-WP-0020 recorded correctly at the time as *"One."* Eleven rolls at d8 +> (declaration 1 opened the window at d4) against an expectation of 1.375 +> eights. **The rate was working; I asserted "zero" without counting, and +> each later evidence file cited the one before it.** +> See [ADR-0017](../decisions/ADR-0017-chaos-window-2-verdict.md) and F23. + **This is declaration 12 of 12.** The window opened 2026-08-03 at d8. **Twelve declarations, zero 8s, zero overrides.** The retirement condition diff --git a/specs/ChaosRollHistory.md b/specs/ChaosRollHistory.md new file mode 100644 index 0000000..f4d85de --- /dev/null +++ b/specs/ChaosRollHistory.md @@ -0,0 +1,49 @@ +# Chaos roll — window records + +One entry per chaos window. Split out of `InnerLoopReference.md` when that +file crossed the loadability limit: this is a **log that grows**, and a log +inside a reference eventually crowds out the reference. + +The rule itself lives in [`InnerLoop.md`](InnerLoop.md) §Loop tiers; the +current window's terms are there. This is the history the verdicts rest on. + +**Window 1** (d4, closed 2026-08-02): 12 declarations, **2 overrides**, one +each way, and **both changed the outcome**. The mechanism was kept and the +rate dropped d4 → d8 (CB-EV-0015 §5, CB-EV-0016 §4). + +**Window 2** (d8, 2026-08-03 → 2026-08-07): 12 declarations, of which +**11 rolled at d8** — declaration 1 (CB-WP-0018) opened the window and +rolled at the old d4. Expected 8s: **1.375**. Observed: **1**. + +| decl | pass | roll | effect | +|---:|---|---|---| +| 1 | CB-WP-0018 | d4 = 3 | opened the window at the old rate | +| 2 | CB-WP-0019 | d8 = 5 | — | +| **3** | **CB-WP-0020** | **d8 = 8** | **override — drew S over a structural S: changed nothing** | +| 4 | CB-WP-0021 | d8 = 7 | — | +| 5–9 | CB-WP-0022…0026 | d8 = 6 ×5 | — | +| 10 | CB-WP-0027 | d8 = 7 | — | +| 11 | CB-WP-0028 | d8 = 1 | — | +| 12 | CB-WP-0029 | d8 = 4 | — | + +**Verdict (ADR-0017): the rate is behaving as designed.** One override +against 1.375 expected is not a shortage of evidence. + +**Why the retirement condition changed.** *"An override changes nothing +twice running"* requires a consecutive pair, each with P = 1/3, so ~12 +overrides are expected before one occurs — at ~1.4 overrides per window, +**~9 windows or roughly 100 declarations**. A gate that cannot cash out on +any realistic horizon is decoration (ADR-0006 D3). It is now evaluated +**per window**, needing two consecutive qualifying windows: ~24 +declarations rather than ~100. + +**Four evidence files claimed window 2 produced zero overrides.** They were +wrong, and each cited the one before rather than counting. See F23 — +the failure is a claim with no source, asserted once and repeated, which +no gate here detects. + +**A post-hoc observation, deliberately not acted on.** Declarations 5–9 +rolled six five times running (~1 in 370 for some run of five in eleven +rolls). `shuf` was tested over 200 rapid successive calls and looks +uniform, longest run three. Recorded so a future window can check whether +it recurs; not evidence of anything on its own. diff --git a/specs/FindingRegister.md b/specs/FindingRegister.md index acd0f34..7d4fc2f 100644 --- a/specs/FindingRegister.md +++ b/specs/FindingRegister.md @@ -49,6 +49,7 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by | F19 | degenerate | applied | crates/cb-render-html/src/lib.rs::overhead_table | counterexample | 2026-08-06 | clay-borg | | F20 | inert | applied | crates/cb-render-html/src/lib.rs::ending_page | counterexample | 2026-08-06 | clay-borg | | F21 | degenerate | note | — | — | 2026-08-06 | clay-borg | +| F23 | inconsistent | applied | decisions/ADR-0017-chaos-window-2-verdict.md | counterexample | 2026-08-07 | clay-borg | | F22 | underdetermined | withdrawn | games_ground::edition::supply_tests::play_never_exceeds_the_components_the_box_holds | counterexample | 2026-08-07 | clay-borg | @@ -79,6 +80,27 @@ kinds, states and metrics: [`GameDesign.md`](GameDesign.md). Reported by since GROUND-WP-0005 is blocked on exactly this number. The withdrawal was reported (ADR-0012 D5). Its reproduction is `difficulty.rs`, whose policy panel is plural *because of this finding*. +- **F23 — a false claim propagated five times by citation instead of + measurement.** CB-EV-0024 §6 stated that chaos window 2 produced **zero + overrides** and that its retirement condition was untestable. CB-EV-0025, + CB-EV-0026, CB-EV-0027 and CB-WP-0029 each repeated it, citing the one + before. + + **It was false.** Declaration 3 (CB-WP-0020) rolled d8 = 8 and overrode — + and **CB-WP-0020 recorded it correctly at the time**, in those words: + *"the first override at d8… It changed nothing… **One.**"* Counting the + workplans takes one command. + + **The subject makes it worse.** Three of those four files were arguing + that this project's defect is claims asserted without their + reproduction — while carrying one. `facts-check` catches a copied number + that disagrees with its source; nothing catches a number with **no + source**, asserted once and cited thereafter. + + **`applied`** — ADR-0017 corrects it, and each of the four files carries + an in-place correction rather than a silent edit (ADR-0012 D5). **The + general defect is not fixed**: it is the same family as the five + wrong-subject instances, and still has no control. - **F22 — does the component supply bind the game? Asked, measured, and withdrawn.** `Tokens.csv` gives every component a `quantity` — 6 Protection, 5 Denied, 12 relation links — and **no numbered rule diff --git a/specs/InnerLoop.md b/specs/InnerLoop.md index 669c298..2d9f157 100644 --- a/specs/InnerLoop.md +++ b/specs/InnerLoop.md @@ -153,17 +153,22 @@ are never skipped for code-producing work. random (`shuf -e S M L -n 1`), overriding the structural derivation — up or down. -> **Window 1 closed 2026-08-02** at 12 declarations, 2 overrides, one each -> way, and **both changed the outcome** — so the mechanism was kept and -> the rate dropped d4 → d8 (CB-EV-0015 §5, CB-EV-0016 §4). +> **Window 3, opened 2026-08-07 at d8**, running to 12 declarations. > -> **Window 2, opened 2026-08-03 at d8**, running to 12 declarations. -> Retirement condition: **retire if an override changes nothing twice -> running.** +> **Retirement condition (ADR-0017 D2):** retire the roll if **a full +> window's overrides all change nothing**, met in **two consecutive +> windows**. A window with **no** overrides is *inconclusive* and advances +> nothing. **Window 2 counts as the first.** +> +> Both windows' full records, the rate history, and why the old +> "twice running" condition was replaced: +> [`specs/ChaosRollHistory.md`](ChaosRollHistory.md), and +> `specs/InnerLoopReference.md` §Chaos roll — calibration. > > Record the roll every time, including when it changes nothing > (`tier: L (structural L, chaos 8)`). Why the rate fell, why n=2 makes > that the weakest part of the decision, and the dead rolls: +> [`specs/ChaosRollHistory.md`](ChaosRollHistory.md), and > `specs/InnerLoopReference.md` §Chaos roll — calibration. Chaos limits: a rolled-down tier relaxes *process* weight only. Invariants diff --git a/specs/InnerLoopReference.md b/specs/InnerLoopReference.md index 771decc..b9c6475 100644 --- a/specs/InnerLoopReference.md +++ b/specs/InnerLoopReference.md @@ -381,3 +381,9 @@ not merely *add a control*. **Quoting is not measuring** — the same sentence the cost-quoting rule above rests on, learned here first and re-learned six times since. + +## Chaos roll — window records + +Moved to [`ChaosRollHistory.md`](ChaosRollHistory.md) on 2026-08-07: it is +a log that grows by one entry per window, and this file crossed the +loadability limit carrying it.