board: lane G3 growth is clamp-decided not capacity-gated; a live-verified module was wrong on widened float literals

This commit is contained in:
alex 2026-09-08 15:57:33 -04:00
parent 63347c7c17
commit c0c685d07f

View file

@ -298,3 +298,8 @@ Status flow: `backlog → in-progress → mapped → verified` (or `blocked`).
| tail phases post NO events (measured negative) | control-flow | verified | high | 100% | 2026-09-08 | Confirming lane K from the other side: T18/T21/T32 post nothing on either reference pair - and this is a MEASURED negative, not an absence of evidence, since other corpus saves DO exercise them. No tail phase manufactures a turn's events |
| standalone_report gains --engine-arg | meta | verified | high | 100% | 2026-09-08 | Lane EV added a repeatable `--engine-arg` pass-through so a lane can feed the standalone the OPERATOR INPUTS A SAVE DOES NOT CARRY (e.g. --ai-player N, --data DIR) instead of hard-coding them; every run now records what it was given in the header AND in status.json. That is the right shape - the provenance travels with the number |
| headline number: default 131, with operator inputs 127 | meta | verified | high | 100% | 2026-09-08 | Worth keeping distinct rather than quoting the better one. `standalone_report.py` with NO flags reports **209 -> 131, closed 78** - that is the number for "a save and nothing else". Lane EV's P11 closes 4 more (127) but ONLY when handed `--data DIR` and `--ai-player N`, operator inputs the save does not carry, because a save does not record which players are AI-controlled (lane AI3: ServerPlayer+0xf9/+0xfa sit in a HOLE in the serialised layout). Both numbers are real; the dashboard tracks the default because it is the one that needs no human. Lane EV's --engine-arg pass-through records in status.json exactly what a run was given |
| civilian growth: MY BRIEF'S PREMISE WAS WRONG | subsystems | verified | high | 95% | 2026-09-08 | Lane G3. **+3 closed on each pair, 0 regressed**, by default with no flags (both colonies' Pop2/PopG/PopC and Player[16]/Sav); pair 1 131 -> 128, pair 2 72 -> 69. With --commit-blocked=T31 --ai-player 1 it is 83/0 and 41/0 - the extra two per pair being the human's and the AI's BnkEl, which T31 could not close before. **GROWTH IS NOT GATED ON IMPERIAL CARRYING CAPACITY** as I briefed: the whole system's civilian delta is CLAMPED TO 20,000,000 (POPTYPE[1]+0x08, an int64 literal in the executable), the uncapped delta is 150,000,005 (7.5x) and the capacity headroom 500,000,000 (25x), **so the clamp decides the value and the pass commits with NO TUNING TABLE AT ALL**. PRECISION BY CONSEQUENCE: the deciding float is neither the growth curve nor the capacity but the rescale `trunc(applied x (clamped/total))` - the product's error exceeds half an ulp of 20,000,000, so landing exactly on the cap is A MEASUREMENT, NOT A THEOREM. The growth fraction, which everyone looks at first, is the one term that CANNOT matter here: any value in [0.04, 1.0] gives the same answer. Also pinned the imperial capacity at exactly Size x 1e8 FROM THE CORPUS ALONE via two independent behaviours of one colony over three turns |
| A LIVE-VERIFIED MODULE WAS WRONG (rule 23) | verify | verified | high | 100% | 2026-09-08 | THE MOST IMPORTANT FINDING OF THE ROUND. Lane G3 predicted Sav closes on both pairs; it closed on pair 2 and came out **ONE MONEY HIGH on pair 1**. Growth had closed 596 of the 596-money gap - the residual was **ComputeBudget's interest literals, which are WIDENED FLOATS in the image** ((double)0.01f at 0x009e31c0, (double)0.15f at 0x009ed188) and then truncated, so a treasury of exactly 50,000 earns **499, not 500**. The engine used exact decimals; sixteen hand-computed test expectations moved by one. **That module had been compared on 4,437 LIVE CALLS WITH 0 DIVERGENCES and missed it, because it presented only 20 DISTINCT STATES, NONE ON A BOUNDARY** - exactly the thin-coverage caveat lane R recorded against it at the time, now vindicated by a different lane doing arithmetic the compare never exercised. Now rule 23 |
| Ship::RepairCost read; a stronger negative | objects | verified | high | 100% | 2026-09-08 | `max(0, design+0xcc - (ConCap + (flag ? design+0xd0 : 0)))`, plain integers; Ship::ApplyRepair 0x008151c0 names the fields - **ConCap is INVESTED CONSTRUCTION, not a per-turn capacity**, and +0xcc is its ceiling. Closes 0 leaves as predicted and the demand stays 0 (the design fields are cached stats off the wire) - but **the zero is now EVIDENCED, not silent**: the independent colony parks TEN SHIPS over Koa'Vo on both pairs and its Sav closes exactly at zero demand. Rule 20's stronger negative |
| CORRECTION: out[6] is not a repair function | subsystems | verified | high | 100% | 2026-09-08 | output-turn-path.md had 0x007460b0 as a repair function. **It is SHIP-CARRIED POPULATION INCOME** - its summand 0x0081f8c0 gates on the design's carried-population bit and computes GroupIncome over the ship's own Population, a slot the engine already had. Corrected in place; lane C3's three unread stubs superseded. ALSO: GrowCivilianPops' real end is 0x00754b59 (its group-type loop's back edge is OUTSIDE every decompiler `if` - rule 17, SEVENTH lane); MaxPopGeneric ends 0x0074a6cd so lanes N and E1's 0x0074a6d0 is A DIFFERENT FUNCTION; and **InitPopTypeTable NEVER WRITES the group ceiling** - the CRT static initialiser at 0x009abe20 does, to INT64_MAX, and read as zero it would cap every capacity in the game at nothing |
| growth hypotheses (nothing exercises them) | verify | backlog | — | 0% | 2026-09-08 | Named by lane G3: one species per colony everywhere so the proportional rescale is only exercised DEGENERATELY; nothing shrinks (the -50,000,000 floor and negative rescale unexercised); pbon2 empty everywhere so the headroom/write-back asymmetry is invisible; haltv[1] false everywhere; **GFlags 0 everywhere so the 1.5x growth BONUS never fires**; no species ever seeded; the morale-event half not modelled; and imperial growth DELIBERATELY not committed - a no-op here, and committing it needs a capacity the corpus bounds from below but not above |