feat(1b): fang den råe modell-svarteksten ved parse-feil
Fase 1b funn 1 lukket. generate._fetch_parsed kastet hvert uparsebart modellsvar i except: continue, så prosjektets første levende kjøring brant tolv runder på formatfeil og etterlot null tegn av det modellen faktisk sa. Enhver videre betalt kjøring ville vært gjetning. HVOR teksten overflates er avgjort av en måling, ikke av symmetri med Steg 5: meter.tick_round() raiser BudgetExceeded INNE i _fetch_parsed, og uten mandat fanger ingen den, så på nøyaktig den stien fangsten finnes for returnerer generate_via_llm ingenting. Et felt på GenerationResult ville vært blindt for den, og et outbox-artefakt skrevet etter kjøringen likeså. Sinken speiler meter: en kaller-eid akkumulator hvis innhold kalleren holder uansett hvordan løkka endte. Artefaktet skrives fra en finally, ikke except BudgetExceeded, og kun når noe faktisk feilet. Iron Law: testfila rød ved collection FØR modulen fantes. Seks mutasjoner mot HELE suiten, alle røde, hver med sin egen signatur; grønn kontroll 859 passed / 4 skipped (fra 854). Den skarpeste er trunkering som BEHOLDER sentinelen: da faller kun verbatim-asserten, som er det som beviser at den ene testen bærer den egenskapen. Samme økt: mutasjonsmålingen økt 34 utsatte for de to Fase 5-gatene er kjørt. Fire preflight-mutasjoner mot hele suiten, alle røde på riktig test og ingen annen (detach fallbacken 2 røde, snu presedensen, presence i stedet for truthiness, avslaget navngir kun vårt navn). To handover-mutasjoner kjørt MÅLRETTET mot egen testfil under tidspress, ikke mot hele suiten — uttalt, ikke skjult (drop uv.lock, bygg fra arbeidstreet i stedet for tracked files). De to DEPLOY.md-mutasjonene gjenstår: git archive leser HEAD, ikke arbeidstreet, så de krever en midlertidig commit. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WLQd8ojQ9xwxhB8vsETYBs
This commit is contained in:
parent
5bd8e1caa1
commit
e3718908d0
5 changed files with 413 additions and 7 deletions
24
CLAUDE.md
24
CLAUDE.md
|
|
@ -531,6 +531,30 @@ Python ≥3.10. MAF (`agent-framework-core` 1.9.0). Pakkehåndtering: `uv`. To b
|
|||
import), eksempelet er gyldig pipeline-input inkl. `FeedbackContract` (RØD på skjema-/kontrakt-drift,
|
||||
på en throwaway-kopi — aldri den git-tracked fixturen), og sim-ens markør følger artefakt-fila (RØD i
|
||||
det øyeblikk personaen re-inlines).
|
||||
- **Den råe svarteksten fanges i en KALLER-EID SINK, ikke i en returverdi (Fase 1b, funn 1):**
|
||||
`generate._fetch_parsed` kastet hvert uparsebart modellsvar i `except: continue`, så prosjektets
|
||||
første levende kjøring brant tolv runder på formatfeil og etterlot **null tegn** av det modellen
|
||||
faktisk sa — enhver videre betalt kjøring ville vært gjetning. **HVOR teksten overflates er avgjort
|
||||
av en MÅLING, ikke av symmetri med Steg 5:** `meter.tick_round()` raiser `BudgetExceeded` INNE i
|
||||
`_fetch_parsed`, og uten mandat fanger ingen den (`run.py`s ene `except BudgetExceeded` er
|
||||
mandat-armen) — så på nøyaktig den stien fangsten finnes for, RETURNERER `generate_via_llm`
|
||||
ingenting. Et felt på `GenerationResult` (Steg 5-formen) er derfor blindt for den, og et
|
||||
outbox-artefakt skrevet ETTER kjøringen likeså. Sinken speiler i stedet `meter`: en kaller-eid
|
||||
akkumulator løkka muterer, hvis innhold kalleren holder uansett hvordan løkka endte. Steg 5s
|
||||
«returverdi, ikke out-parameter» gjelder en verdi som NÅR kalleren; her gjør den ikke det, og å
|
||||
kopiere regelen blindt ville gjenoppbygd defekten ett lag opp. Artefaktet
|
||||
`{run_id}-parse-failures.json` skrives fra en **`finally`**, ikke `except BudgetExceeded` — enhver
|
||||
exception ut av genereringen ødelegger samme bevis, og en liste over exception-typer er en liste
|
||||
som blir foreldet. **Teksten er VERBATIM** (en forkortelse gjør beviset om til en parafrase), og
|
||||
fila skrives KUN når noe faktisk feilet, så dens tilstedeværelse ER signalet. Byte-determinisme
|
||||
påstås IKKE for dette ene artefaktet — innholdet er en levende modells prosa. Load-bearing MÅLT
|
||||
(`tests/test_parse_failure_capture_loadbearing.py`), seks mutasjoner alle røde mot HELE suiten +
|
||||
grønn kontroll 859/4: detach fangsten (3 røde) · flytt skrivingen ut av `finally` (1 rød, KUN
|
||||
budsjett-testen) · detach run-wiringen (2 røde, generate-testen grønn) · skriv artefaktet alltid
|
||||
(kontrollen + den eksisterende `a5`-inerthetstesten) · trunker teksten til 40 tegn (3 røde) ·
|
||||
trunker til 100 tegn slik at sentinelen OVERLEVER (1 rød — verbatim-asserten alene, den skarpe
|
||||
diskriminatoren). Ærlighets-grense: `_charge_usage` kan raise FØR parse, og et svar tapt der er
|
||||
ikke en parse-feil og fanges ikke.
|
||||
- **Overleverings-pakka ER `git archive HEAD`, aldri en kuratert kopi (Fase 5):**
|
||||
`scripts/make-handover-package.sh` bygger én zip en ekstern organisasjon deployer uten å klone
|
||||
repoet. **Tracked files only er hele eksponerings-kontrollen** — `STATE.md`, `*.local.md` og
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue