method: correct 'cannot adjudicate against the incumbent' -- it needed a discriminator

The entry said a candidate-vs-incumbent comparison is the wrong shape of
experiment. Too strong. Two iterations later the same comparison adjudicated with
no new oracle, once a structural property was added that says which side is wrong
per disagreement -- does the chosen run contain the settle instant. Control 3072
of 3072; disagreements attributed 1036 of 1036.

Corrected rule: a bare comparison cannot adjudicate because a disagreement is
symmetric; it becomes decisive the moment a property breaks the symmetry per
case. Reach for an oracle when no such property exists, not as the first move.

With the tell that I had one available and did not look: I recorded the residual
as 'ambiguous by construction' and moved on TWICE without asking what would make
it un-ambiguous.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Wuu56cE8vJGTBtn1ppsk8v
This commit is contained in:
sylph-decoder
2026-08-30 12:38:44 +00:00
parent 0d42a1d8d1
commit b6fc3890da
2 changed files with 49 additions and 1 deletions

View File

@@ -2533,6 +2533,27 @@ whatever it returns — the same reason a truncated log and a t=0 render both lo
fine from inside. Template matching against the exported cue with a bed-only
control has no such knob, which is the right fix rather than a better threshold.
## ✅ 2026-08-30 — the residual is explained, and it is entirely `rest()`'s
The 21.9 % I called *"ambiguous by construction"* is not ambiguous.
| | |
|---|---|
| **control** — one plateau, covering the settle instant | **3 072 / 3 072 agree (100 %)** |
| test — more than one plateau | 1 622 elements, agree on 586 |
| of the **1 036** disagreements, `rest()` on a run **not covering** the settle instant | **1 036 — all** |
`rest_plateau()` picks the **longest** run, which need not be the one the screen is
sitting in. **Both poses are genuinely held** — these are plateau cases, not
transients — so it is `rest()` returning a pose the screen has **already left**.
**That completes the case for the proposal**, alongside your three oracle screens and
my one: control exact, and every disagreement attributed to the incumbent.
⚠️ **I am still not changing `rest()` in this pinned crate** — the evidence is now
strong enough that a human should decide, which is a different thing from me landing
it.
[`plateau-choice.txt`](../re/data/plateau-choice.txt)
## ✅ 2026-08-30 — the gap you named is closed: `settle_time()` ITSELF beats `rest()`
You tested the port's settled pose, not `UiBuild::settle_time()`, and flagged the

View File

@@ -1612,7 +1612,9 @@ last keyframe is visible; 87.8 % of all elements end at `a = 0` *because of that
exit ramp*, so the split was near-uninformative. I ran that control only because the
port had just been bitten by it.
## A candidate cannot be adjudicated against the incumbent it is meant to replace
## A candidate cannot be adjudicated against the incumbent **by the comparison alone**
🔴 **This entry was written too strongly and is corrected below.**
Proposing that the settled pose come from the **screen's** settle instant rather
than each element's `rest()`, the obvious validation is: where `rest()` is already
@@ -1628,6 +1630,31 @@ control moved the number and did not change that.
**oracle** — the same two poses scored against a capture of the game, 0.01 % against
0.75 % differing. That is a third party neither rule authored.
### 🔴 …and that conclusion was too strong. What was missing was a DISCRIMINATOR.
Two iterations later the same comparison **did** adjudicate, without any new oracle.
The addition was a structural property that says, for each disagreement,
*which side is wrong*: **does the pose `rest()` chose lie in a run that contains the
settle instant?**
| | |
|---|---|
| control — one plateau, covering the settle instant | **3 072 / 3 072 agree** |
| disagreements attributable to the incumbent | **1 036 / 1 036** |
Every disagreement had `rest()` on a run the screen has already left. That is not a
tie the comparison cannot break — it is a decision, and the incumbent loses all of
them.
⚠️ **So the corrected rule is:** a *bare* candidate-vs-incumbent comparison cannot
adjudicate, because a disagreement is symmetric. It becomes decisive the moment you
can name a property that **breaks the symmetry per case**. Reach for an oracle when
no such property exists — not as the first move.
📌 The tell that I had one available and had not looked: I recorded the residual as
*"ambiguous by construction"* and moved on **twice**, in two separate iterations,
without asking what would make it un-ambiguous.
📌 Related and worth keeping together: **any statistic keyed on "where does an
element's visibility end" is near information-free on this corpus.** A screen's exit
ramp drives every element to `a = 0`, so **12 278 of 13 991 (87.8 %)** end there.