docs(invarianter): the B gate's row, rewritten around the denominators that turned out to be its own
The row claimed three things the checkpoint measured as false: that every denominator comes from the source (row 1's M=13 was a curated list in the gate's own b_gate.json), that the surface is what is published (it was a hand list of eleven roots seeing 433 of 512 files), and that the gate counts an MCP-registered door as callable (there was no code for it — "kind" appeared 0 times). The 435-file figure was the working tree, two gitignored .local.md files included, so it was not reproducible from the commit either. Rewritten to what is true after the repair, with the old numbers kept as history so the row reads as a correction and not as a clean slate: 3 of 17 · 0 of 2 · 9 of 9 · 0 of 3 · 4 of 5 · IKKE MAALT. The markdown-fence rule's own measurement is refreshed too: on the bigger surface it now carries TWO prose lines, not one — the second is a plan document quoting a command the operator ran in his own session. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
2d957a93c5
commit
c1bdb37b86
1 changed files with 70 additions and 37 deletions
|
|
@ -3235,42 +3235,75 @@
|
||||||
tatt 18.09 fra vegnormals mappe KUN ved lesing — kildens mtimer er uendret.
|
tatt 18.09 fra vegnormals mappe KUN ved lesing — kildens mtimer er uendret.
|
||||||
|
|
||||||
- **B-gaten måler po som VERKTØYKASSE Claude Code driver — og po får aldri en vei tilbake til
|
- **B-gaten måler po som VERKTØYKASSE Claude Code driver — og po får aldri en vei tilbake til
|
||||||
Claude (19.09, ordre `20260919T040628Z-4756715055`):** operatørbeslutningen er at Claude Code
|
Claude (19.09, ordre `20260919T040628Z-4756715055`, REPARERT samme dag etter PM-sjekkpunktet,
|
||||||
LEDER i utvikling og test, at po er verktøykassen, og at produksjon kjører Foundry uten Claude i
|
ordre `20260919T082156Z-338455001`):** operatørbeslutningen er at Claude Code LEDER i utvikling
|
||||||
det hele tatt. `python -m portfolio_optimiser.evals.b_gate` er kontrakten den kapabiliteten skal
|
og test, at po er verktøykassen, og at produksjon kjører Foundry uten Claude i det hele tatt.
|
||||||
leveres inn i, skrevet RØD før noe bygges: **3 av 13 · 0 av 2 · 6 av 6 · 0 av 3 · 1 av 2 · IKKE
|
`python -m portfolio_optimiser.evals.b_gate` er kontrakten den kapabiliteten skal leveres inn i,
|
||||||
MÅLT**, exit 1. **Nevnerne kommer fra KILDEN, aldri fra en liste i gaten:** et steg teller bare
|
skrevet RØD før noe bygges: **3 av 17 · 0 av 2 · 9 av 9 · 0 av 3 · 4 av 5 · IKKE MÅLT**, exit 1.
|
||||||
når symbolet finnes i modulen OG et navngitt kallsted i kjørestien kaller det (`measure_steps`),
|
(Første utgave sa `3 av 13 · … · 6 av 6 · … · 1 av 2`; sjekkpunktet viste at tre av de nevnerne
|
||||||
og rollene leses av `workflow._MAKER_CHECKER_ROLES` slik den står (`run_roles`) — derfor felles
|
var gatens egne tall, ikke kildens. Ingen rad ble GRØNNERE av reparasjonen — nevnerne ble sanne.)
|
||||||
en hardkodet nevner av en konstruert kilde med ett steg mindre, ikke av repoet.
|
**Rad 1s nevner UTLEDES av kjørestien** (`run_path_calls`): 41 po-funksjoner kalles i
|
||||||
|
`run.py::run_project` (PMs 39 deterministiske + `generate_via_llm`/`fresh_workflow`, som holdes
|
||||||
|
utenfor fordi de krever chatklient). Et kall som verken er erklært som steg eller navngitt som
|
||||||
|
holdt utenfor, teller i nevneren UTEN en dør — derfor kan den ikke krympe stille slik en kuratert
|
||||||
|
liste i gatens egen `b_gate.json` kunne: fjernes et steg fra kontrakten, står N uendret og
|
||||||
|
foreldreløsen navngis. 28 kall er holdt utenfor, hvert med sin grunn skrevet i gatens output. De
|
||||||
|
fire utboks-skriverne kjørestien bruker og ingen hadde erklært (`write_prepass`,
|
||||||
|
`write_parse_failures`, `write_proposal_reviews`, `write_debate_tools`) er steg nå: artefakt-
|
||||||
|
familien er sju skrivere av ti definerte, ikke tre. **En dør må være REGISTRERT og BEVIST:**
|
||||||
|
`entry["kind"]` leses (den ble lest 0 ganger før) og må være én av tre arter gaten har kode for å
|
||||||
|
etterprøve — `console-script` i pyproject, `module-main` med sin egen `__main__`-vakt,
|
||||||
|
`subcommand` registrert i modulens egen argparse — og hvert steg må dessuten ha en navngitt probe
|
||||||
|
som kaller døren og leser artefaktet. Målt: en modul med bare `def main(): return <symbol>()` tok
|
||||||
|
rad 1 fra 3 til 4 av 13 før; nå avvises den under alle fire arter, med grunn.
|
||||||
**«Kallbar utenfra» betyr uten chatklient:** en inngang som når steget via en vei der
|
**«Kallbar utenfra» betyr uten chatklient:** en inngang som når steget via en vei der
|
||||||
`create_chat_client`/`client_factory`/`_default_factory` nevnes, teller IKKE (`entry_reaches`) —
|
`create_chat_client`/`client_factory`/`_default_factory` nevnes, teller IKKE (`entry_reaches`) —
|
||||||
det er hele grunnen til at de ti `run.py`-stegene er røde mens rundebinderen og v1-gaten er
|
det er hele grunnen til at `run.py`-stegene er røde mens rundebinderen og v1-gaten er grønne.
|
||||||
grønne. Sjekken er med vilje strengere enn nødvendig: den leser hele det `main` når i sin egen
|
Sjekken er med vilje strengere enn nødvendig: den leser hele det `main` når i sin egen modul,
|
||||||
modul, ikke bare den ene veien ned. **Rad 3 er den eneste raden som er grønn, og den er grønn
|
ikke bare den ene veien ned. **Rad 3 er den eneste raden som er grønn, og den er grønn som en
|
||||||
som en MÅLING:** seks vakter, hver med sin kjent-positive OG kjent-negative prøve, over 435
|
MÅLING:** ni vakter, hver med sin kjent-positive OG kjent-negative prøve, over **512 publiserte
|
||||||
publiserte filer. En vakt som ikke treffer sin egen kjent-positive telles ikke — «0 treff» fra
|
filer lest av REPO-MANIFESTET** (`git ls-files`, eller filtreet selv i et rent uttrekk — som ER
|
||||||
et mønster som ikke kan treffe er ikke null, det er ingenting. **I markdown teller kun linjer
|
det publiserte). Håndlista på elleve `roots` den erstattet så 433 av dem: `main.py`,
|
||||||
inne i kodeblokk** («docs med kjørbare kommandoer»): uten den regelen blir raden rød av én
|
`examples/`, `spikes/`, `contexts/`, `CLAUDE.md` og `llms.txt` lå utenfor, og alle seks
|
||||||
prosa-linje i `docs/research/2026-06-24-maf-vs-claude-agent-sdk.md:185` som vurderer og forkaster
|
kjent-positive kunne plantes i `main.py` uten at raden merket det. Manifestet gjør tallet
|
||||||
et pakkenavn — målt, som mutant M-6. **Mønstrene ligger base64-kodet i `b_gate.json`** fordi
|
reproduserbart: 433 i uttrekk og 435 i arbeidstreet var de to gitignorerte `.local.md`-filene
|
||||||
flaten gaten leser er den samme flaten gaten bor i; klartekst ville registrert kontrakten som sitt
|
under `docs/plan/`. **Tre av de ni vaktene feller INDIREKTE kall** — absolutt sti, liste lagt i en
|
||||||
eget funn og tvunget fram en unntaksliste, og en rad med unntaksliste kan skrus av ved å legge en
|
variabel, konstant, shell-streng — så 5 av 5 av sjekkpunktets varianter avvises, med 0 falske
|
||||||
fil på lista. **Tre valg gaten uttaler i sin egen output** (operatøren kan ikke svare på dem uten
|
positive målt over hele flaten. **En tom flate er `IKKE MÅLT`, aldri grønn:** raden krever en
|
||||||
å lese kode): døren ut er en CLI-underkommando, ikke MCP (po har allerede fem `main()`; gaten
|
sentinel-fil og skriver både filtallet, hvilket manifest den leste og hvor mange filer som ikke
|
||||||
teller likevel en MCP-registrert dør, så valget binder ikke neste ordre) · budsjettvernet i B er
|
lot seg avkode (1 — en `.sqlite`-fixture). **I markdown teller kun linjer inne i kodeblokk**
|
||||||
IKKE po sitt — `BudgetMiddleware` er fail-closed på manglende usage og konstrueres aldri uten
|
(«docs med kjørbare kommandoer»): uten den regelen blir raden rød av TO prosa-linjer — målt på
|
||||||
chatklient, så å beholde det her ville gjort fail-closed til fail-open; taket i B er Claude
|
den nye flaten 19.09 — `docs/research/2026-06-24-maf-vs-claude-agent-sdk.md:185`, som vurderer og
|
||||||
Code-øktens eget forbruk, som po verken ser eller styrer, og Foundry-veien beholder sitt tak
|
forkaster et pakkenavn, og `docs/plan/2026-08-09-fable-egnethetsreview-prompt.md:11`, som siterer
|
||||||
uendret · rad 6 er `IKKE MÅLT` og aldri grønn før operatøren bekrefter at kjøreboka faktisk drev
|
en kommando operatøren kjørte i SIN egen økt. Ingen av dem er en vei po kan gå.
|
||||||
en analyse — en fil gaten ALDRI skriver selv, samme regel som `attestering.txt` på v1-gaten.
|
**Mønstrene ligger base64-kodet i `b_gate.json`** fordi flaten gaten leser er den samme flaten
|
||||||
**Load-bearing:** `tests/test_b_gate.py` (34 armer, hver nevner talt uavhengig i testen).
|
gaten bor i; klartekst ville registrert kontrakten som sitt eget funn og tvunget fram en
|
||||||
**8 mutanter felt i scratch-klone** (kontroll 1 failed / 2100 passed / 10 skipped / 5 xfailed —
|
unntaksliste, og en rad med unntaksliste kan skrus av ved å legge en fil på lista. Samme grunn
|
||||||
den ene er `test_package_leaks_no_local_or_secret_files` sin EGEN kontroll-assert, `STATE.md`
|
gjelder de plantede variantene i testfila. **Rad 4, 5 og 6 har nevnere med navngitt kilde:**
|
||||||
finnes ikke i en klone): nevner hardkodet (5 armer) · chatklient-sjekken droppet (2) · et
|
rad 4 teller bare sjekker hvis kilde-symbol faktisk finnes i koden (`run_project`, `build_round`,
|
||||||
rad 3-mønster fjernet (4) · «byte-identisk» byttet til «finnes» (1) · gaten skriver attesteringen
|
`v1_gate.FORM_OK`), rad 5 teller hvert strukturkrav for seg (to profil-medlemmer + fabrikk + søm
|
||||||
(1) · markdown-prosa teller som kommando (2) · kjent-positiv ikke validert (1) · kallstedet ikke
|
+ probe = 5) i stedet for å blande tre til én enhet, og rad 6s N er artefaktene kontrakten
|
||||||
krevd (1). **v1-gatens tall er uendret** (0/3 · 0/3 · 3/8 · ingen rapport · 3/8 · IKKE MÅLT ·
|
navngir. **Attesteringen VALIDERES nå:** den må navngi kontraktens kjørebok, bære dens sha256,
|
||||||
1/20, målt etter). **Grensen, uttalt:** gaten beviser ikke at verktøykassen VIRKER — den sier
|
si hvem som kjørte den, og ha en ekte ISO-dato som ikke ligger i framtiden (v1-gatens egen
|
||||||
hvor langt unna den er. Rad 2, 4 og 5b er navngitte prober som ikke finnes ennå, og en test som
|
`_parse_given`, gjenbrukt; BOM tåles som der). Før reparasjonen ga `kjørebok: x`, `dato: x`,
|
||||||
ikke finnes er RØD, aldri hoppet over.
|
framtidsdatoen `3026-01-01` og en peker til en annen fil alle **2 av 2 GRØNN**.
|
||||||
|
**To valg gaten uttaler i sin egen output** (operatøren kan ikke svare på dem uten å lese kode):
|
||||||
|
budsjettvernet i B er IKKE po sitt — `BudgetMiddleware` er fail-closed på manglende usage og
|
||||||
|
konstrueres aldri uten chatklient, så å beholde det her ville gjort fail-closed til fail-open;
|
||||||
|
taket i B er Claude Code-øktens eget forbruk, som po verken ser eller styrer, og Foundry-veien
|
||||||
|
beholder sitt tak uendret · rad 6 er `IKKE MÅLT` og aldri grønn før operatøren bekrefter at
|
||||||
|
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:**
|
||||||
|
den beskrev kode som ikke fantes.
|
||||||
|
**Load-bearing:** `tests/test_b_gate.py` (65 armer, hver nevner talt uavhengig i testen).
|
||||||
|
**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) ·
|
||||||
|
navn teller som atferd (3) · tom flate blir grønn (1) · flaten snevres inn til en håndliste (6) ·
|
||||||
|
de tre indirekte vaktene fjernet (5) · sjekksummen ignoreres (1) · framtidsdato godtas (1) ·
|
||||||
|
rad 4s kilde ignoreres (1) · rad 5 teller strukturen som én enhet (3). Runden før felte 8 av sine
|
||||||
|
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
|
||||||
|
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
|
||||||
|
kommandonavn satt sammen av deler ved kjøretid og et navn lest ut av en miljøvariabel står
|
||||||
|
igjen, og raden sier det selv i stedet for å la GRØNN bety mer enn den bærer.
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue