docs(invarianter): the seven that survived, and the denominator they hid behind

The round builder's row claimed "et sitat bærer ANTALLET siterte steder. Load-bearing
MÅLT" for a half that was not measured: the mutant dropping the count survived the whole
suite. The claim is true from today, and the row now says from WHEN — a ledger that
back-dates a measurement is worth less than one that admits the gap.

The new row records what the checkpoint found and what it cost to close: seven mutants
survived, none of them because the code was wrong, all of them because no arm looked.
Three were unreachable rather than merely unmeasured — the fixture wrote three of seven
artefact types, and every proposal carried the same citation stamp, so "1 av 1 siterte
steder" could not tell a dropped count from a kept one.

The denominator is written with its method, not as a number to be remembered: over the
four archived runs, -06/-07/-08 hold all seven types and -04 holds six (parse-failures is
written only when something failed to parse, so its absence is the signal). Union = 7,
from two commands.

And the citation cause is recorded as a measurement rather than a diagnosis, because
"the builder reads the wrong field" and "the outbox says the same thing five times"
want opposite fixes: one sha256 across all five proposals, in all four runs.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-19 10:28:25 +02:00
commit f78d57a7b7
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q

View file

@ -3128,12 +3128,47 @@
hvilken rad; rapporten skriver «Ingen tilbakemelding forklarer dette» på hver endret rad i hvilken rad; rapporten skriver «Ingen tilbakemelding forklarer dette» på hver endret rad i
stedet for å skjule at modellstøy og et besvart innspill ser like ut. Rapportens stadie-navn er stedet for å skjule at modellstøy og et besvart innspill ser like ut. Rapportens stadie-navn er
prosa, aldri `stage4-p90`, og et sitat bærer ANTALLET siterte steder. Load-bearing MÅLT prosa, aldri `stage4-p90`, og et sitat bærer ANTALLET siterte steder. Load-bearing MÅLT
(`tests/test_round_builder_loadbearing.py`, 28 armer, hvert tall talt en gang til fra (`tests/test_round_builder_loadbearing.py`, 40 armer, hvert tall talt en gang til fra
fixturens egen tabell); MÅLT på fire EKTE arkiverte utbokser (`tunnel-hauglia-2027` -04/-06/-07 fixturens egen tabell — men «MÅLT» om ANTALLET holder først fra 19.09, se raden under); MÅLT på fire EKTE arkiverte utbokser (`tunnel-hauglia-2027` -04/-06/-07
/-08): gaten leser rundene, rad 1 = **FORM OK, IKKE BEVIST**. **Ærlighets-grense, uttalt:** rad /-08): gaten leser rundene, rad 1 = **FORM OK, IKKE BEVIST**. **Ærlighets-grense, uttalt:** rad
2 blir RØD og ikke FORM OK på de samme rundene — radene endret seg (2, 5, 5), men ingen endring 2 blir RØD og ikke FORM OK på de samme rundene — radene endret seg (2, 5, 5), men ingen endring
er sporet til en feedback-id, fordi sporingen ikke finnes ennå. Den hører i oversettelsen er sporet til en feedback-id, fordi sporingen ikke finnes ennå. Den hører i oversettelsen
`feedback.json` → kjøringens input, som er en egen ordre. `feedback.json` → kjøringens input, som er en egen ordre.
- **Rapportens INNHOLD er voktet, og nevneren for «alle artefakter» er TALT (19.09,
rundebinder-resten):** PM-sjekkpunktet plantet 20 mutanter mot binderen, og **sju OVERLEVDE hele
suiten** — rapportens rundenummer · en artefakt-TYPE utenfor proposal/outcome/coverage droppet
stille · en aldri-vurdert tilnærming utelatt fra sin egen liste · kilde/sitat borte · sitatets
ANTALL borte · de berørte kostnadslinjene borte · en avvist rads `saving_nok` talt med i summen.
Ingen av dem overlevde fordi koden var gal — binderen gjorde alle sju riktig. De overlevde fordi
ingen arm så etter: `grep` på sitat- og kostnadslinje-ord ga 2 treff i 709 testlinjer, begge i
fixturen, null i en assert. En uvitnet søm er en søm neste endring kan slette gratis. To
fixturfeil gjorde tre av dem uoppnåelige, ikke bare umålte. **(1) Nevneren var 3 av 7.** En ekte
kjøring legger igjen SJU artefakt-typer, talt over de fire arkiverte kjøringene sjekkpunktet
leste (`tunnel-hauglia-2027` -04/-06/-07/-08; hver `<run_id>-<rest>.json` typet som
`proposal`/`outcome` når `<rest>` ender der, ellers `<rest>` selv): `-06`, `-07` og `-08` har
alle sju (15 filer hver), `-04` har seks (12 filer, ingen `parse-failures` — den skrives bare når
noe ikke parset, så FRAVÆRET er signalet). Union = 7, skrevet av TO kommandoer: `run.py` seks,
`stress.py` `-verdict.json`. **(2) Hvert forslag bar samme sitat-stempel**, så «1 av 1 siterte
steder» kunne ikke skille et droppet antall fra et beholdt; fixturen gir nå hvert forslag sitt
eget antall. Fire ting er NY atferd, alle røde på ASSERT først: **hengende symlenke** som
rundekatalog avvises med grunn og exit 1 (`exists()` FØLGER lenka, så den hengende svarte False,
slapp forbi «overskrives aldri» og lot bygget dø på filsystemets egen `FileExistsError` i stedet
for en setning operatøren kan handle på) · **én kildeliste delt av alle forslag sies ÉN gang**
årsaken ble MÅLT før noe ble skrevet, fordi «binderen leser feil felt» og «utboksen sier det
samme fem ganger» vil ha motsatte fikser: alle fem forslag i hver av de fire kjøringene bærer
BYTE-IDENTISKE 270-sitat-lister (én sha256 på tvers av alle fem, i alle fire kjøringer), altså
kjøringens hele hentede kontekst stemplet én gang per forslag. Rapporten kan ikke gjøre det
sitatet informativt; den kan slutte å gjenta det, og si hva lista faktisk er · **samme
kostnadslinje på begge sider av dommen navngis der det skjer** (den ekte rapporten avviste
`TUN-LYS-01` under én etikett og validerte den under en annen uten å si det — `TUN-VENT-01`
gjorde det samme) · en **fjernet tilnærming** skrives med etiketten fagpersonen så, med id-en i
parentes, lest fra coverage i FORRIGE rundes egen utboks; `outcome.json` beholder sine fire
kolonner. **12 av 12 mutanter felt** i scratch-klone, kontroll 40 av 40. Den tolvte var først
GRØNN, og det var et funn: `validated_ore` sin egen vakt er ekvivalent så lenge `derive_outcome`
sin holder, så den skilles av en arm som kaller den PUBLIKE funksjonen med utfallet en framtidig
coverage-skriver kunne lage. Fixturens avviste rad bærer et beløp MED VILJE — målt på de samme
fire utboksene har hver `rejected`-rad `saving_nok = None`, så vakten sikter mot en skriver som
ikke finnes ennå, og en fixtur som ikke kan lage tallet kan ikke vitne om vakten.
- **Et forslag uten tilnærmingens EGEN erklæring kan ikke bære `validated` (rad 6, 17.09):** målt - **Et forslag uten tilnærmingens EGEN erklæring kan ikke bære `validated` (rad 6, 17.09):** målt
på stressrunde 6 hadde alle 10 validerte tilnærmingene bare kjørings-erklæringer, som ingen kan på stressrunde 6 hadde alle 10 validerte tilnærmingene bare kjørings-erklæringer, som ingen kan
knytte til én tilnærming — og tre falsifiseringsarmer validerte. `declare_requirement` tar derfor knytte til én tilnærming — og tre falsifiseringsarmer validerte. `declare_requirement` tar derfor