ADR-0021: the chaos roll is retired, and the condition that retired it was wrong
Some checks failed
ci / check (push) Failing after 4s

The condition is met and the tally was verified rather than recalled.
ADR-0017 D2 named window 3 as the decider; windows 2 and 3 each produced
exactly one override and each changed nothing. Every roll in window 3 was
cross-checked against the workplan that made it, because the last time
this project tallied chaos rolls from memory it was wrong and asserted the
wrong figure four times (F23). All twelve agree.

But meeting the condition is not evidence. P(an override changes nothing)
is 1/3, and each window had exactly one override, so the condition fires
on a 1/9 coincidence. ADR-0017 restated it to be REACHABLE and made it
weak in the process; reachability was checked and discriminating power was
not.

Worse, it measures the wrong subject. It asks whether an override changed
the tier; the question is whether changing the tier helped. Under it, a
die that always changed the tier could never be retired however useless
its changes were.

The real ground is stronger. Four overrides across roughly forty
declarations, and the mechanism's value has never once been demonstrated.
The one substantive intervention dropped CB-WP-0011 from a structural L to
S, and that work then needed CB-WP-0016 and CB-WP-0017 to fix defects a
human found by playing. Not offered as causation — a tier is process
weight, not a guarantee — but it is the only evidence we have about an
override's consequences and it points the wrong way.

And the purpose has no live evidence of need: 17 M, 11 S, 4 L across every
workplan, with the only two structural/declared mismatches being the
window-1 overrides themselves. Tier declaration has not ossified.

So: retired, with nothing replacing it. Adding a successor to guard
against ossification that has not occurred would invent a gate for an
instance we do not have. The revival trigger is stated: tiers collapsing
toward one value, or a pass declaring below its structural tier to dodge a
review.

InnerLoop loses the chaos paragraph, loop-lint loses the chaos-recorded
check — a check that outlives its rule becomes an obstruction — and its
self-test now asserts the opposite: a note with no roll must pass.
ChaosRollHistory is closed. Window 4 ends incomplete at four declarations,
the last of which is this one, rolled because the rule was still in force.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
tegwick 2026-08-08 15:51:52 +02:00
parent b0001b5760
commit 05d1a9aada
4 changed files with 183 additions and 46 deletions

View file

@ -0,0 +1,127 @@
# ADR-0021: the chaos roll is retired — and the condition that retired it was wrong
status: accepted
date: 2026-08-08
decided by: agent, under the standing loop authorization
tier: M (changes how the loop constrains its own operation — ADR-0006 D5).
chaos d8 = 7 → no override. **Declaration 4 of chaos window 4, and the
last chaos roll this project will make.**
references: [ADR-0006](ADR-0006-the-inner-loop.md),
[ADR-0017](ADR-0017-chaos-window-2-verdict.md),
[`specs/ChaosRollHistory.md`](../specs/ChaosRollHistory.md),
[`specs/InnerLoop.md`](../specs/InnerLoop.md) §Loop tiers
## D1 — the condition is met, and the tally was verified rather than recalled
ADR-0017 D2: *retire if a full window's overrides all change nothing, and
the window contains at least one override* — met in **two consecutive
windows**. D2a: *"Window 2 counts as the first. Window 3 decides."*
| window | declarations | overrides | all changed nothing? |
|---|---:|---:|---|
| 2 | 12 | 1 (CB-WP-0020, d8=8, drew S over structural S) | **yes** |
| 3 | 12 | 1 (CB-WP-0038, d8=8, drew L over structural L) | **yes** |
**Two consecutive. The condition is met.**
**Every roll was cross-checked against the workplan that made it**, not
read off the history table — because the last time this project tallied
chaos rolls from memory it was wrong, and asserted the wrong figure four
times (F23). All twelve of window 3 agree.
## D2 — and meeting it is not evidence
**P(an override changes nothing) = 1/3.** Each of windows 2 and 3 had
**exactly one** override. So:
> **P(the condition fires | one override per window) = 1/3 × 1/3 = 1/9.**
**An 11% coincidence is not a finding.** The condition, restated in
ADR-0017 D2 to be *reachable*, became reachable by becoming weak — and
that trade was made without computing this number. Reachability was
checked; discriminating power was not.
## D3 — worse: it measures the wrong subject
**The condition asks whether an override changed the tier. The question
is whether changing the tier helped.**
Those are different subjects, which is the family
[`Taxonomy.md`](../specs/Taxonomy.md) §2.2 exists to name. An override that
changes nothing tells you the die landed on the tier you already had; it
says nothing about whether the mechanism is worth running. Under this
condition a die that *always* changed the tier — maximally active — could
never be retired, however useless its changes were.
## D4 — the real ground for retirement, which is stronger
Four overrides across roughly forty declarations:
| override | effect | benefit |
|---|---|---|
| CB-WP-0011 | structural **L → declared S** | **none recorded** |
| CB-WP-0017 | structural **S → declared M** | none recorded |
| CB-WP-0020 | drew S over structural S | changed nothing |
| CB-WP-0038 | drew L over structural L | changed nothing |
> **The mechanism has acted four times in the project's life and its value
> has never once been demonstrated.**
**And the one substantive intervention is not encouraging.** CB-WP-0011
was the inspectable-table pass; the roll dropped a structural **L** to
**S**, and the resulting work needed **two follow-up passes** — CB-WP-0016
(the drag was broken) and CB-WP-0017 (the page was wrong about which moves
exist) — to fix defects a human found by playing.
**That is not proof of causation and is not offered as such.** A tier is
process weight, not a guarantee, and both defects were the kind INTENT
says only human verification finds. **But it is the only evidence we have
about an override's consequences, and it points the wrong way.**
## D5 — the purpose has no live evidence of need
The roll exists so tier declaration cannot ossify. Measured across every
workplan:
**17 M · 11 S · 4 L**
**That is a real spread**, and only two passes in the project's history
declared a tier different from their structural one — **both of them the
window-1 overrides.** Left to itself, tier declaration has varied on the
structure, which is what it is supposed to do.
## D6 — retired, and what replaces it
**The chaos roll is retired.** No roll, no window, no `chaos` line in a
workplan's tier block. Existing records keep theirs — they are history.
**Nothing replaces it.** Adding a successor mechanism to guard against
ossification that has not occurred would be inventing a gate for an
instance we do not have (GameDesign §2).
**What stays** is the structural derivation and its trigger table, which
is the part that was doing the work.
**The trigger for revisiting**: if declared tiers collapse toward a single
value, or if a pass is found to have declared a tier below its structural
one to avoid a review, ossification is real and this decision was wrong.
## Consequences
- `InnerLoop.md` §Loop tiers loses the chaos paragraph; `loop-lint`'s
`chaos-recorded` check must go with it, or it fails every future
workplan.
- `ChaosRollHistory.md` becomes a **closed log**, and says so.
- **Window 4 ends at four declarations**, incomplete, which is correct: the
condition was met at the end of window 3 and waiting out a window to
satisfy a symmetry nobody requires would be ceremony.
## What was rejected
| rejected | why |
|---|---|
| retire on the strength of the condition | it fires on a 1/9 coincidence and measures the wrong subject (D2, D3) |
| keep the roll because the condition is weak | the condition being weak is not an argument for the mechanism; D4 and D5 are, and they point at retirement |
| keep it as a diagnostic, unrolled | a roll nobody acts on is a ritual with a log file |
| replace it with a value-measuring condition | it would need overrides to measure, and retirement stops producing them. **The honest sequence is retire, then watch D6's trigger** |
| wait for window 4 to close | ceremony; the condition was met at the end of window 3 |