portfolio-optimiser/docs/2026-09-15-p21-stressrunde-5.md
Kjell Tore Guttormsen f751a66bbe docs(p21): stress round 5 -- the first ANCHORED round, and what the anchoring cost
Five paid runs, rc 0 in all, 1 130 145 tokens (~NOK 7,6 under P20's stated list-price
assumption; no invoice read).

What the anchoring bought, measured off the artefacts rather than inferred from the
flag: cost_baseline_anchored true 6/6, and the falsification arm a4 passed 5 of 5 with
ALL FIVE caught by stage0-baseline -- the one stage that knows what the project buys.
Round 4, re-judged with the same instrument: 4 of 5, every one of them on stage 0b, and
the fifth VALIDATED.

C1 fired live and changed behaviour: distinct documents opened before a declaration went
1/1/1/2/5/13 -> 3/3/5/7/11/12, and THREE declarations were refused mid-run (15 calls, 12
recorded) after which the model read more and declared again. C2: read_dir against a
level the base does not hold fell from 16 of 104 to 8 of 128.

And what it cost, measured just as plainly: 0 of 20 approaches validated (round 4: 4).
All 26 rejections read "unknown cost code" -- because the schedule reaches the VALIDATOR
and never the prompt, and stage 0's refusal names HOW MANY codes the project has and not
WHICH. Step 5 feeds that refusal back verbatim, and "you guessed wrong, there are five
right ones" cannot be corrected. Contrast the magnitude arm, which names the baseline
value and therefore converges.

Four remaining findings, each with a NAMED solution and an estimate -- the first is one
sentence in _reconcile_against_baseline.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-15 12:08:51 +02:00

11 KiB
Raw Blame History

P21 — stressrunde 5, FORANKRET: fem betalte kjøringer mot prosjektets eget prisskjema

Dato: 2026-09-15 · Ordre: 20260915T063839Z-5960711173-from-.claude · Økt: 125 Kode: 7b4f85d (DEL A+B) · ac0bfdb (DEL C) · rapporten i denne commiten Miljø: Foundry gpt-4-1-mini, PACE_SECONDS=2, endepunkt hentet INLINE fra az (ekte vert aldri i sporet fil). Klientprobe: 1 passed før første betalte kall. Skript: scratchpad/p21/stress5.sh · scratchpad/p21/judge5.sh · scratchpad/p21/rejudge4.sh


0. Kortversjonen

Fire betalte runder hadde kjørt uforankret, alle sammen: validatorens stadium 0 — det ene stadiet som skiller en oppdiktet kostlinje fra en linje prosjektet faktisk kjøper — ble hoppet over i hver eneste, fordi prisen ble lett etter i KUNNSKAPSBASEN og en vegnormal bærer ingen priser. P21 ga prosjektet sitt eget prisskjema (--cost-baseline), og runde 5 er den første forankrede.

Det forankringen kjøpte, målt:

  • must_refuse (a4) bestått 5 av 5, og alle fem på stage0-baseline — mot 4 av 5 i runde 4, der alle fire som besto falt på stadium 0b (P7s grunnings-sjekk) og den femte VALIDERTE.
  • stop_reason tom 6 av 6, own-proposal evaluert 6 av 6 — som i runde 4.
  • C1 fyrte LIVE og endret atferd: distinkte dokumenter åpnet før en erklæring gikk fra 1 · 1 · 1 · 2 · 5 · 13 til 3 · 3 · 5 · 7 · 11 · 12. Tre erklæringer ble NEKTET underveis (15 kall, 12 registrert), og modellen leste mer og erklærte på nytt.
  • C2: read_dir-kall mot et nivå basen ikke holder falt fra 16 av 104 (15,4 %) til 8 av 128 (6,3 %).

Og det den kostet, målt like tydelig: 0 av 20 tilnærminger validerte (runde 4: 4 av 20). Hver eneste av de 26 avvisningene — 20 tilnærminger + 6 own-proposal — leser unknown cost code '<noe>': not in project <P>'s cost baseline (N known codes). Ingen kjøring kom forbi stadium 0, fordi prisskjemaet aldri når prompten og avvisningen oppgir hvor mange koder prosjektet har, aldri hvilke. Det er § 4 funn 1, og det har en navngitt løsning.


1. Hva som ble kjørt

sett base(r) run-id utboks
gate-nordvik-2027 n100-2023 gate-nordvik-2027-07 scratchpad/p21-stress/gate-nordvik-2027
tunnel-hauglia-2027 n500-2024 tunnel-hauglia-2027-07 …/tunnel-hauglia-2027
fv412-dekkefornyelse-2027 n200-2024 fv412-dekkefornyelse-2027-07 …/fv412-dekkefornyelse-2027
kontrakt-sorasen-2027 r761-2025 kontrakt-sorasen-2027-07 …/kontrakt-sorasen-2027
dekke-og-kontrakt-lindaas-2027 n200 + r761 (--across-bundle) lindaas-03 …/lindaas

Alle fem med --max-rounds 5 --max-tokens 600000 --cost-baseline contexts/<sett>/cost-baseline.json. Fri --live-dry-run på alle fem først: rc 0 og Cost baseline: N line(s) from … i alle fem, inkludert multi-base-passet, der linja printes ÉN gang for passet (ett prosjekt, ett prisskjema). Alle fem betalte kjøringer: rc 0.


2. Runde 3 / 4 / 5, samme instrument

Runde 4 er dømt på nytt med P21-dommeren (scratchpad/p20-stress/*/verdict-p21.out), så de to kolonnene under er målt med samme verktøy. Runde 3 står som publisert i P19/P20 og er IKKE re-dømt — den mangler anchored/priced/stage, og å fylle dem inn fra prosa ville vært å dikte et måleresultat.

runde 3 runde 4 runde 5
anchored (ikke målt) False 6/6 True 6/6
validerte tilnærminger 1/32¹ 4/20 0/20
fasit-grunnet (a) 1/32¹ 2/20 1/20
requirement_hit 0/13 0/13 0/12
named (b) 1/20 1/20
hallusinerte koder 23 26
priced 0/20 0/20
a4 must_refuse bestått 2/4 4/5 5/5
a4 — hvilket stadium fanget (ikke målt) stage0b ×4, ingen ×1 stage0-baseline ×5
gjettede lesestier (dommeren) 17 14
stop_reason tom 0/5 6/6 6/6
parse-feil-filer 4 av 6 (1 rad) 4 av 6 (1 rad) 4 av 6 (2 rader)
tokens 2 679 305 896 492 1 130 145

¹ runde 3 + P17b talte over 32 rader; runde 4 og 5 er 20 rader (fire sett à fire + to à to). De to nevnerne er ulike og tallene er ikke direkte sammenlignbare — de står som publisert.

Per sett i runde 5: gate 102 048 · tunnel 178 157 · fv412 117 398 · sorasen 305 135 · lindaas/n200 133 635 · lindaas/r761 293 772.

Kostnad, med antakelsen uttalt: P20 anslo 896 492 tokens ≈ NOK 6 til listepris for gpt-4-1-mini. Samme antakelse, skalert: 1 130 145 tokens ≈ NOK 7,6. Ingen faktura er lest — dette er et anslag, ikke en måling av hva som ble belastet.


3. Hva hver del kjøpte (mål, ikke tilskriv)

DEL A+B — forankringen

Kjøpte: stadium 0 dømmer igjen. Det er ikke utledet fra at flagget ble sendt, men lest av artefaktene: provenance.cost_baseline_anchored er true i alle seks utbokser, og alle 26 avvisninger bærer stadium 0s egen setning. Falsifiseringsarmen faller nå på det stadiet som vet hva prosjektet KJØPER, i stedet for på det som bare vet hva som stod i teksten.

Kjøpte IKKE: en høyere andel riktige svar. Tvert imot — se § 4 funn 1.

Ærlighets-grense, uttalt: «a4 5 av 5» er sant og svakere enn det ser ut. Nevneren er en gate som avviste 20 av 20, så armen måtte ikke SKILLE noe denne runden. Den skarpe formen av dette kriteriet krever en runde der a1a3 kan validere; den kommer først når funn 1 er lukket.

DEL C1 — erklæringen som må ha lett

Kjøpte: at erklæringen koster en titt. Målt i de seks sporene:

sett distinkte dokumenter før erklæring (r4 → r5) declare-kall r5 registrert r5
gate-nordvik 1 → 3 2 2
tunnel-hauglia 1 → 5 3 2
fv412 1 → 3 3 2
sorasen 13 → 12 2 2
lindaas/n200 2 → 7 3 2
lindaas/r761 5 → 11 2 2

Tre erklæringer ble nektet live (15 kall, 12 registrert), og i alle tre tilfellene leste modellen mer og erklærte på nytt — nekten er en tur den kunne rette, som var hele formen.

Kjøpte IKKE: riktige erklæringer. requirement_hit er fortsatt 0 av 12. Å lese tre dokumenter i stedet for ett gjør ikke det tredje til det riktige. Se § 4 funn 2.

DEL C2 — nekten som navngir naboene

Kjøpte: færre gjetninger på katalognivå. read_dir mot et nivå basen ikke holder falt fra 16 av 104 til 8 av 128 — raten fra 15,4 % til 6,3 %. Den ellevedelte R761/4-3, 4.3, 4-2, 4-1, 4-0, 4-5, 4-6-vandringen fra runde 4 gjentok seg ikke.

Kjøpte IKKE: færre gjettede DOKUMENT-stier. read_file mot et dokument basen ikke holder gikk fra 2 av 38 til 7 av 52 (5,3 % → 13,5 %). Totalt gikk sti-bærende kall mot noe som ikke finnes fra 18 av 143 til 15 av 180. Uttalt: to ulike definisjoner er i omløp i denne rapporten — dommerens hallucinated_reads (filsystem-basert: 17 → 14) og målingen over (context_files-basert: 18 → 15). Begge peker samme vei; ingen av dem er den andre.


4. Gjenstående funn, hver med en navngitt løsning

FUNN 1 (nytt, og det største) — prisskjemaet når aldri prompten

Målt: alle 26 avvisninger er unknown cost code. Ingen av de 26 foreslåtte kodene står i prosjektets skjema; modellen fant på signalregulering_konstruksjon, elevated_crosswalks, VENTIL_IMP, RIGG01, Filtermateriale, bærelag_asfalt, MASSE_FORSTERKNING og tjue til. Den kunne ikke gjort annet: skjemaet sendes til VALIDATOREN, aldri til proposeren, og stadium 0s avvisning oppgir antallet kjente koder («5 known codes») og ikke ett eneste kodenavn. Steg 5 mater avvisningen ordrett inn i neste forsøks prompt — men en beskjed som sier «du gjettet feil, det finnes fem riktige» kan ikke korrigeres. Kontrast MAGNITUDE-avvisningen, som NAVNGIR baseline-verdien og derfor lot løkka konvergere i økt 94.

Løsning (navngitt, anslag ~0,5 økt): la stadium 0s ukjent-kode-avvisning NAVNGI kodene prosjektet faktisk har, slik magnitude-armen allerede navngir verdien — …not in project P's cost baseline (known codes: RIGG, ASFALT, …). Ett sted (validator.py _reconcile_against_baseline), ingen ny flate, og Steg 5 bærer det videre gratis. Ved store skjemaer må listen bindes (samme regel som katalog-utdraget: et fast vindu, aldri en andel).

Alternativ løsning (anslag ~1 økt), som IKKE anbefales alene: rendre skjemaet inn i proposer-prompten. Den gir modellen kodene før første forsøk i stedet for etter det første bomskuddet, men den er en ny prompt-flate med egen kostnad per kjøring, og den fjerner ikke behovet for at avvisningen er korrigerbar.

FUNN 2 (uendret fra P19/P20) — requirement_hit er 0

Målt: 0 av 12 erklæringer navngir et fasit-konsept, tredje runde på rad. C1 gjorde at kjøringene leser mer (1 → 311 dokumenter), og det flyttet ikke treffet.

Løsning (navngitt, anslag ~0,5 økt): declare_requirement svarer allerede med dokumentets EGEN tittel og req_number (P20/A1). Neste trinn er å gjøre svaret til en SAMMENLIGNING: ta approachens label og si om det erklærte kravet i det hele tatt handler om den — «du erklærte Krav 1.1—1 Generelle krav for Enklere rundkjøring; ingen ord fra labelen finnes i dokumentets tittel eller req_number». Det er en rapport, ikke en gate (en gate på ordoverlapp ville nektet legitime erklæringer), og den kan bygges og måles offline mot de seks sporene.

FUNN 3 (svakere enn i runde 4, ikke lukket) — gjettede DOKUMENT-stier

Målt: read_file mot et dokument som ikke finnes gikk 2/38 → 7/52. C2 hjelper på katalognivå og ikke her, fordi den nærmeste listbare forfaren til en gjettet dokumentsti ofte HOLDER dokumenter og ingen underkataloger — og da utelates nabolista (bevisst; en tom klausul er en setning uten innhold).

Løsning (navngitt, anslag ~0,3 økt): når forfaren holder dokumenter og ingen underkataloger, navngi i stedet inntil fem av DOKUMENTENE på det nivået, rangert på samme måte. Samme funksjon, samme kilde (context_files gjennom in_dimension), samme egenskap: hvert navn den gir fra seg resolverer.

FUNN 4 (uendret) — named er 1 av 20

Målt: bare sorasens a3-planum-stabilisering navnga et fasit-krav i sitt eget measure.

Løsning: ingen egen — dette er funn 2 sett fra den andre siden. Lukkes funn 2, er dette det som måler om det virket.


5. Ærlighets-grenser

  • Fem betalte kjøringer på ett spørsmål er ikke et utvalg. Én modell (gpt-4-1-mini), ett deployment, ett manus.
  • Alle beløp i de fem prisskjemaene er OPPDIKTET. Hvert setts honesty-felt sier det. Det som IKKE er oppdiktet er FORMEN: hver a1a3 har sin kostlinje, a4 har ingen, og sorasens koder er ekte R761-prosessnumre fordi en norsk vegkontrakt prises slik.
  • «a4 5 av 5» er målt under en gate som avviste alt. Se § 3.
  • Ingen faktura er lest. NOK-tallet er et anslag med antakelsen uttalt.
  • Runde 3 er ikke re-dømt og de tre kolonnene i § 2 er derfor ikke alle sammenlignbare.
  • Ordrens D2 ber om priced som hovedtall. Den er 0 av 20, og det er ikke en egenskap ved skjemaene: det er funn 1 målt fra den andre siden.