Ny § 4b i docs/2026-09-06-major2-levende-k2.md. Én betalt kjøring, samme
harness som § 4 (revise-armen, PACE_SECONDS=2, capacity 100).
AVVIK fra ordren, uttalt: ordren sier «fiksturene fra § 4 rad 6». Rad 6s BASE
er brukt (K2-priset-SYNTETISK-C), men rad 3/4s MANUS - rad 6s eget manus oppgir
kostlinja i mandatets begrunnelse, saa stage 0 fyrer aldri der og spoersmaalet
kunne ikke besvares. Alt annet er uendret.
Instrumentet validert mot en kjent positiv FOER bruk: rotnivaa-listingen paa
levert K2 = 3 954 tegn / 1 495 o200k-tokens over 629 konseptfiler (S7a-3s
publiserte tall, eksakt).
MAALT: forsoek 1 gir 1000/500 og avvises med BEGGE felt navngitt i én melding;
forsoek 2 svarer 1250/850 og VALIDERES, med ett forsoek til gode. Oekt 94 brukte
alle tre paa aa veksle mellom feltene og konvergerte aldri. Modellen trengte
aldri to runder for to felt - den trengte aa faa vite om begge.
Sluttdommen er likevel REJECTED, og det er D6 - ikke stage 0: ekspertens revise
ba om aa HALVERE anslaget, og forsoek 3 OEKTE det (150 000 -> 250 000) og brakk
begge feltene paa nytt. Validatorens siste dom vinner. § 5/§ 8s
etterlevelses-funn reprodusert uendret.
own-proposal er nå MAALT mot gaten (§ 4 kunne bare si «umaalt mot doera»): tre
forsoek, tre oppdiktede kostkoder, hver avvist med den UENDREDE
én-setnings-formen for ukjent kode.
Sidefunn: funn (c)s DirectoryPathRefused fyrte LIVE tre ganger med peker til
read_dir, der ab747bc var stod en IsADirectoryError paa krasj-kanalen.
Kostnad: estimat FOER NOK 0,54; faktisk 42 946 input + 1 606 output =
NOK 0,1843 = 3,7 % av taket paa 5. 0 stk. 429. Takene URØRT.
Ingen ekte Azure-vert i sporet fil (<resource>-maskering; lekkasjesjekk kjoert
etter git add). 1387/5, ruff+mypy rene, golden BYTE-UENDRET
(shasum -a 1 av INNHOLDET = ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
Co-Authored-By: Claude <claude-opus-5>
389 lines
23 KiB
Markdown
389 lines
23 KiB
Markdown
# MAJOR-2 — den levende K2-målingen
|
||
|
||
> **Måledato:** 2026-09-06
|
||
> **Ordre:** `20260906T050506Z-8827117206-from-.claude` (operatørvalg 06.09: alternativ (b), alle
|
||
> fire kriterier; returnert 06:19Z på en kvoteverdi, gjenåpnet etter at operatøren sa ja til
|
||
> veivalg 1)
|
||
> **Kode målt ved:** `1f2a045` — ingen fil under `src/` eller `tests/` er rørt; hele målingen skjer
|
||
> i `scratchpad/major2-live/` gjennom `run._default_factory`, repoets egen dokumenterte
|
||
> injeksjonssøm (Fase 4e)
|
||
> **Utfall:** SC1, SC4, SC8 og SC13 er **MÅLT** mot en levende modell. Svaret på hovedspørsmålet er
|
||
> ikke det man ville antatt: døra virker mekanisk i hvert ledd, og modellen gjorde det **motsatte**
|
||
> av det eksperten ba om.
|
||
|
||
---
|
||
|
||
## 0. Hva som ER målt, og hva som IKKE er det
|
||
|
||
| Spørsmål | Status |
|
||
|---|---|
|
||
| Er auth/RBAC/endepunkt/deployment i orden? | **JA, målt** — ett-ords-proben grønn |
|
||
| Koster målingen mindre enn taket? | **JA, målt** — estimat NOK 2,01, faktisk brukt **NOK 2,15**, tak 50 |
|
||
| Er kvoteveggen fra 06:19Z borte? | **JA, målt** — § 2. 0 stk. 429 i ni kjøringer |
|
||
| Navigerer en LEVENDE modell kunnskapsbasen (S2c)? | **JA** — § 3, målt både 06:19Z og nå |
|
||
| **Når ekspertens ord proposer-prompten (SC4)?** | **JA, MÅLT** på det deklarerte oppsettet (§ 4 rad 6) — 2 av 6 genererings-prompter, ordrett. § 6 |
|
||
| **Kjøpes forsøket, og hentes det (SC13)?** | **JA, MÅLT** på samme oppsett — `honoured: true`, `attempts remaining` 2 → 0. § 6 |
|
||
| **Er forslag 2 forskjellig fra forslag 1 (SC1)?** | **JA, MÅLT** på samme oppsett — tre felt endret. § 5 |
|
||
| **Flytter utfallet seg (SC8)?** | **JA, MÅLT** på samme oppsett — 212 500 → 265 625 NOK. **Feil vei.** § 5 |
|
||
| Følger modellen instruksjonen? | **NEI, målt.** Den ble bedt om å halvere og økte med 25 %. § 5 |
|
||
| Ledger per fase mot 19 prompter / 19 776 tokens | **MÅLT** — § 7 |
|
||
|
||
**Les de fire MÅLT-radene sammen med § 4.** På 09-04-oppsettet URØRT nås review-døra ikke i det
|
||
hele tatt (seks kjøringer, tre distinkte årsaker); de fire kriteriene er målt på et oppsett der to
|
||
fikstur-detaljer er endret og deklarert. Begge halvdeler er funn, og den første er ikke den svake.
|
||
|
||
Ingenting under er utledet. Der noe ikke er målt, står det.
|
||
|
||
---
|
||
|
||
## 1. Kostnadsgaten
|
||
|
||
**Deployment** (målt med `az cognitiveservices account deployment show`, ikke hentet fra minnet):
|
||
`gpt-4-1-mini` → modell `gpt-4.1-mini`, versjon `2025-04-14`, **GlobalStandard**, på
|
||
`<resource>` / `<resource-group>` / eastus. **`capacity` er 100** etter operatørens trekk (var 10 da
|
||
ordren ble returnert), og deploymentets egne `rateLimits` leser nå **100 forespørsler / 60 s** og
|
||
**100 000 tokens / 60 s**.
|
||
|
||
**Det finnes ingen operatør-fil for `PORTFOLIO_MODEL_MAP`** — variabelen er usatt i skallet, og
|
||
`~/.zshenv`/`~/.zshrc` nevner den ikke (målt). Det pakkede `data/model_map.json` bærer fortsatt
|
||
`REPLACE-WITH-FOUNDRY-DEPLOYMENT`. Kartet for denne målingen er derfor
|
||
`scratchpad/major2-live/model_map.json` (utracket) — en måleartefakt, ikke en kodeendring.
|
||
|
||
**Listepris, Azure Retail Prices API** (`https://prices.azure.com/api/retail/prices`,
|
||
`api-version=2023-01-01-preview`, hentet **2026-09-06**), metere `gpt 4.1 mini Inp glbl Tokens` /
|
||
`gpt 4.1 mini Outp glbl Tokens`, `armRegionName=eastus`:
|
||
|
||
| | NOK / 1K tokens | USD / 1K tokens |
|
||
|---|---|---|
|
||
| input | **0,003734** | 0,0004 |
|
||
| output | **0,014936** | 0,0016 |
|
||
|
||
NOK-tallene er Microsofts **egne** NOK-listepriser fra samme API (`currencyCode='NOK'`), ikke en
|
||
valutakonvertering.
|
||
|
||
**Estimat FØR første betalte kall**, etter ordrens formel:
|
||
`(19 776 inn + 40 000 ut) × pris × 2 armer × 1,5 margin` = **NOK 2,01**.
|
||
|
||
**Faktisk forbruk, alle ni betalte kjøringer summert: 522 052 input + 13 137 output = NOK 2,15.**
|
||
Det er **7 % over estimatet og 4,3 % av taket på 50**. Overskridelsen har en navngitt grunn: ordren
|
||
forutsatte to armer, og målingen krevde ni kjøringer fordi de første seks ikke nådde review-døra
|
||
(§ 4). Ordrens punkt 4 («overstiger noe enkeltpost 100 000 tokens uten navngitt grunn, stopp og
|
||
rapporter») er ikke utløst: største enkeltkall er **5 798 tokens**. Én kjøring traff run-takets
|
||
100 000 tokens (§ 4, variant D på den udekkede basen) — det er takets egen mekanisme som fyrer, ikke
|
||
en enkeltpost. **Takene (`max_rounds` / `max_tokens` / `max_attempts`) er URØRT.**
|
||
|
||
---
|
||
|
||
## 2. Veggen fra 06:19Z — borte, og det er målt før noe annet ble startet
|
||
|
||
Ved returen var `capacity: 10`, og en isolert forespørsel på 3 000 tokens ble avvist med 429 etter
|
||
**150 s helt stille** — et tak per forespørsel som ingen backoff kan vente seg forbi. Operatøren
|
||
satte `capacity: 100`.
|
||
|
||
**En 60-sekunders bøtte kan ikke forklare det som ble målt ved returen**, så at kapasitetstrekket
|
||
løser det var en hypotese, ikke et faktum. Den avgjørende prøven ble derfor gjentatt ordrett **før
|
||
første arm ble startet**, som et nytt trinn på 14.08-stigen:
|
||
|
||
| Prøve | Ved `capacity: 10` (06:19Z) | Ved `capacity: 100` (nå) |
|
||
|---|---|---|
|
||
| 2 342 tokens | OK | — |
|
||
| 3 000 tokens | **429** | — |
|
||
| 3 742 tokens | — | **OK** (5,30 s, fakturert 3 755 inn) |
|
||
| 5 475 tokens | — | **OK** (2,99 s, fakturert 5 475 inn) |
|
||
| 4 000 tokens | **429** | — |
|
||
|
||
Veggen var altså gjennomstrømning. **0 stk. 429 i alle ni kjøringene under**, med
|
||
`PACE_SECONDS=2` (var 12, dimensjonert for capacity 10).
|
||
|
||
**Rettelse til dokumentet slik det sto ved returen:** kommandoen ble skrevet som
|
||
`az cognitiveservices account deployment update`. **Det verbet finnes ikke** — `az cognitiveservices
|
||
account deployment` har kun `create | delete | list | show` (målt mot `--help`). Riktig form er
|
||
`create` med samme modell, versjon og sku, siden ARM-PUT oppdaterer den eksisterende deploymenten:
|
||
|
||
```bash
|
||
az cognitiveservices account deployment create \
|
||
-n <resource> -g <resource-group> \
|
||
--deployment-name gpt-4-1-mini \
|
||
--model-name gpt-4.1-mini --model-version 2025-04-14 --model-format OpenAI \
|
||
--sku-name GlobalStandard --sku-capacity 100
|
||
```
|
||
|
||
På GlobalStandard er `capacity` en gjennomstrømnings-kvote, ikke en pris — faktureringen er per
|
||
token uansett, så kostnadsgaten er uendret av trekket.
|
||
|
||
---
|
||
|
||
## 3. S2c-navigasjonen, live (uendret funn fra 06:19Z, reprodusert)
|
||
|
||
`docs/2026-09-04-s2c-debatt-k2.md` lukket med ærlighets-grensen *«ingen levende modell har
|
||
navigert»*. Den var lukket allerede ved returen, og er reprodusert i hver kjøring siden. Debattens
|
||
proposer får kun PEKEREN (fast tekst + erklært `bundle_id` + antall konseptdokumenter + stigen) og
|
||
de fire navigatør-verktøyene, og går stigen uoppfordret:
|
||
|
||
```
|
||
list_bundles → read_bundle("k2-trinn1-20260903") → read_dir("del-ii-bilag-7-prisskjema")
|
||
→ read_file("del-ii-bilag-7-prisskjema/prisskjema-SYNTETISK.md")
|
||
```
|
||
|
||
Fra 630 konseptdokumenter finner modellen prisskjemaet i **tre** navigasjonssteg.
|
||
|
||
**To nye navigasjons-funn, målt her:**
|
||
|
||
1. **Modellen forveksler katalog med fil.** `read_dir` på et nivå med underkataloger (`30-1`,
|
||
`30-7`, `521-001` …) ble fulgt av `read_file(".../30-7.md")` — modellen la på `.md`. Tre slike
|
||
på rad, og MAF stopper da videre verktøykall for den forespørselen («Maximum consecutive
|
||
function call errors reached»). Katalog-oppføringene i `directory_listing` bærer `documents`, men
|
||
modellen leste dem som filnavn.
|
||
2. **Én stor fil kan spise hele run-taket.** Prisskjema-katalogen i syretest-fiksturen bærer både
|
||
K2s ekte, *uprisede* sammenstillingsark (101 188 tegn ≈ 25 000 tokens) og den syntetiske,
|
||
*prisede* linja (637 tegn). I én kjøring åpnet debatten den store og traff run-takets 100 000
|
||
tokens før den var ferdig (`run refused: budget exceeded: tokens limit=100000 observed=100664`).
|
||
|
||
---
|
||
|
||
## 4. Hvorfor det tok seks kjøringer å komme fram til døra — hvert steg er en måling
|
||
|
||
Review-døra (`--proposal-review`) stiller sitt spørsmål **kun når validatoren har akseptert en
|
||
kandidat**. Seks kjøringer nådde den ikke, og hver ga et distinkt, reproduserbart funn. Alle seks
|
||
kjørte den samme argv-en og det samme skriptede utforsknings-manuset som `docs/2026-09-04-…`; det
|
||
som varierer er navngitt i hver rad.
|
||
|
||
| # | Variant | Utfall — stage 0 | Funn |
|
||
|---|---|---|---|
|
||
| 1 | 09-04-manuset ordrett, syretest-basen (approve) | `unknown cost code '21.1 grunnarbeider'` | Modellen kopierte mandatets **prosa** inn i kodefeltet |
|
||
| 2 | samme (revise) | **identisk** | Reprodusert i uavhengig kjøring |
|
||
| 3 | begrunnelsen sier «Kostkode 21.1» i stedet for «Post 21.1 grunnarbeider» | `quantity 1000 … utenfor 5 % rundt baseline 1250` | Koden nå riktig; mengden gjettet |
|
||
| 4 | som 3, uten det upriste 101K-arket | **identisk** | Proposeren **leste** det prisede skjemaet to ganger og gjettet likevel |
|
||
| 5 | begrunnelsen oppgir kostlinja (1250 m3 à 850) , syretest-basen | run-taket 100 000 tokens | Det upriste arket spiser budsjettet (§ 3, funn 2) |
|
||
| 6 | som 5, uten det upriste arket | **VALIDERT — døra åpner** | § 5 |
|
||
|
||
**Rotårsaken er semantisk, ikke en modellsvakhet.** `affected_items` skal bære **baseline**-linja
|
||
slik den står i prisskjemaet — det er dét stage 0 (S4.0) avstemmer mot. Genererings-prompten sier
|
||
kun `affected_items (list of {code, quantity, unit_cost})` og forklarer ikke hvilken av de to
|
||
mengdene den vil ha. En levende modell som blir bedt om å *redusere* utgravingsvolumet fyller
|
||
naturlig inn sin **foreslåtte reduserte** mengde (1000), og blir avvist. Det skriptede 09-04-manuset
|
||
skrev 1250/850 fordi et menneske skrev manuset og kjente regelen.
|
||
|
||
**Steg 5-løkka virker, men den oscillerer.** Stage 0 rapporterer **én** overtredelse om gangen, og
|
||
avvisningen mates tilbake i neste forsøks prompt. Målt sekvens i kjøring 3:
|
||
|
||
```
|
||
1000/500 → «quantity 1000 … baseline 1250» → 1188/350 → «unit_cost 350 … baseline 850»
|
||
→ 1000/850 → forsøkene brukt opp (max_attempts=3)
|
||
```
|
||
|
||
Modellen fant hver av de to riktige verdiene, men aldri samtidig: den retter feltet avvisningen
|
||
navngir og brekker det andre. Med `max_attempts = 3` per tilnærming rekker den ikke å konvergere på
|
||
to felt.
|
||
|
||
**Dette var funn, ikke fiks.** Alle tre — prompt-teksten for `affected_items`, at stage 0 kun
|
||
navngir første overtredelse, og at katalog-oppføringer leses som filnavn — bor i `src/`, som DENNE
|
||
ordrens gjerde holdt utenfor. De ble rapportert, ikke rettet.
|
||
|
||
**Alle tre er senere rettet under egne ordrer, og re-målt live:** (a) i `c6886ed`, (c) i `ab747bc`,
|
||
(b) i `78e8e39`. Re-målingen av (b) — og de to andres oppførsel live — står i **§ 4b**.
|
||
|
||
**De to fikstur-endringene er deklarert, og de forteller ikke modellen hva den skal foreslå.**
|
||
(a) Mandatets begrunnelse oppgir kostlinja slik dokumentet har den — det er hva en fagperson ville
|
||
skrevet. (b) Det upriste 101K-arket er fjernet fra en KOPI av basen; en ekte priset leveranse ville
|
||
båret prisene i selve skjemaet. Ingen av dem rører tilbakemeldingen, som er det som er under test,
|
||
og modellen ser den først ved review-døra.
|
||
|
||
---
|
||
|
||
## 4b. Re-måling etter funn (b): konvergerer Steg 5 nå på to felt?
|
||
|
||
Funn (b) er rettet i `78e8e39` — stage 0 navngir **alle** baseline-overtredelser i samme avvisning,
|
||
hver i uendret setningsform, sammenføyd med `; `. Dommen (D6) og takene er urørt.
|
||
|
||
**Én betalt kjøring, samme harness som § 4** (`scratchpad/major2-live/live_major2.py`, revise-armen,
|
||
`PACE_SECONDS=2`, deployment-`capacity` 100). **Avvik fra ordren, uttalt:** ordren sier «fiksturene
|
||
fra § 4 rad 6». Rad 6s **base** er brukt (`K2-priset-SYNTETISK-C`, uten det upriste 101K-arket), men
|
||
rad 6s **manus** oppgir kostlinja i mandatets begrunnelse — da fyrer stage 0 aldri, og spørsmålet
|
||
kan ikke besvares. Manuset er derfor rad 3/4s (`scripted-replies-kode.json`: begrunnelsen navngir
|
||
kostkoden, ikke tallene), som er nøyaktig der oscillasjonen ble målt. Alt annet er uendret.
|
||
|
||
**Instrumentet er validert mot en kjent positiv FØR bruk:** rotnivå-listingen på levert K2 måler
|
||
**3 954 tegn / 1 495 o200k-tokens over 629 konseptfiler** — S7a-3s publiserte tall, eksakt.
|
||
|
||
**Målt sekvens (proposer, genererings-kall, `max_attempts=3`):**
|
||
|
||
| # | Prompt bar | Svar | Stage 0 |
|
||
|---|---|---|---|
|
||
| 1 | (ingen tidligere avvisning) | `1000 / 500` | avvist — **begge felt navngitt i ÉN melding** |
|
||
| 2 | den nye to-setnings-grunnen ordrett | **`1250 / 850`** | **VALIDERT** — begge riktige samtidig |
|
||
| 3 | ekspertens `revise` (kjøpt forsøk) | `1000 / 500`, krav 250 000 | avvist — begge felt igjen |
|
||
|
||
Avvisningen forsøk 2 fikk, ordrett fra kjøringens stdout:
|
||
|
||
```
|
||
quantity 1000 for cost code '21.1' is outside the 5.0% tolerance around the baseline quantity 1250; unit_cost 500 for cost code '21.1' is outside the 5.0% tolerance around the baseline unit_cost 850
|
||
```
|
||
|
||
**Svaret er ja, og marginen er større enn spørsmålet ba om.** § 4 kjøring 3 brukte alle tre
|
||
forsøkene på å veksle mellom de to feltene og konvergerte aldri. Her konvergerte den på **det første
|
||
reviderte forsøket**, med ett forsøk til gode — review-døra åpnet med `attempts remaining: 1`.
|
||
Modellen trengte aldri to runder for to felt; den trengte å få vite om begge.
|
||
|
||
**Kjøringens sluttdom er likevel `REJECTED`, og det er D6 — ikke stage 0.** Ekspertens `revise` ba om
|
||
å **halvere** anslaget; forsøk 3 **økte** det (150 000 → 250 000) og brakk begge kostlinjefeltene på
|
||
nytt. Validatorens **siste** dom vinner, så tilnærmingen ender avvist. Det er § 5/§ 8s
|
||
etterlevelses-funn reprodusert uendret, på en kjøring der stage 0 ikke lenger er årsaken.
|
||
|
||
**`own-proposal` er nå MÅLT mot gaten** (§ 4 kunne bare si «validerte ALDRI — umålt mot døra»): tre
|
||
forsøk, tre oppdiktede kostkoder (`steel_struct`, `support_struct`), hver avvist med den **uendrede
|
||
én-setnings**-formen for ukjent kode. Den nådde aldri døra, og grunnen er fabrikkerte koder — ikke
|
||
oscillasjon.
|
||
|
||
**Funn (c) virker live, som sidefunn:** navigatøren kalte `read_file` på tre KATALOGER, og fikk
|
||
`DirectoryPathRefused` ved navn med en peker til `read_dir` — der `ab747bc` var, sto en
|
||
`IsADirectoryError` på krasj-kanalen. Orkestreringen stoppet etter tre påfølgende verktøyfeil, som
|
||
er dens egen mekanisme. Det gjenstående nabofunnet (`.md` på et katalognavn → `FileNotFoundError`)
|
||
er urørt og fortsatt åpent.
|
||
|
||
**Kostnad.** Estimat FØR: 80 000 inn + 4 000 ut × listeprisene i § 1 × 1,5 margin = **NOK 0,54**.
|
||
**Faktisk: 42 946 input + 1 606 output = NOK 0,1843** — **3,7 % av taket på 5**, og under estimatet.
|
||
**0 stk. 429.** 22 betalte prompter (proposer 17, checker 5); utforskningens tre roller er skriptet
|
||
som før. Største enkeltkall er godt under 100 000 tokens; takene er URØRT.
|
||
|
||
---
|
||
|
||
## 5. SC1 og SC8 — forslaget FØR og ETTER ekspertens ord
|
||
|
||
Begge armer kjørte identisk konfigurasjon; **det eneste som skiller dem er svaret på stdin.**
|
||
Kontrollarmen svarer `approve`, revise-armen svarer:
|
||
|
||
> `revise Anslaget er for hoeyt. Bare halvparten av mengden i denne kostlinjen er styrbar - halver
|
||
> claimed_saving_nok og behold de samme kostlinjene og forutsetningene.`
|
||
|
||
At kontrollen er en kontroll er **målt, ikke påstått**: begge armer produserte det **samme første
|
||
forslaget** — 212 500 NOK, dom-nøkkel `ee11886ddce76568`.
|
||
|
||
| Felt | Forslag 1 (begge armer) | Forslag 2 (etter `revise`) | Ba eksperten om det? |
|
||
|---|---|---|---|
|
||
| `claimed_saving_nok` | **212 500** | **265 625** | Ja — men om å **halvere**. Modellen økte **25 %** |
|
||
| `affected_items` | `21.1 · 1250 · 850` | `21.1 · 1250 · 850` — **uendret** | Ja: «behold de samme kostlinjene» ✅ |
|
||
| `assumptions["21.1"]` | `[750, 950]` | `[800, 900]` — **innsnevret** | Nei: «behold … forutsetningene» ❌ |
|
||
| `measure` | «Redusert utgravingsvolum i grunnarbeider» | «… **ved å halvere mengden styrbar volum i kostkode 21.1**» | Ikke bedt om, men den **siterer** tilbakemeldingen |
|
||
| dom-nøkkel | `ee11886ddce76568` | `4bf297e2e2ce4bc8` | — |
|
||
| `validator_decision` | `validated` | `validated` | — |
|
||
| `cost_baseline_anchored` | `true` | `true` | — |
|
||
|
||
**Utfallet (SC8): 212 500 → 265 625 NOK. Feil vei, og med et tall som passerte hele gaten.**
|
||
|
||
**Mekanismen bak feilretningen er målt, ikke gjettet.** Modellen leste «bare halvparten av mengden
|
||
er styrbar» som *«spar halve kostlinja»*:
|
||
|
||
```
|
||
forsoek 1 (uten feedback): 212 500 = 20,0 % av 1 062 500
|
||
forsoek 2 (MED feedback): 531 250 = 50,0 % av linja -> AVVIST av validatoren
|
||
forsoek 3 (avvisningen matet tilbake): 265 625 = 25,0 % -> VALIDERT
|
||
```
|
||
|
||
Den mente altså «halver mengden» der eksperten skrev «halver `claimed_saving_nok`» — og det tallet
|
||
eksperten faktisk ba om var 106 250. **Det som stoppet 531 250 var validatoren, ikke modellen.**
|
||
Dette er nøyaktig hvorfor D6 er som den er: **validatorens siste dom vinner, aldri revieweren sin.**
|
||
Hadde revieweren fått bestemme, ville et menneskes ønske om ett forsøk til ha forbedret utfallet
|
||
uten at noen falsifiserer sa ja.
|
||
|
||
**Ærlig lesning:** døra virker i hvert mekanisk ledd — ordene når prompten, forsøket kjøpes og
|
||
hentes, forslaget endrer seg, utfallet flytter seg og artefaktet bærer alt. **Det den ikke gir, er
|
||
at modellen etterkommer.** Ingenting i MAJOR-2 lovet det, og ingen test påsto det; men før denne
|
||
kjøringen var det ikke målt at den lar være.
|
||
|
||
---
|
||
|
||
## 6. SC4 og SC13 — når ordene fram, og ble forsøket kjøpt?
|
||
|
||
**SC4 — ordrett i prompten:** ekspertens setning står **ordrett i 2 av 6 genererings-prompter** i
|
||
revise-armen (og i 2 av 23 levende proposer-prompter totalt — de 17 andre er debatt-turer, som
|
||
aldri ser tilbakemeldingen). Nevneren er den samme som den skriptede målingen 09-04 fant: **2 av 6.**
|
||
De to er nøyaktig forsøk 2 og 3 for `hypothesis-1`; `own-proposal`s tre forsøk har den ikke, som
|
||
seg hør og bør — tilbakemeldingen tilhører den tilnærmingen den ble gitt om.
|
||
|
||
**SC13 — forsøket ble kjøpt, og det ble hentet.** `{run_id}-proposal-reviews.json`:
|
||
|
||
```json
|
||
{"approach_id": "hypothesis-1", "attempt": 0, "decision": "revise",
|
||
"feedback": "Anslaget er for hoeyt. ... halver claimed_saving_nok og behold de samme kostlinjene og forutsetningene.",
|
||
"honoured": true, "p50": 291467.85, "verdict_key": "ee11886ddce76568"}
|
||
{"approach_id": "hypothesis-1", "attempt": 2, "decision": "approve",
|
||
"feedback": "", "honoured": true, "p50": 319311.90, "verdict_key": "4bf297e2e2ce4bc8"}
|
||
```
|
||
|
||
Feedbacken står **ordrett** i artefaktet, `honoured: true` på begge, og terminalen viste
|
||
`attempts remaining: 2` ved review #1 og `0` ved review #3 — den ledger-bevisste nedtellingen
|
||
(M38) med ekte tall. Kontrollarmen skrev det samme artefaktet med **én** rad
|
||
(`1 approve, 0 revise`), og linja «proposal review: 2 answer(s) across 1 candidate(s) — 1 approve,
|
||
1 revise» er rendereren som rapporterer det.
|
||
|
||
**Ville en levende oppfølging blitt avvist?** Ja, én av dem ble det: forsøk 2 (531 250 NOK) falt hos
|
||
validatoren, og Steg 5 matet avvisningen tilbake. Den reviderte kandidaten som til slutt nådde
|
||
review #3 var altså **selv et produkt av to falsifiserere i serie** — mennesket og validatoren.
|
||
|
||
---
|
||
|
||
## 7. Ledger per fase, mot den skriptede profilen
|
||
|
||
**Ordren ber om at «§ 5-tabellens rader ‹Feedback → forbedret› og ‹Token› fylles med levende
|
||
tall». Ingen slik tabell finnes i dette repoet** — målt over 31 markdown-filer (`docs/*.md` +
|
||
README): 0 treff på en tabellrad som begynner med «Feedback», mens kjent-positiv-kontrollen viser
|
||
at samme regex finner eksisterende `| Token…`-rader i to andre dokumenter. Tabellen tilhører
|
||
ordre-avsenderens eget dokument. Radene er derfor besvart her: «Feedback → forbedret» i § 5 og
|
||
§ 6, «Token» i tabellen under.
|
||
|
||
Ordren ber om sammenligning mot `docs/2026-09-04-major2-proposal-review-k2.md:207` (19 prompter /
|
||
19 776 tokens). Sammenligningen er **like-for-like på utforskningen ved konstruksjon** — manuset er
|
||
det samme, så de 12 utforsknings-promptene er skriptede og ubetalte i begge — og **ikke**
|
||
like-for-like på debatt og generering, som her er levende og derfor navigerer og resonnerer fritt.
|
||
|
||
| | Skriptet (09-04) | LEVENDE kontroll (approve) | LEVENDE revise |
|
||
|---|---|---|---|
|
||
| utforskning | 12 prompter / 18 355 tok | 12, skriptet (ubetalt) | 12, skriptet (ubetalt) |
|
||
| debatt: proposer | 2 / 314 tok | **15 / 29 030 inn / 1 026 ut** | **23 / 62 654 inn / 1 572 ut** |
|
||
| debatt: checker | 1 / 199 tok | inkl. over: **5 prompter / 9 547 / 326** | **8 / 18 881 / 441** |
|
||
| generering | 4 / 908 tok | 3 forsøk (i proposer-tallet) | 6 forsøk (i proposer-tallet) |
|
||
| **prompter totalt** | **19** | **32** (20 levende + 12 skriptede) | **43** (31 + 12) |
|
||
| **betalte tokens** | — (ingen) | **38 577 inn / 1 352 ut** | **81 535 inn / 2 013 ut** |
|
||
| **kostnad** | — | **NOK 0,164** | **NOK 0,335** |
|
||
|
||
**Forskjellen er navigasjonen, ikke døra.** Den skriptede debatten svarte med ett fast utsagn per
|
||
tur; den levende går stigen, leser dokumenter og bærer resultatene videre i én delt samtale — det er
|
||
`docs/2026-09-04-s2c-debatt-k2.md` sin egen handel, målt live for første gang. **Døras egen kostnad
|
||
er den ene ekstra genererings-runden per revise**, og den er liten: revise-armen har 3 flere
|
||
genererings-forsøk enn kontrollen.
|
||
|
||
---
|
||
|
||
## 8. Ærlighets-grenser
|
||
|
||
* **Ett kall er én kjøring.** Alt i § 5 og § 6 er én modell, én gang, på ett korpus. At
|
||
`gpt-4.1-mini` gjør det motsatte av en tilbakemelding er målt her, ikke et utsagn om modeller
|
||
generelt eller om samme modell i snitt.
|
||
* **Fiksturen er endret to ganger for å nå døra, og begge er deklarert i § 4.** Målingen i § 5–7 er
|
||
derfor ikke «09-04-oppsettet med levende modell», men «09-04-oppsettet med en begrunnelse som
|
||
oppgir kostlinja og uten det upriste arket». Radene 1–6 i § 4 er hva det uendrede oppsettet gjør.
|
||
* **Prisene i basen er SYNTETISKE** (`K2-priset-SYNTETISK`) — K2 som levert har ingen priser
|
||
(målt, S7b). Tallene 212 500 og 265 625 er derfor ikke besparelser i Stange skole-anbudet; de er
|
||
besparelser i en syntetisk prising av det. Det gjelder SC8 uansett hvilken modell som kjører.
|
||
* **`own-proposal` validerte aldri i noen kjøring.** Den fant ingen ekte kostkode i en eneste av de
|
||
ni kjøringene (`RIG01`, `Prosjektering`, `VENT-01`, `Steel`, `Architectural_Design` …). Systemets
|
||
eget forslag er dermed **umålt** mot review-døra; alt i § 5–6 gjelder `hypothesis-1`.
|
||
* **429-forespørsler er antatt ikke fakturert.** Det er Azures dokumenterte oppførsel, men det er
|
||
ikke verifisert mot en faktura her. Her er det uansett uten betydning: 0 stk. 429.
|
||
* **Prisene er LISTEPRIS**, hentet 06.09.2026. Rabatter og avtaler er ikke reflektert.
|
||
* **Måleharnesset er ikke gatet av suiten.** `scratchpad/major2-live/live_major2.py` er en
|
||
måleartefakt som enhver annen `scratchpad/`-profiler; den asserteres ingen steder. Det som ER
|
||
gatet er `src/`, som er urørt, og suiten som er kjørt etter (§ 9).
|
||
* **`max_attempts` er ikke eksponert på CLI-en**, så § 4s oscillasjons-funn er målt ved defaulten 3.
|
||
Om en høyere verdi ville latt modellen konvergere er **ikke** målt — å heve den ville krevd en
|
||
endring i `src/`.
|
||
|
||
---
|
||
|
||
## 9. Etterkontroll
|
||
|
||
Ingen fil under `src/` eller `tests/` er rørt (`git diff --stat -- src/ tests/` tom). Suiten og
|
||
golden-fasiten er kjørt etter dokumentendringen; tallene står i commit-meldingen og i `STATE.md`.
|
||
Alle måleartefakter — de ni kjøringenes `*-records.json`, utboksene og de to fikstur-variantene —
|
||
ligger utracket i `scratchpad/major2-live/`.
|