docs(invarianter): the toolbox's four first doors, and the binding that measures an execution [skip-docs]

One row for the whole delivery: why `portfolio-optimiser-toolbox` is the third console script (it
is the one thing the other two cannot be used for), what each subcommand is bound to, why every
handler is a thin adapter and every dispatch an explicit branch, and how the probes assert on what
the door wrote rather than on the function it calls.

Plus the third repair of B-gate's binding with its measurements: the judge's seven forms at 0 of 1,
the naming rule turned into a discriminator, named-prose reasons, row 3 at 15 of 15 over 514 files,
and the runbook heading that is no longer a section. The row states its own limit (the gate reads
that the probe drives the door; it does not re-run the probe with the door broken) and records that
N7 stays open in the gate and closed in the suite.

The mutation run is in the row because two of its findings could not have come from reading: the
dead-code pruning survived two mutants until the arms that reach it were written, and three
mutants are named as non-measurements (two renamed a label, one was equivalent).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-20 09:07:56 +02:00
commit 7dcce64f6a
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q

View file

@ -3430,3 +3430,64 @@
unionen telles over, og nettopp derfor er sju et GULV. Armen teller utboksene og krever at raden
sier det tellingen sier; den hopper over uten `scratchpad/` (som i et rent uttrekk) og FELLER på
en tom telling, fordi en spørring som ikke kan finne noe ikke er en måling.
- **Verktøykassens fire første dører, og bindingen som måler UTFØRELSE (20.09, ordre
`20260920T052739Z-9456915952`, operatørdirektiv «godt nok, bygg»):** `portfolio-optimiser-toolbox`
er den TREDJE konsoll-kommandoen, og den er der fordi den er det ENE de to andre ikke kan brukes
til: hver vei gjennom `run` bygger en chatklient, og stegene debatten er bygget PÅ trenger ingen
modell. Fire underkommandoer, ett kjernekall hver — `navigate-bundle``okf.navigate_bundle`,
`cost-baseline``okf.derive_cost_baseline`, `retrieve-chunks``datasource.retrieve_chunks`,
`prepass-admit``prepass.admit_payload` — med JSON på stdout og en exit-kode som sier
sannheten (0 kjørte, 2 feil kall, 3 steget NEKTET, med grunnen navngitt). **Hver håndterer er en
tynn adapter med vilje:** en håndterer som REGNET noe selv ville vært en andre implementasjon av
et kjørestegs-steg, og da slutter den eksterne kalleren å få det debatten får — hele påstanden
bak døren. **Dispatch er én gren per kommando, aldri `set_defaults(handler=…)`:** tabellen
skjuler det ene en leser vil se, og rad 1 spør kilden om nøyaktig det samme (den går kallgrafen
fra `main` ned til stegets symbol), der en callable i et Namespace er et hopp ingen av dem kan
følge. Rad 1: **0 → 5 av 17**, exit 1 uendret, ingen annen rad flyttet seg.
**Probene (`tests/test_toolbox_doors.py`, 10 armer) importerer ALDRI kjernefunksjonen:** hver
starter døren som subprosess med underkommandoen i argv og asserterer på det den SKREV. Fasiten
er utenfor døren i hver arm — filsystemet (`navigate-bundle`, inkludert den ene bevisste
lenken ut av basen), en tabell transkribert fra prisskjema-fixturen (`cost-baseline`), det
in-prosess API-et den må være byte-lik (`retrieve-chunks`), og produsentens egen innsjekkede
nyttelast (`prepass-admit`). Hver avvisningsarm har en rc-0-kontroll ved siden av seg.
**B-gatens binding, TREDJE reparasjon — og den første som ikke leser et NAVN:** dommeren målte
rad 1 til 17 av 17 med 17 énlinjes-prober og en dørmodul uten én eneste import. Det som måles nå
er et UTFØRELSESSTED (en prosess-starter med dørens navn i argumentene, eller inngangen importert
fra dørens modul OG kalt) og en assert som er DATAAVHENGIG av det kallet. Død kode beskjæres
først. De ærlige formene suiten alt bruker teller videre: kommandoen bygget i en variabel først,
og subprosessen startet i en hjelper som returnerer den. **Dommerens sju former (a1, a2, b1, b2,
c1, c2 + oppskriften) gir alle 0 av 1**, hver med rc-0-kontroll i samme oppsett.
**Navngivningen av steget er en DISKRIMINATOR, rettet som klasse:** den kreves bare når mer enn
ett steg står bak samme dør. Å kjøre en dør med ett steg bak seg ER å kjøre det steget — og det
var derfor `gate` (en ekte ende-til-ende dørprobe mot v1-gaten) ble avvist på en
navneteknikalitet. For en underkommando må kommandonavnet stå i det som FAKTISK ble kjørt, og
CLI-en selv må være registrert eller `-m`-kjørbar: en `add_parser` i en modul ingen kan starte er
ingen dør. **`held_out`-grunnen må være navngitt prosa** («-», «todo», «x», «.» ble alle godtatt
av `.strip()`), målt mot kontraktens egne 28 grunner (korteste: 30 tegn, tre ord).
**Rad 3 lukker de fem veiene sjekkpunktet målte som åpne OG billige å lukke**`importlib` for
begge SDK-navn, `deno run … npm:` / `npm exec` / `yarn dlx`, og den offisielle TypeScript-SDK-en:
**12 av 12 → 15 av 15**, fortsatt 0 treff over **514** publiserte filer (nevneren vokste med de to
filene DENNE leveransen la på flaten — pinnen fanget det). Grenseerklæringen slutter å regne opp
hva som står igjen («NØYAKTIG TO», så «TRE» — begge falsifisert av den første nye målingen) og
sier hva vakten ER: tekstmønstre over git-manifestet, som feller et navn som STÅR SKREVET og
ikke ser et navn som blir til når koden kjører.
**Rad 6: en overskrift er ikke en seksjon.** De fem kontrakt-navngitte overskriftene pluss «x»
(125 tegn) ga `2 av 2 GRØNN`; seksjonsnavnet bindes nå til en OVERSKRIFTSLINJE og det som teller
er kroppen under den (`section_bodies`, `RUNBOOK_MIN_BODY = 80`). Gulvet er mot den tomme
overskriften, aldri et mål på om kjøreboka er SANN — det blir stående som operatørens, og raden
er fortsatt `IKKE MÅLT`.
**Grensen raden uttaler selv:** gaten leser at proben KJØRER døren og leser resultatet; den
kjører ikke proben på nytt med døren brutt. Den eneste formen som ikke kan skrives seg forbi er
å MUTERE inngangen til å reise og se proben bli rød, og det gjør gaten ikke. **N7 står åpen i
GATEN og er lukket i SUITEN:** et slettet off-path-steg krymper fortsatt nevneren stille der,
så de fire står utskrevet i en arm som blir rød når én av dem forsvinner.
**Load-bearing:** `tests/test_b_gate.py`, `tests/test_toolbox_doors.py`,
`tests/test_console_entry_points.py`. **17 av 17 mutanter felt** i klone (kontroll 133 av 133,
isolasjon verifisert på `b_gate.__file__` OG `toolbox.__file__` før første tall), 0 andre
unntakstyper enn assertions. **To funn kom AV mutantkjøringen, ikke av lesing:** beskjæringen av
død kode OVERLEVDE to mutanter fordi ingen arm nådde den — formen som trengs er en probe som er
GRØNN i pytest (en ekte prosess som ikke er døren binder navnet asserten leser, dørkallet i død
kode under samme navn), og begge formene er armer nå. **Tre mutanter var ikke målinger og sies
det om:** to omdøpte bare en etikett/id uten å fjerne en vakt, og én rundet `score` til to
desimaler — EKVIVALENT, fordi scorene er 1.0/0.75/0.5.