THE UGLY: r761 VALIDATED the falsification arm. a4-indeksregulering -- an approach rule U proves
the base cannot ground -- came back validated at 250 000 NOK with affected_items
[{code: "R761", unit_cost: 10000000}]. The model used the BASE'S OWN NAME as a cost code, and P7's
stage 0b admitted it because the rule is an exact SUBSTRING with no pattern and "R761" occurs
everywhere in a 6.5 MB R761 corpus. The validator (stage 0 skipped, un-anchored), stage 0b and the
checker (approve) all passed it. P7's own row names plain numbers as the one inert class; this adds
a second and worse one -- short, ubiquitous tokens, which unlike a number LOOK like a cost code.
THE BAD: not one of the 26 fasit concepts was opened, in 24 read_file calls across four runs. The
ladder works mechanically and misses professionally.
Also ugly: one directory listing is 27-113x the ceiling S7a-3 binds (n200's krav/N200 is 169 974
chars ~ 56 658 tokens) because the vegnormal hierarchy is FLAT, and it rides every turn -- three of
seven runs died on the token cap, and the deep-hierarchy base (r761) was the CHEAPEST.
Every ugly finding carries a named solution with an estimate. None is built -- the order forbids it.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
19 KiB
P16 — stressrunde 1: the good, the bad and the ugly
Ordre 20260914T091846Z-2971522127-from-.claude, økt 120, 14.09.2026.
Fire betalte kjøringer mot n100-2023 / n500-2024 / n200-2024 / r761-2025, dømt av en ny
deterministisk dommer. Alle tall her er MÅLT i denne økten mot disk og mot artefaktene
kjøringene etterlot, ikke lest ut av en tidligere rapport.
Kortversjonen. Rammeverket kjører ende-til-ende mot fire ekte kunnskapsbaser og navigerer dem riktig. Ingen av de fire kjøringene traff et eneste av de 26 fasit-konseptene. Tre av fire avviste alt som ugrunnet; den fjerde validerte falsifiseringsarmen — tilnærmingen som ved konstruksjon ikke kan forankres — og gjorde det ved å bruke basens eget navn som kostkode.
1. Hva som ble bygget først (DEL A)
src/portfolio_optimiser/stress.py — score_context_set(context_dir, outbox_dir, run_id, bundle_dir). Den leser KUN artefakter som alt finnes: {run_id}[-{approach}]-proposal.json,
-outcome.json og {run_id}-debate.json, pluss settets mandate.json / fasit.json /
bundle.txt. Ingen kjøring fikk et nytt felt.
1.1 Ordrens (a)-definisjon var vakuøs, og det ble målt før noe ble bygget på den
Ordren definerer grounded som «en must_cite-sti er ÅPNET eller SITERT». På S2c-stien
stempler run_project citations = bundle_citations(bundle) — én sitering per konseptfil.
| Base | Kontekstfiler | Siteringer i stempelet | Fasit-stier «sitert» før noe modellkall |
|---|---|---|---|
| n100-2023 | 446 | 446 | 6 av 6 |
En dommer som fulgte ordren ordrett ville altså vært en gate som bare kan bli grønn — repoets egen
vakuøs-gate-klasse, inne i gaten som ble bygget for å fange den. Derfor: en sitering grunner
kun når siteringslista er SMALERE enn basen (et erklært pre-pass-kutt). Begge halvdeler rapporteres
uansett (opened / cited / citation_scope), så avviket er uttalt, aldri stille.
(b′) ble sjekket for SAMME vakuitet og var ren nok til at ordren står: siteringenes snippet
er konsept-BODYER mens ref/title bor i FRONTMATTER — målt inneholder 0 av 446 n100-bodyer
strengen Krav 4.1.2—1. Se likevel § 6.2: målingen på r761 viser at snippet-armen er svak for
KORTE referanser, og named_in_measure er den halvdelen som tåler vekt.
1.2 Falsifiseringsarmen fikk en kjørbar form (A2)
po er ikke et oppslagsverktøy (D-1), så et «ubesvarbart spørsmål» hadde ingen kjørbar form: ingen
kjøresti konsumerte fasit.jsons unanswerable-rader. Samme faktum rir nå en fjerde bestilt
tilnærming per sett (a4-…) hvis kostlinje basen ikke bærer grunnlaget for, og fasit.json
bærer must_refuse (approach_id / anchors / rationale) i stedet for unanswerable — én
form, aldri to kopier av ett faktum. Spørsmålene overlever i rationale, som ingenting nøkler på.
Regel U er URØRT og dens kjent-positiv er fortsatt rød.
1.3 Mutasjonstabell (DEL A)
Alle elleve røde på sin egen arm, grønn kontroll 1663 passed / 5 skipped, golden
demo-transcript.stdout BYTE-UENDRET (shasum -a 1 av INNHOLDET =
ea8c534773acdbe41ae68f2c55724d69aaf8be4f — ikke git-blob-id-en).
| # | Mutasjon | Røde | Arm |
|---|---|---|---|
| M1 | helbase-siteringer grunner igjen | 2 | (b) + (a) |
| M2 | en åpnet sti grunner ikke | 4 | (a), (d), (f), (k) |
| M3 | (b′) dropper snippet-armen | 1 | (e) |
| M4 | hallusinerte siteringsfiler ignoreres | 1 | (f) |
| M5 | hallusinerte koder ignoreres | 1 | (f) |
| M6 | gjettet lesesti forgifter ikke ferdig |
1 | (f) |
| M7 | tom utboks gir rent resultat | 1 | (h) |
| M8 | not_evaluated-rader utelates |
1 | (j) |
| M9 | kode-lekkasjearmen i must_refuse droppes |
1 | (g) |
| M10 | en tom base tolereres | 1 | (i) |
| M11 | Regel U-ens kjent-positiv (P14 M3) | 1 | context-sets |
2. Gratis-trinnet betalte seg tre ganger (DEL B2)
FUNN 1 — den dokumenterte kommandoen kunne ikke kjøres
STATE.md, docs/2026-09-12-p14-kontekstsett.md § 4.1 og ordren publiserer alle den samme
kommandoen, som ender --max-rounds 8 --max-tokens 120000. MÅLT: run.py tok ingen av dem.
Alle fire --live-dry-run nektet med unrecognized arguments. Verre: main() sendte aldri
max_rounds/max_tokens videre til run_project, så HVER CLI-kjøring noensinne var stille bundet
til _DEFAULT_MAX_ROUNDS=3 / _DEFAULT_MAX_TOKENS=100_000, uten noen operatørflate for å heve
eller senke taket på noe man betalte for. Tre flater beskrev en dør som ikke fantes.
Fikset før betaling (B2s egen instruks), commit 5f94c92: begge flagg DEFAULTER til nøyaktig
de historiske verdiene (utvidelse, aldri bryting), wiret til BEGGE dispatcher (run_project OG
run_portfolio — main() droppet dem der også) og nektet ved navn i report-modus. Seks armer,
alle røde før fiksen; fire mutasjoner.
FUNN 2 — --docs-dir er påkrevd også når --bundle-dir er oppgitt
run.py:2953 nekter enkeltprosjekt-modus uten --docs-dir, selv om docs_dir er ubrukt på
bundle-stien. Den dokumenterte kommandoen ville nektet av DEN grunnen også. READMEs egen form
(--docs-dir <bundle> --bundle-dir <bundle>) virker. Målt, rapportert, IKKE fikset.
FUNN 3 — annonseringen løy i det øyeblikket flagget fantes
announce leste _DEFAULT_* direkte. Det var korrekt kun så lenge main() ikke kunne gjøre annet.
Målt på den første gratis-turen etter at flaggene landet: samme stdout sa
Stops at: 3 rounds / 100000 tokens to linjer over max_rounds=8, max_tokens=120000.
Annonseringen er det ENE som printes før første betalte kall, og hele jobben dens er å si hva
kjøringen vil gjøre — Fase-3-klassen, innført av nettopp det flagget som annonseres.
Fikset (commit a61a3cc); M16 (les konstantene igjen) → 1 rød, den armen alene.
Prediksjonen fra gratis-trinnet, notert FØR betaling
Alle fire dry-runs stoppet rent (rc 0) og sa det samme:
Cost baseline: NONE in the bundle — this run is un-anchoredGrounding offer: N distinct identifier(s) and **0 cost line(s)** … every candidate it invents will be refused as ungrounded
| Sett | Identifikatorer | Kostlinjer | Tegn |
|---|---|---|---|
| gate-nordvik (n100) | 435 | 0 | 437 129 |
| tunnel-hauglia (n500) | 272 | 0 | 389 103 |
| fv412 (n200) | 982 | 0 | 1 441 501 |
| kontrakt-sorasen (r761) | 3 | 0 | 6 561 594 |
Predikert utfall: 0 validerte. Se § 4 for hva som faktisk skjedde.
3. Kjøringene (DEL B3)
Parametrene ble endret underveis, hver gang med årsaken navngitt FØR ny kjøring (B3s regel).
| # | Sett | Base | Runder | Tak | rc | Observert | Veggtid | Maks RSS |
|---|---|---|---|---|---|---|---|---|
| 1 | gate-nordvik | n100 | 8 | 120 000 | 1 | 150 999 | 24,7 s | — |
| 2 | gate-nordvik | n100 | 8 | 500 000 | 1 | 530 881 | 114,0 s | 149 MB |
| 3 | gate-nordvik | n100 | 3 | 600 000 | 0 | 509 310 | 140,1 s | 149 MB |
| 4 | tunnel-hauglia | n500 | 3 | 600 000 | 0 | 255 418 | 73,5 s | 144 MB |
| 5 | fv412 | n200 | 3 | 600 000 | 1 | 604 159 | 121,1 s | 168 MB |
| 6 | fv412 | n200 | 2 | 900 000 | 0 | 523 633 | 176,0 s | 171 MB |
| 7 | kontrakt-sorasen | r761 | 3 | 900 000 | 0 | 104 905 | 218,7 s | 298 MB |
Totalt betalt: 2 679 305 tokens over sju kjøringer, hvorav tre døde på taket.
gpt-4-1-mini, profile azure, PACE_SECONDS=2, 0× 429.
Kostnad — IKKE VERIFISERT. Ingen faktura er lest. Med listepris for gpt-4.1-mini
($0,40/M inn, $1,60/M ut) og et antatt 90/10-forhold inn/ut lander 2,68 M tokens på
≈ USD 1,4 ≈ NOK 15. Inn/ut-forholdet er ikke målt — token_usage er en totalsum — så tallet
er et anslag med en uttalt antakelse, ikke en måling.
R761 mot P13s referanse
P13 målte NAVIGASJON av r761 til 7,1 s / 131 MB (docs/2026-09-12-p13-okf-pin-r761.md).
En hel LEVENDE kjøring koster 218,7 s / 298 MB — 31× tiden og 2,3× minnet. De to måler ikke
det samme (navigasjon mot navigasjon + fire debattrunder + generering + validering), og
sammenligningen sier derfor bare at navigasjonen er en liten del av begge.
4. Dommen (DEL B4)
python -m portfolio_optimiser.stress contexts/<sett> --outbox-dir … --run-id …, fire
*-verdict.json skrevet.
| Sett | (a) grunnet | (b′) navngitt | (c) hallusinasjoner | a4 / must_refuse |
ferdig |
|---|---|---|---|---|---|
| gate-nordvik (n100) | 0 / 4 | 0 / 4 | 7 | PASS | nei |
| tunnel-hauglia (n500) | 0 / 4 | 0 / 4 | 5 | PASS | nei |
| fv412 (n200) | 0 / 4 | 0 / 4 | 6 | PASS | nei |
| kontrakt-sorasen (r761) | 0 / 4 | 3 / 4 | 9 | FAIL | nei |
Nevnere, alltid: tool_calls 18 / 16 / 12 / 18 · siteringer 1 784 / 810 / 2 266 / 11 024 · approach-rader 4 / 3 / 2 / 4 · konsepter i basen 446 / 270 / 1 133 / 2 756.
validated totalt: 2 av 20 rader, begge i r761 — a4 (falsifiseringsarmen) og own-proposal.
5. THE GOOD
- Stigen virker, og den virker på ekte korpus. Alle fire kjøringer gikk
list_bundles → read_bundle → read_dir → read_fileuten å bli instruert i det. r761 gikk rett ned iR761/6→R761/6/65— altså brukte den hierarkiet S7a-3 bygde, og betalte 104 905 tokens for den største basen, mindre enn n100 brukte på den minste. - Falsifisererne biter. 18 av 20 rader ble avvist, og alle med P7s stadium 0b, med identifikatoren navngitt i klartekst. Hver eneste avvisningsgrunn var sann.
- P8s forankringstilbud predikerte utfallet gratis. «0 kostlinjer» ble sagt før betaling og holdt i alle fire kjøringer.
- Artefaktene bar beviset. Dommeren trengte ingen ny instrumentering:
debate.json,proposal.jsonogoutcome.jsonsvarte på alt — også for de tre kjøringene som døde på taket, derdebate.jsonogrunconfig.jsonfortsatt lå der. - Alle fire dry-runs stoppet rent før første modellkall, og gjorde det etter at flaggfunnet var fikset.
6. THE BAD
6.1 Ikke ett fasit-konsept ble åpnet — 0 av 26, i 24 read_file-kall
| Sett | read_file |
distinkte | fasit ønsket | overlapp |
|---|---|---|---|---|
| gate-nordvik | 10 | 9 | 6 | 0 |
| tunnel-hauglia | 8 | 5 | 8 | 0 |
| fv412 | 4 | 4 | 6 | 0 |
| kontrakt-sorasen | 10 | 6 | 6 | 0 |
Det er hovedresultatet av stressrunden. Navigasjonen fungerer mekanisk og treffer ikke faglig.
Grunnen er lesbar i listingen: konseptfilene heter id-<uuid>.md, og read_dir gir name,
type, title, chars. På n100 må modellen velge blant 446 slike titler i ett svar.
LØSNING (navngitt, ikke bygget): gi directory_listing en valgfri, bundet filtrering på
req_number/title-delstreng — ett nytt argument på read_dir, samme rung, samme gate. Anslag:
én økt, ~6 armer, ingen ny flate i run.py. Alternativ b: la read_bundle returnere basens egen
index.md-body når den er prosa (n-basene har ingen), som ikke hjelper her — derfor a.
6.2 (b′)s snippet-arm er svak for KORTE referanser — et funn om min egen dommer
r761 ga named = 3 / 4, men named_in_measure var sann for kun 1 av dem. De to andre ble
båret av snippet-armen, og på r761 er referansene prosessnumre som 12.1 — som forekommer i
mange bodyer i et helbase-sitert stempel. Målingen på n100 (0 av 446 bodyer bærer Krav 4.1.2—1)
generaliserer altså ikke.
LØSNING: la snippet-armen kun telle når citation_scope == "narrowed", nøyaktig som (a).
Anslag: én linje + to armer. Ikke bygget i denne økten — dette er PMs beslutning, ikke min, fordi
det strammer ordrens egen definisjon en gang til.
6.3 En gjettet sti gir modellen en ugjennomsiktig feil
Målt 12 gjettede read_file-stier over de fire kjøringene (3 / 2 / 3 / 4). En sti som ikke finnes
reiser FileNotFoundError, som funn-99 eksplisitt holder utenfor _RETURNABLE_REFUSALS, så
modellen får MAFs "Error: Function failed." uten grunn. På n200 fyrte MAFs egen
Maximum consecutive function call errors reached (3). Stopping further function calls for this request. — altså ble verktøybruken avskåret midt i en forespørsel.
Korrigering av min egen første diagnose: jeg antok først at dette drev budsjettdøden. Det gjorde det ikke — mønsteret er 2× på hvert kall (to agenter, samme vandring), ikke en retry-loop.
LØSNING: utvid funn-99s returnerte-nekt-form til read_file på en sti som ikke finnes
(REFUSED (BundlePathNotFound): …), og skriv om den eksisterende armen
test_a_nonexistent_sibling_is_still_an_os_error. Anslag: én økt, ~8 armer, og den eksisterende
gaten må skrives om, ikke svekkes.
7. THE UGLY
7.1 Falsifiseringsarmen ble VALIDERT på r761 — og basens eget navn var kostkoden
a4-indeksregulering VALIDATED 250000 NOK
measure: "Kutt ved gunstigere indeksregulering av kontraktssummen"
affected_items: [{"code": "R761", "quantity": 1.0, "unit_cost": 10000000.0}]
checker_verdict: approve
p10/p50/p90: 2 876 396 / 3 004 495 / 3 126 462
a4 er ved konstruksjon ugrunnbar: rule U bekrefter at indeksregulering, nåverdi,
kostnadsestimat, markedspris og prisstigning alle er FRAVÆRENDE fra r761. Likevel passerte
den:
- den deterministiske validatoren — stadium 0 var hoppet over (uforankret base),
- P7s stadium 0b — fordi regelen er
code in grounding, en eksakt DELSTRENG uten mønster, og"R761"forekommer overalt i et 6,5 MB R761-korpus, - checkeren —
approve.
Modellen fant altså ikke på en kostkode som lignet på en ekte: den brukte basens navn.
unit_cost 10 000 000 er ren oppfinnelse, p10 ≈ p50 ≈ p90 fordi assumptions er tom (degenerert
Monte Carlo), og hele kjeden rapporterte validated.
P7-raden uttaler selv at regelen «har intet mønster» og at «rene tall er den ene inerte klassen».
Denne målingen legger til en andre inert klasse: korte, allestedsnærværende tokens — og den er
verre, fordi et rent tall ikke ser ut som en kostkode mens R761 gjør det.
LØSNING (navngitt, ikke bygget), rangert:
- (a) minstelengde + treffnevner. Krev at en identifikator er ≥ N tegn OG at den forekommer
i færre enn M distinkte konsepter — et token som står i 2 756 av 2 756 dokumenter identifiserer
ingenting. Anslag: én økt, ~10 armer, ingen ny flate. Nevneren finnes alt i
delivered. - (b) forankre mot det kjøringen ÅPNET, ikke mot hele korpuset.
debate_tool_callser alt kaller-eid og skrevet; en identifikator som kun står i dokumenter kjøringen aldri åpnet er ikke noe forslaget «bygde på». Anslag: én økt, ~8 armer. Strammere enn (a), men endrer hva stadium 0b betyr — PMs beslutning. - (c)
--require-cost-baselinesom default for mandatkjøringer mot uforankrede baser. Flagget finnes (F4) og ville nektet alle sju kjøringene før første kall. Det løser ikke 0b, men gjør «validated» umulig å utstede uforankret. Anslag: en partisjons-rad + en beslutning.
Ingen av dem er bygget her — ordren forbyr det eksplisitt.
7.2 Én katalogvisning er opptil 113× taket S7a-3 satte, og den rir hver tur
| Base | Konsepter | Nivåer | Rot | Verste listing | ~tokens | × 1 500-tegns-taket |
|---|---|---|---|---|---|---|
| n100-2023 | 446 | 4 | 118 ch | krav/N100 69 250 ch |
23 083 | 46× |
| n500-2024 | 270 | 4 | 118 ch | krav/N500 39 853 ch |
13 284 | 27× |
| n200-2024 | 1 133 | 4 | 119 ch | krav/N200 169 974 ch |
56 658 | 113× |
| r761-2025 | 2 756 | 2 758 | 171 ch | R761 110 874 ch |
36 958 | 74× |
S7a-3 binder 1 500 tegn per listing over de basene gaten kan se (de tre eksempelbasene), og
uttaler selv at K2s verste nivå er 6 073 tegn. De fire vegnormalbasene er 6,5–28× dét igjen, fordi
hierarkiet er FLATT: krav/ → krav/N100/ → 446 filer. Rung 2 hjelper ikke når korpuset er to nivåer
dypt med hundrevis av blader.
Konsekvensen er ikke teoretisk: tre av sju kjøringer døde på tokentaket, og n100 — den minste basen — trengte over 500 000 tokens ved 8 runder. Den dypt hierarkiske basen (r761) var den billigste.
LØSNING (navngitt, ikke bygget): paginer read_dir — offset/limit med et bundet vindu og
et total-felt, så listingen koster O(vindu) og modellen kan be om mer. Det er S7a-3s egen form
ett hakk videre, og annonsering av avkorting er alt løst der (index_truncated). Anslag: én økt,
~8 armer, gaten binder vinduet i TESTEN som i dag. Sekundært: la okf build i vegnormal-okf
sub-dele krav/N100 etter kapittel — men det er en produsent-endring i et annet repo, altså en
coord-sak, ikke vår.
7.3 Ordrens eget budsjett var 4,4× for lite, og ingen visste det
--max-tokens 120000 er publisert tre steder. Den minste basen brukte 509 310. At ingen visste
det er selve funnet: flaggene fantes ikke, så tallet hadde aldri vært brukt av noe.
8. Ærlighetsgrenser (uttalt)
- Én kjøring per sett. Ingen varians er målt. En andre kjøring av samme sett kan navigere annerledes; ingenting her sier hvor stabilt utfallet er.
- a4-armen beviser at ingen validert rad hviler på den — ikke at modellen forsto hvorfor.
Manuell lesning av de fire a4-utfallene (merket MANUELT): i n100 skrev modellen ekspertens
etikett ordrett som
measureog fant på kodengangfelt_opphoydmedunit_cost150 000 × 10 — ingen setning om at basen mangler grunnlag; 0b avviste den. I n500 og n200 ble a4 aldri evaluert (budsjettet var brukt opp før raden), så det finnes ingen tekst å lese. I r761 skrev modellen igjen etiketten ordrett og fant påR761. Ingen av de to a4-radene som faktisk ble evaluert uttalte at basen ikke bærer grunnlaget. Det er en annen og svakere observasjon enn «armen bestod» — og for to av fire sett er selv den observasjonen ikke gjort. - Parametrene varierer mellom settene (3/600k, 3/600k, 2/900k, 3/900k). n200 kjørte på 2 runder mot de andres 3. Tallene i § 4 er derfor ikke strengt sammenlignbare på tvers.
- Kostnaden er et anslag fra listepris, ikke lest fra faktura, og inn/ut-forholdet er antatt.
- Prosjektene er oppdiktet. Hvert
fasit.jsonsier i sitt egethonesty-felt hva som er konstruert: navn, lengder, ÅDT og alle beløp, samt a4 og dens kostkode. Kravene imust_citeer lest ordrett ut av basenes egen frontmatter. <project_id>kunne ikke leses av basen. Ordren ba om «det basens egen IR-projeksjon erklærer». MÅLT: ingen av de fire basene harvalidator-input.json, såload_optional_ir_projectionreturnererNone(S7b søm 1) og id-en er kaller-oppgitt. Settets eget navn ble brukt.- Dommeren leser HVA kjøringen åpnet og siterte, aldri om modellen FORSTO det.
9. Verifiseringslogg
| Påstand | Hvordan målt |
|---|---|
| 446/446 siteringer, 6/6 fasit-stier sitert før modellkall | bundle_citations mot navigert n100 |
0 av 446 n100-bodyer bærer Krav 4.1.2—1 |
telling over bundle.context_files |
--max-rounds/--max-tokens fantes ikke |
run.py --help + fire nektede dry-runs |
main() sendte dem aldri videre |
lesing av begge run_project-kallsteder + run_portfolio-kallstedet |
| annonseringen sa 3/100000 mot 8/120000 | samme stdout, gratis dry-run |
| listing-størrelser | okf.directory_listing over hvert nivå i hver base |
| token/veggtid/RSS | /usr/bin/time -l + provenance.token_usage i artefaktene |
| 0 overlapp fasit vs åpnede | debate.json read_file-stier ∩ fasit.must_cite |
a4 validert med code: R761 |
*-a4-indeksregulering-proposal.json + -outcome.json |
| rule U holder for alle a4-anchors | tests/test_context_sets_loadbearing.py::test_c_rule_u…, grønn |
| suite / golden | uv run pytest -q = 1670/5 · shasum -a 1 = ea8c534… |