docs(invarianter): the second repair's row -- what binds a probe to a step, and what the row's limit actually was [skip-docs]

Row updated, not appended to: the B-gate invariant now carries both repairs of
19.09 and the numbers that moved in each. Two precision errors the checkpoint
named are corrected in place -- "no row became greener" is true of colour and not
of numbers (row 5 went 1 of 2 -> 4 of 5 when the unit was split), and ENTRY_KINDS
has three arts, not four.

What the new paragraph records: the probe binding and the two traps measured while
building it (substring, and a local module alias), the price in row 1 (3 of 17 ->
0 of 17, each of the three named with its reason), the limit statement that claimed
two remaining ways where six were measured -- four closed, three named and left
open with their reason -- the held_out door out of the denominator, the five small
holes closed and the two limits stated rather than closed, and the thirteenth
mutant: it survived twice, and the first arm written to fell it proved something
already true.

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

View file

@ -3329,7 +3329,7 @@
kjøreboka faktisk drev en analyse — en fil gaten ALDRI skriver selv, samme regel som kjøreboka faktisk drev en analyse — en fil gaten ALDRI skriver selv, samme regel som
`attestering.txt` på v1-gaten. **Påstanden om at gaten teller en MCP-registrert dør er STRØKET:** `attestering.txt` på v1-gaten. **Påstanden om at gaten teller en MCP-registrert dør er STRØKET:**
den beskrev kode som ikke fantes. den beskrev kode som ikke fantes.
**Load-bearing:** `tests/test_b_gate.py` (65 armer, hver nevner talt uavhengig i testen). **Load-bearing:** `tests/test_b_gate.py` (86 armer, hver nevner talt uavhengig i testen).
**12 av 12 mutanter felt i scratch-klone** (kontroll 65 av 65): nevneren krymper stille (3 armer) **12 av 12 mutanter felt i scratch-klone** (kontroll 65 av 65): nevneren krymper stille (3 armer)
· udeklarert kall teller ikke (2) · stub teller som dør (5) · ukjent inngangsart godtas (1) · · udeklarert kall teller ikke (2) · stub teller som dør (5) · ukjent inngangsart godtas (1) ·
navn teller som atferd (3) · tom flate blir grønn (1) · flaten snevres inn til en håndliste (6) · navn teller som atferd (3) · tom flate blir grønn (1) · flaten snevres inn til en håndliste (6) ·
@ -3338,6 +3338,55 @@
egne. **v1-gatens tall er uendret** (0/3 · 0/3 · 3/8 · ingen rapport · 3/8 · IKKE MÅLT · 1/20, egne. **v1-gatens tall er uendret** (0/3 · 0/3 · 3/8 · ingen rapport · 3/8 · IKKE MÅLT · 1/20,
målt etter). **Grensen, uttalt:** gaten beviser ikke at verktøykassen VIRKER — den sier hvor målt etter). **Grensen, uttalt:** gaten beviser ikke at verktøykassen VIRKER — den sier hvor
langt unna den er. Rad 2, 4 og 5b er navngitte prober som ikke finnes ennå, og en test som ikke langt unna den er. Rad 2, 4 og 5b er navngitte prober som ikke finnes ennå, og en test som ikke
finnes er RØD, aldri hoppet over. Rad 3 er en TEKSTVAKT, ikke en dataflyt-analyse: et finnes er RØD, aldri hoppet over. Rad 3 er en TEKSTVAKT, ikke en dataflyt-analyse: tre veier
kommandonavn satt sammen av deler ved kjøretid og et navn lest ut av en miljøvariabel står står igjen (se under), og raden sier det selv i stedet for å la GRØNN bety mer enn den bærer.
igjen, og raden sier det selv i stedet for å la GRØNN bety mer enn den bærer.
**ANDRE REPARASJON samme kveld (19.09, ordre `20260919T184337Z-3169111514`), etter at PM MÅLTE
at kontrakten var oppfyllbar UTEN kapabilitet:** rad 1 kunne tas fra `3 av 17` til
**`17 av 17` GRØNN med fjorten stubb-dører i én modul og ÉN urelatert bestått test** brukt som
«atferdsprobe» for alle sammen. Gaten slo bare opp om probens nodeid var `passed`;
`EXTERNAL_DOOR` lovet at proben «kaller døren og leser artefaktet den skriver», og det fantes
ingen kode — samme klasse som `entry["kind"]` runden før. **Proben er nå BUNDET til steget, og
bindingen er en MÅLING i probens egen kilde** (`probe_binds`), aldri en erklæring i kontrakten:
fire krav, hvert med sin arm og sin mutant — proben må RØRE DØREN (dørens dotted modulnavn eller
dens registrerte kommandonavn, brukt som en hel streng), NAVNGI STEGET (symbolet, id-en eller
underkommandoen, som et helt ORD i det proben sender inn i et kall eller kaller), ASSERTERE i
det hele tatt, og ikke være DELT — en probe to steg gjør krav på beviser høyst ett av dem, og
gaten vet ikke hvilket. **Valgt å lese probens kilde framfor å kreve at den ligger i en
kontrakt-navngitt probe-fil, fordi et filnavn er en konvensjon en stub oppfyller like lett som
en ekte probe.** To feller ble målt fram underveis og er lukket: en DELSTRENG-regel ville latt
«gate» være navngitt av `portfolio_optimiser.evals.v1_gate`, og første utgave godtok steget
`gate` fordi probefila importerer modulen SOM `gate` — bindingen var til et lokalt alias. Navn
leses derfor bare der de SENDES eller KALLES; dørens navn leses videre (den ekte formen bygger
argv i en variabel først), men aldri fra en streng som står alene. **Prisen, målt mot kontrakten
som sto: rad 1 gikk `3 av 17``0 av 17`** — `rundebinding` og `gate` driver riktig dør uten å
navngi hvilket steg de beviser, `rapport` går ikke gjennom døren i det hele tatt (den kaller
`build_round` i prosess). Ingen av de tre var en kodefeil; det var kontrakten som godtok dem.
**Radens egen grenseerklæring var USANN:** den oppga NØYAKTIG TO gjenstående veier til Claude;
PM plantet 21 kallformer og målte at SEKS sto åpne. Fire er lukket med hver sin vakt —
`sdk-anthropic` (den offisielle Python-SDK-en, begge skriveformer), `node-runner` (node- og
uv-kjørerne, både som shell-linje og som argv-liste) og `dynamisk-import` — og rad 3 gikk
`9 av 9``12 av 12`, fortsatt GRØNN med 0 treff over 512 filer. **TRE veier står igjen og er
navngitt i attesteringen:** et navn satt sammen ved kjøretid, et navn lest ut av en
miljøvariabel, og et navn som avkodes først (base64). Den siste står bevisst åpen: kodingene er
ikke oppregnelige, og kontrakten lagrer selv base64 med vilje. Den nye vakten fant umiddelbart
en kommando skrevet i DENNE rundens egen test-docstring; den ble skrevet om, ikke unntatt.
**`held_out` er ikke lenger en dør ut av nevneren:** en TOM grunn er ingen grunn — symbolet blir
stående i nevneren som et kall uten dør, og sammendraget teller GRUNNER, ikke oppføringer (det
sa «holdt utenfor med grunn» uansett før). De fire stegene som er erklært UTENFOR kjørestien har
ingen utledet nevner i det hele tatt, og står nå navngitt under raden, ett for ett, i stedet for
å telles stille. **Fem små hull lukket:** et BESKÅRET manifest (451 av 512 filer ga fortsatt
GRØNN) er nå `IKKE MÅLT` — kontrakten planter én sentinel per område den gamle håndlista utelot
(`main.py`, `examples/`, `spikes/`, `contexts/`, `src/`) · en fil som ikke lar seg avkode som
UTF-8 leses som byte-tekst i stedet for å telles og hoppes over · en symlenke UT av treet
navngis og feller raden · en kjørebok hvis hele innhold er «x» er ikke lenger `2 av 2 GRØNN`
kontrakten navngir seksjonene · og raden sier selv at k av n **ikke er et dekningsmål**.
**To grenser er UTTALT, ikke lukket, hver med sin grunn i radens egen attestering:** et po-kall
flyttet én etasje ned, til en hjelper `run_project` kaller, faller ut av nevneren (å følge
hjelpere transitivt ville trukket private hjelpere inn og gjort nevneren til den kuraterte lista
raden finnes for å unngå), og rad 3s k/n kan fortsatt polstres med en vakt uten en målt omgåelse
bak seg. **13 av 13 mutanter felt i scratch-klone** (kontroll 86 av 86, isolasjonen verifisert på
`b_gate.__file__` FØR første tall). **Den trettende overlevde TO ganger og er rundens funn:**
leses hele probens kropp, teller en streng som STÅR ALENE som å røre døren — og første forsøk på
å felle den plantet navnet i en SETNING, som gaten uansett aldri ville godtatt, så armen
bekreftet noe som allerede var sant. Nålen måtte være dørens navn BART.