Y: outcomes -- four predictions held, one was wrong in its framing and the correction is the result

This commit is contained in:
lane Y 2026-09-08 11:37:06 -04:00
parent a98ae6db5b
commit 655034fb51

View file

@ -131,3 +131,70 @@ This lane does not fix it: the file is another lane's. It is measured and report
**Falsification.** If no `maxIncome` in the int32 range separates the two constants, the correction
is real but inert and should be recorded as such.
---
# Outcomes
Written after the run, against the predictions above. Nothing above was edited.
## P-Y1 — held exactly
16 words on both calibrated pairs, all attributed to the trade-raid phase, `left` 379 and 359. The
player vector read 8 on both, as the wire says. The falsification table's other branches did not
fire: not 8 (the NPC gate was open), not 24 (the refugee gate was not).
## P-Y2 — held exactly
Residual 4 on the turn-4→5 pair and 2 on the turn-5→6 pair, matching the per-call-site split
(2 detection + 2 research, and 2 detection + 0 research). The state block is byte-identical in both
cases and only `left` differs, so the two instruments disagree about nothing.
**The answer to the milestone question is therefore "no", by 4 words and by 2.**
One thing this pair of numbers does *not* establish, and the prediction should have said so: the
residual is a subtraction, so it confirms the **sum** of the modelled and unmodelled terms, not each
term separately. The static bound is what carries the 16; this arithmetic corroborates it.
## P-Y3 — held
480 fields over 80 player-records across 11 saves, 0 mismatches, 0 dangling owned-system ids. The
same check runs inside every turn and is printed as a phase note.
## P-Y4 — held, and the shape of the result is more useful than the claim
`--commit-blocked` closes 29 and regresses 17 on the first reference pair, and closes 13 and
regresses 19 on the second. Every regressed leaf is in the unmodelled set: `almem` x8, `inc` x3,
`sav` x3, three of the ship census. Nothing outside it moved.
So "committing makes it worse" is **not** what the measurement says: on the first pair the turnstats
subsystem is net +7 and on the second it is net -9. The record is right in six fields and wrong in
five, and which way the net falls depends on the save. The phase stays blocked, and it becomes a
clean +24 the moment the alliance mask and the budget land.
## P-Y5 — WRONG in its framing, and the correction is the result
The prediction said the two constants differ "for some maxIncome reachable in a real game" and that
the smallest such value could be found by a linear scan. The scan found it immediately, and the
framing -- inherited from the phrase "one ulp out on large empires" -- was the wrong picture
entirely.
`trunc(m / -0.15)` and `trunc(m / -0.15000000596046448)` differ for **every m divisible by 3**: 1000
of the first 3000 integers, smallest `m = 3` giving -20 against -19. It is not precision loss at
scale. `m / 0.15` is an exact integer whenever 3 divides m, and the two constants straddle it.
Measured on the corpus by inverting the stored limit: **5 of 25 player-records would get a different
stored value from the engine's current constant than the game wrote.** The defect is live, it is a
whole unit rather than an ulp, and it is one third of all inputs rather than a tail.
The file belongs to another lane in flight, so it is reported and not fixed here.
## An unpredicted result: the blocked input is recoverable from every save
The elimination limit is injective in the maximum-income sum it is computed from (slope about 6.67),
so it inverts. Every save in the corpus therefore states, for every player that owns anything, the
exact sum of its systems' maximum money outputs -- which is the term that blocks `ComputeBudget`,
both savings phases, the bankruptcy limits and five fields of the turn record.
That was not predicted and is the most useful thing this lane found. The same inversion recovers the
protection-limit factor as 3.3 from the saves, independently of the game data files.