portfolio-optimiser/docs/2026-09-16-p22-stressrunde-6.md
Kjell Tore Guttormsen 3f04f90261 docs(p22): stress round 6 -- the three findings closed, and what the closing exposed
Five paid runs, rc 0 on all five, 913 320 tokens, no round cap hit, anchored 6 of 6.

DEL A hit hard: naming the project's own cost codes in stage 0's refusal took `priced` from 0 of 20
to 16 of 20 and validated approaches from 0 of 20 to 10 of 20, with invented cost codes down from 26
to 12. The largest single movement any part has produced in six rounds.

DEL B moved a number three rounds had not: declarations pointing at an answer-key concept went
0 of 13 -> 0 of 12 -> 5 of 16, and requirement_hit per approach 0 of 20 -> 3 of 20.

DEL C halved the guessing: read_file against a document the base does not hold went 7 of 52 to
3 of 51, read_dir against a level it does not hold 8 of 128 to 2 of 97. Two of the three remaining
read_file misses got the NEW document clause, so DEL C fired live.

AND THE CLOSING EXPOSED SOMETHING LARGER. must_refuse -- the falsification arm, the one approach per
set the base has no ground for -- went 5 of 5 to 2 of 5. Three were VALIDATED. P21's 5 of 5 was not
sharp: it was achieved because the model invented a cost code, not because the base lacks ground.
The order predicted exactly this. Now the arm discriminates, and it says nothing in the gate speaks
to whether the base supports the direction. That is finding 1 and it stands first, with a named
solution and an operator decision attached.

Also recorded: the order's own cited figures re-measured with denominators before anything was built
on them. "requirement_hit 0 of 12" mixes a per-approach field (0 of 20) with the declaration count
(0 of 12); "0 of 20 validated" and "26 rejections" are two different populations (20 approach rows
vs 20 + 6 own-proposals); and the read-miss figures hold under the context_files definition while
the judge's filesystem one gives 6 of 52, not 7. Rounds 4 and 5 are re-judged with the same
instrument; round 3 is deliberately NOT, because filling in anchored/priced/stage from prose would
be inventing a measurement.

Honesty limits: five paid runs on one question are not a sample; every amount in the price schedules
is invented and the FORM is what is not; the cost figure is an ASSUMPTION at list price with no
invoice read; and must_refuse 2 of 5 is not evidence the system got worse, it is evidence the
previous measurement could not discriminate.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-16 01:50:40 +02:00

183 lines
10 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# P22 — stressrunde 6: de tre funnene fra P21 lukket, og hva lukkingen avdekket
> **⚠️ PRISENE ER OPPDIKTET.** Hvert beløp i de fem prisskjemaene under `contexts/*/cost-baseline.json`
> er en konstruert størrelsesorden, som hvert setts eget `honesty`-felt sier. **FORMEN er det som ikke
> er oppdiktet** — et prisskjema med `quantity`/`unit_cost` per kostkode er hva en norsk
> vegkontrakts mengdebeskrivelse faktisk er.
>
> **Fem betalte kjøringer på ett spørsmål er ikke et utvalg.** Seks kjøringer over fem prosjekter,
> én modell, ett deployment. Alt under er hva DENNE konfigurasjonen gjorde, ikke hva systemet gjør.
---
## 1. Kortversjon
P22 lukket de tre funnene P21 navnga, i rekkefølgen P21 satte, og kjørte så runde 6 forankret.
**DEL A traff hardt.** Stadium 0s ukjent-kode-nekt navngir nå kodene prosjektet faktisk kjøper.
`priced` gikk **0 av 20 → 16 av 20** og validerte tilnærminger **0 av 20 → 10 av 20**. Antallet
oppdiktede kostkoder falt fra 26 til 12.
**DEL B beveget det tallet tre runder ikke hadde beveget.** `declare_requirement` svarer nå med en
sammenligning mot kommisjonens egne retninger. Erklæringer som peker på et fasit-konsept gikk
**0 av 13 → 0 av 12 → 5 av 16**, og `requirement_hit` per tilnærming **0 av 20 → 3 av 20**.
**DEL C halverte gjettingen.** `read_file` mot et dokument basen ikke holder gikk **7 av 52 → 3 av
51**, `read_dir` mot et nivå den ikke holder **8 av 128 → 2 av 97**. To av de tre gjenværende
`read_file`-bommene fikk den NYE dokument-klausulen — altså fyrte DEL C levende.
**Og lukkingen avdekket noe større enn alt dette.** `must_refuse` — falsifiseringsarmen, den ene
tilnærmingen per sett som basen IKKE har grunnlag for — gikk **5 av 5 → 2 av 5**. Tre av dem ble
VALIDERT. P21s 5-av-5 var ikke skarp: den ble oppnådd fordi modellen fant på en kostkode, ikke
fordi kunnskapsbasen manglet grunnlag. Ordren forutså nøyaktig dette («i dag måtte armen ikke
skille noe, gaten avviste 20 av 20»). Nå skiller den, og den sier at **ingenting i gaten taler om
hvorvidt basen støtter retningen**. Det er funn 1 i § 4, og det står først.
---
## 2. DEL 0 — premissene re-målt før noe ble bygget
Ordren siterte seks tall fra P21-rapporten. Alle er re-målt mot artefaktene.
| Ordrens tall | Re-målt | Dom |
|---|---|---|
| 0 av 20 validerte | 0/20 tilnærminger — OG 0/6 egne forslag | **Holder.** Men neste setnings «26» er en STØRRE populasjon: 20 approach-rader + 6 own-proposals |
| 26 avvisninger, alle `unknown cost code` | 26/26 | **Holder** (populasjon = 26, ikke 20) |
| `requirement_hit` 0/12 | Feltet er per APPROACH: **0/20**. 12 er antallet ERKLÆRINGER (7 distinkte, 0 treff) | **Nevneren er feil som skrevet.** Begge er null, så konklusjonen står |
| gjettede dokumentstier 2/38 → 7/52 | **Holder** under `context_files`-definisjonen. Under dommerens FILSYSTEM-definisjon: 2/38 → **6/52** | To definisjoner i omløp, begge erklært av P21 selv |
| `read_dir` 16/104 → 8/128 | **Holder** under `context_files`. Filsystem: 15/104 → 8/128 | samme |
| `named` 1/20 | 1/20 | **Holder** |
| `priced` 0/20 | 0/20 | **Holder** |
**Klassifikator-grensen, validert i begge retninger som ordren krevde.** `priced` og
stadium-0-avvisningen er ikke to observasjoner — de er samme betingelse målt to ganger: `priced`
krever at HVER kode finnes i settets prisskjema, og stadium 0 avviser når NOEN kode ikke gjør det.
Over samme prisskjema er de komplementære ved konstruksjon. Ordrens «funn 1 målt fra den andre
siden» er altså strukturelt sant, ikke en observasjon. Ingenting lekker ut av klassen, og ingenting
ligger feilaktig inne i den.
Alle tall i denne rapporten er målt i denne økten. Runde 4 og 5 er dømt med **samme instrument** som
runde 6 (dommeren er urørt i P22, og begge er kjørt på nytt for å bevise det).
---
## 3. Sammenligningstabell, samme dommer
| | runde 4 (P20) | runde 5 (P21) | **runde 6 (P22)** |
|---|---|---|---|
| forankret (`anchored`) | 0 av 6 | 6 av 6 | **6 av 6** |
| validerte tilnærminger | 4/20 | 0/20 | **10/20** |
| `priced` (alle koder i prosjektets skjema) | 0/20 | 0/20 | **16/20** |
| oppdiktede kostkoder | 23 | 26 | **12** |
| `requirement_hit` (per tilnærming) | 0/20 | 0/20 | **3/20** |
| erklæringer som peker på et fasit-konsept | 0/13 | 0/12 | **5/16** |
| `named` | 1/20 | 1/20 | 1/20 |
| `grounded` | 2/20 | 1/20 | **3/20** |
| `read_file` mot dokument basen ikke holder | 2/38 | 7/52 | **3/51** |
| `read_dir` mot nivå basen ikke holder | 16/104 | 8/128 | **2/97** |
| gjettede lesestier i alt | 18/142 | 15/180 | **5/148** |
| `must_refuse` PASS | 4/5 | 5/5 | **2/5** |
| tokens | 896 492 | 1 130 145 | **913 320** |
| rc | 0 × 5 | 0 × 5 | **0 × 5** |
| rundetak truffet | 0 | 0 | **0** |
**Kostnad: ≈ NOK 6,1.** ANTAKELSE — listepris, skalert fra P21s egen antakelse på samme deployment.
**Ingen faktura er lest.**
---
## 4. Gjenstående funn, hver med en navngitt løsning
### FUNN 1 (nytt, og det største) — falsifiseringsarmen fanges ikke lenger av noe
**Målt:** `must_refuse` 2 av 5. Tre a4-armer ble VALIDERT:
| sett | tiltak | kostlinje | utfall |
|---|---|---|---|
| tunnel-hauglia | «Billigere enhetspris pa impulsventilator» | `TUN-VENT-01` 14 × 465 000 | validated |
| fv412 | «Lavere tonnpris pa resirkulert asfalt i bærelaget» | `DEKKE-BAER-01` 6 300 × 980 | validated |
| kontrakt-sorasen | «Kutt ved gunstigere indeksregulering» | `12.1` 1 × 6 400 000 | validated |
De to som falt, falt på `stage4-p90` (gate-nordvik) og `stage0-baseline` (lindaas/r761).
**Dette er en AVDEKKING, ikke en regresjon.** I runde 5 fanget stadium 0 alle fem — men fordi
modellen fant på kostkoden, ikke fordi basen mangler grunnlag for tiltaket. Ordren skrev det selv:
armen «måtte ikke skille noe». Nå bruker modellen den riktige koden, magnitudene ligger innenfor
toleransen, koden står i grunnlagsteksten (baselinens koder er én av stadium 0bs tre kilder), og
**ingen stage i gaten stiller spørsmålet falsifiseringsarmen er konstruert for**: har
kunnskapsbasen et krav som støtter denne retningen?
**Løsning (navngitt, anslag ~1 økt):** en stage som gater på ERKLÆRINGEN, ikke på tallene — et
forslag hvis tilnærming erklærte et krav som ikke deler ett ord med tiltaket, eller som ikke erklærte
noe krav i det hele tatt, kan ikke bære et `validated`-stempel. DEL B har allerede regnet ut
sammenligningen; det som mangler er å la den bety noe. **Dette er en operatørbeslutning**, ikke en
selvfølge: DEL B ble bygget som RAPPORT nettopp fordi et krav kan binde et tiltak uten å dele ett
ord med navnet noen ga det, og en gate på ordoverlapp ville avvist legitime forslag. En mellomting
finnes — gate på FRAVÆR av en erklæring, ikke på dens kvalitet — og den er billigere og ærligere.
### FUNN 2 — `named` står på 1 av 20, fjerde runde
**Målt:** 1/20, uendret gjennom fire runder. Ordren sa dette var funn 2 «sett fra den andre siden»,
og at DEL B ville måle det. **Den spådommen holdt ikke:** erklæringene ble klart bedre (0/12 → 5/16)
mens `named` sto stille. De er altså IKKE samme sak. `named` måler om modellens egen `measure`-tekst
eller et snippet navngir fasit-referansen; erklæringen er en egen kanal.
**Løsning (navngitt, anslag ~0,5 økt):** proposer-prompten ber om at `measure` gjengir tiltaket, ikke
kravet. Å be den gjengi det ERKLÆRTE kravets `ref` ordrett i `measure` — slik `approach.label`
allerede kreves gjengitt — koster én setning i `_build_messages` og gjør kanalen målbar. Merk at
dette gjør `named` til noe modellen blir BEDT om, hvilket svekker den som uavhengig måling; det er
en reell kostnad og skal uttales.
### FUNN 3 — tre gjettede dokumentstier står igjen
**Målt:** 3 av 51. To fikk DEL Cs nye dokument-klausul, én fikk underkatalog-klausulen. Ingen sto
uten hjelp. Restfeilen er altså ikke lenger «nekten sa ingenting», men «modellen gjettet likevel».
**Løsning:** ingen foreslått. 5,9 % er under runde 4s nivå, og en gate her ville rammet et
verktøykall som allerede blir besvart med de riktige navnene.
### FUNN 4 — `grounded` 3 av 20
**Målt:** 3/20 (runde 4: 2, runde 5: 1). Beveger seg svakt oppover. Ingen løsning foreslått i denne
runden; den henger sammen med funn 1 og bør vurderes sammen med den.
---
## 5. Hva hver del kjøpte, målt
### DEL A — nekten navngir kodene
**Kjøpte:** at løkka kan konvergere i det hele tatt. `priced` 0/20 → 16/20, validerte 0/20 → 10/20,
oppdiktede koder 26 → 12. Dette er den største enkeltbevegelsen noen del har produsert i seks runder.
**Kjøpte IKKE:** at forslagene er RIKTIGE. Se funn 1 — halvparten av bevegelsen er at
falsifiseringsarmen nå slipper gjennom.
### DEL B — erklæringen som sammenligner
**Kjøpte:** erklæringer 0/12 → 5/16, `requirement_hit` 0/20 → 3/20. Første bevegelse på tre runder.
**Kjøpte IKKE:** `named` (funn 2), og heller ikke en gate — sammenligningen er en rapport.
### DEL C — dokumentnavn når forfaren mangler underkataloger
**Kjøpte:** `read_file`-bom 7/52 → 3/51, `read_dir`-bom 8/128 → 2/97. Klausulen fyrte levende på
2 av de 3 gjenværende bommene.
---
## 6. Ærlighets-grenser
* **Fem betalte kjøringer på ett spørsmål er ikke et utvalg.** Seks kjøringer, fem prosjekter, én
modell, ett deployment. Ingenting her generaliserer til en annen modell.
* **Alle beløp i prisskjemaene er OPPDIKTET.** Formen er ikke.
* **Kostnaden er en ANTAKELSE** (listepris, skalert fra P21). Ingen faktura er lest.
* **`must_refuse` 2 av 5 er ikke bevis for at systemet er blitt verre.** Det er bevis for at den
forrige målingen ikke kunne skille. Begge utsagn er ubehagelige og begge er sanne.
* **Ingen del er bevist mot en annen modell.** At en LEVENDE modell korrigerer seg etter en navngitt
kodeliste er nå MÅLT for gpt-4-1-mini på dette deploymentet, og for ingen annen.
* **Runde 3 er ikke re-dømt.** Å fylle inn `anchored`/`priced`/`stage` fra prosa ville vært å dikte
et måleresultat.
* **De to lese-definisjonene er fortsatt to.** Alle tall i § 3 bruker `context_files`-definisjonen,
som er den DEL C er bygget fra. Dommerens `hallucinated_reads` er filsystem-basert og gir andre
tall for de samme kjøringene.