# Konsum-målingen på N100, N200 og N500 — hentet, resonnert og sitert, mot en LEVENDE modell > **Ordre `20260908T113200Z-46497613-from-.claude`.** «Ferdig» skulle bety at portfolio-optimiser > henter, resonnerer og siterer riktig fra hver av de tre bundlene med en levende modell. > Tre betalte armer i A-formen (`--prepass-payload`), én per bundle, samme oppsett som S7c. > Underlag: vegnormal-okf `docs/2026-09-08-n100-n200-n500-ferdig.md` (`6d953f8`), > llm-ingestion-okf worktree `llm-ingestion-okf-wt-o2c` @ `a37d5ce`. > > **Svaret er nei på alle tre — og de tre grunnene er ulike, målt, og eies av hvert sitt repo.** --- ## 0. Hva som ER målt, og hva som IKKE er det **MÅLT.** De tre tre-hashene reprodusert ordrett fra vegnormal-okfs melding. `okf.navigate_bundle` når 446 / 1 133 / 270 konsepter — po sin egen kode, mot V1s tall. Pre-passet leverer fasit-konseptet på **rang 1 av 8 på alle tre**, med default-kommandoen, ingen flagg. Kontraktsjekk exit 0 × 3. Klientproben grønn. Tre betalte kjøringer, rc 0 × 3, **NOK 0,21 av taket 5, 0 × 429**. Hver rolles prompter, prompt-tokens og leverandør-tokens. Hvert modellsvar ordrett. Nekten `--explore` + `--prepass-payload` (rc 1, null modellkall). Hvilke felt pre-passets utdrag faktisk bærer. **IKKE MÅLT.** **Én kjøring er én kjøring** — tre armer, ett spørsmål hver, én modell (`gpt-4-1-mini`), ett deployment. Ingen arm er gjentatt, så ingenting her sier noe om varians. At en ANNEN modell ville lest det samme kuttet annerledes er ikke målt. Om rangeringen holder for andre spørsmål enn V1s tre er ikke målt her (okf måler det). Ingen av de tre bundlene er faglig gjennomgått av meg — jeg sammenlikner mot konseptkroppen, ikke mot vegnormalen. **IKKE RØRT.** Ingen fil under `src/`. Ingen Azure-konfig. Ingen fil i vegnormal-okf eller i noen okf-checkout. Ingen push. --- ## 1. Kjent-positiv per bundle, FØR noe ble betalt Måleprotokollens stige: alt gratis først, så en feil i en betalt arm er attribuerbar. ```bash OKF=~/repos/llm-ingestion-okf-wt-o2c # ren worktree, a37d5ce, egen venv B=~/repos/vegnormal-okf/build/ferdig $OKF/.venv/bin/python3 $OKF/tools/okf_consume.py $B/n100-2023 \ --question "Hva krever Krav 3.3.1—13 i N100? Gjengi det sentrale vilkåret." --out payload-n100.json # ... tilsvarende for n200-2024 og n500-2024, DEFAULT-kommandoen, ingen flagg ``` | kjent-positiv | N100:2023 | N200:2024 | N500:2024 | |---|---|---|---| | `sha256-tree` reproduserer V1s ref | **JA** `5f288f2c…` | **JA** `c420b754…` | **JA** `eb74e987…` | | `okf.navigate_bundle` → konsepter | **446** (fasit 446) | **1 133** (fasit 1 133) | **270** (fasit 270) | | `Bundle.skipped` (ufulgte lenker) | 0 | 0 | 0 | | considered / withheld / delivered | 446 / 438 / 8 | 1 133 / 1 125 / 8 | 270 / 262 / 8 | | budsjett brukt av 120 000 | 8 939 | 21 102 | 9 085 | | **fasit-konseptets rang** | **1 av 8** | **1 av 8** | **1 av 8** | | `okf_contract_check` | **exit 0**, 14 regler, 0 funn | **exit 0**, 14 regler, 0 funn | **exit 0**, 14 regler, 0 funn | | `prepass.admit_payload` mot montert base | **OK** | **OK** | **OK** | | klientprobe `test_foundry_profile_live` | **1 passed** — kjørt FØR armene | (samme kjøring) | (samme kjøring) | `a37d5ce` gjør det den sier: fasit-konseptet står på **rang 1 på 3 av 3** med den flaggløse kommandoen. Nevnerne lukker mot V1 til konseptet. **Budsjettforbruket avviker fra V1s tall** (8 939 mot 8 977 · 21 102 mot 17 818 · 9 085 mot 10 517) — forventet, og det er selve fiksen: oppslags-omordningen leverer et ANNET sett med åtte utdrag enn den V1 målte. Deployment urørt, målt med `az cognitiveservices account deployment show`: `GlobalStandard`, `capacity` **100**, versjon `2025-04-14`, `Succeeded`. ### 1.1 En egenskap S7a-3 kjøpte, som først nå ble betalt for Alle tre basene erklærer `bundle_id` i rot-`index.md` (`vegnormal-n100-2023`) mens de er montert som `n100-2023`. Til 03.09 NEKTET `reconcile_bundle_id` nøyaktig det. Uten slakke-beslutningen (økt 81) kunne **ingen av de tre bundlene åpnes slik de er levert** — botemiddelet ville vært å montere dem på nytt for hånd, én gang per leveranse. Kjøringen sier avviket høyt i stedet: ``` Knowledge base: declares bundle_id 'vegnormal-n100-2023' (source: declared-index) but is mounted as 'n100-2023' — the DECLARED id is the identity, so every artefact this run stamps names 'vegnormal-n100-2023' ``` --- ## 2. Kjøreformen: po har INGEN oppslags-dør i A-form, og nekten er målt Ordren ba meg velge kjøreform og begrunne, og sa at en nekt er et funn. Den er det. **Debattens oppgave er hardkodet.** `run.py:1243`, ett eneste forekomststed: ```python result = await debate.run(f"Find a cost-saving measure for {project.id}.\nContext:\n{context}") ``` Ingen av `run_project`s **26 parametre** bærer et spørsmål, en prompt, et objective eller en task (målt med `inspect.signature`). Operatørens spørsmål når modellen KUN som pre-passets erklærte `question`-linje inne i `context`. **Den ene døra som bærer en operatør-prompt er `--explore`, og den er NEKTET med `--prepass-payload`:** ``` $ python -m portfolio_optimiser.run N100 --profile local --docs-dir B --bundle-dir B \ --explore "Hva krever Krav 3.3.1—13 i N100? …" --explore-config /dev/null \ --prepass-payload payload-n100.json run refused: --prepass-payload and --explore cannot be combined (the exploration navigates the whole knowledge base with the same four tools the payload withdraws, so the run as a whole would read far outside the cut it declares) # rc 1, null modellkall ``` **Valget, og begrunnelsen:** jeg kjørte A-formen som ordren spesifiserer, fordi det er den eneste formen som finnes for et deklarert kutt, og fordi den andre armen (`--prepass-seed`, som VILLE båret spørsmålet som `explore()`s prompt) er utenfor denne ordrens gjerde. Konsekvensen er målt og uttalt, ikke bortforklart: | | N100 | N200 | N500 | |---|---|---|---| | oppgavelinja modellen fikk | `Find a cost-saving measure for N100.` | `… for N200.` | `… for N500.` | | V1s spørsmål ORDRETT i prompten | ja, i **2 av 6** prompter | ja, i **2 av 5** | ja, i **2 av 6** | Modellen fikk altså både spørsmålet og fasit-teksten — men ble ALDRI bedt om å svare på spørsmålet. Det er ikke en feilkonfigurasjon; det er formen po har. --- ## 3. Tre betalte armer ```bash export PORTFOLIO_FOUNDRY_PROJECT_ENDPOINT=… # utledet INLINE fra `az`, aldri i fil export PORTFOLIO_MODEL_MAP=scratchpad/major2-live/model_map.json export PACE_SECONDS=2 uv run --with tiktoken python scratchpad/nbundler/live_nbundler.py {n100|n200|n500} # argv: --profile azure --docs-dir --bundle-dir # --proposal-review --outbox-dir … --run-id nb- --prepass-payload payload-.json ``` Innsprutspunktet er `run._default_factory` (Fase 4e). Alle roller LEVENDE. | | **N100** | **N200** | **N500** | |---|---:|---:|---:| | rc | 0 | 0 | 0 | | prompter totalt | **6** | **5** | **6** | | — debatt / generering | 3 / 3 | 3 / 2 | 3 / 3 | | proposer / checker | 5 / 1 | 4 / 1 | 5 / 1 | | prompt-tokens (o200k), debatt | 6 826 | 15 595 | 5 553 | | prompt-tokens (o200k), generering | 800 | 483 | 782 | | leverandør-input | 12 057 | 24 582 | 10 115 | | leverandør-output | 718 | 822 | 817 | | **429-svar** | **0** | **0** | **0** | | parse-feil-artefakt | **fraværende** | **fraværende** | **fraværende** | | verktøykall i debatten | **0** (A-form: verktøyene trukket) | **0** | **0** | | validator-dom | rejected (stage 4, P90) | **validated** | rejected (stage 4, P90) | | dom-nøkkel | `d7eeac666dbe88dc` | `7326ad0ec7353039` | `1059ab348ea87f48` | **Null parse-feil på tre ferske korpora.** `{run_id}-parse-failures.json` finnes ikke i noen av de tre utboksene, og filens tilstedeværelse ER signalet (økt 35). Den avledede grammatikken (Fase 1b funn 1b) ble akseptert av det levende endepunktet på tre korpora den aldri er testet mot — det lukker en av den radens uttalte ærlighets-grenser. **Steg 5 fyrer LEVENDE på begge de avviste armene.** Forsøk 2 og 3 bærer ordrett «your previous proposal was REJECTED by the deterministic validator», og påstanden faller monotont: | | forsøk 1 | forsøk 2 | forsøk 3 | |---|---:|---:|---:| | N100 `claimed_saving_nok` | 3 000 000 | 1 500 000 | 600 000 (P90 = 530 585) | | N500 `claimed_saving_nok` | 350 000 | 210 000 | 90 000 (P90 = 81 323) | --- ## 4. Målene (a)–(e), med nevner ### (a) Svarte modellen med det sentrale vilkåret i fasit-kravet? Ordrett sammenlikning mot konseptkroppen. **N100 — JA.** Fasit-kroppen er én setning, og modellen gjenga den **ORDRETT**: > «Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.» og resonnerte riktig om den (ÅDT ≤ 4 000 ⇒ planfri kryssing ikke påkrevd). Nøkkelordene `planskilt`, `ÅDT` og `4 000` står alle i svaret. **N200 — NEI.** Fasit er Krav 2.9.2—12, filterkriterier for friksjonsjordarter, med tabell 2.9.2—1. Nevner: **0 av 6** nøkkelord fra kroppen (`filterkriteri`, `friksjonsjordart`, `2.9.2`, `O90`, `D90`, `filter`) står i noe av modellens svar. Modellen resonnerte i stedet om grunnundersøkelser, fra et ANNET levert konsept. **N500 — NEI.** Fasit er Krav 10.2—2, tekniske bygg som egne brannceller. Nevner: **0 av 6** nøkkelord (`branncelle`, `brannsikker`, `teknisk(e) bygg`, `10.2`, `byggteknisk`). Modellen resonnerte om tunnelportaler, fra et annet levert konsept. **Mekanismen er målt, ikke gjettet:** modellen ble bedt om et kostnadsbesparende tiltak. På N100 ER fasit-kravet kostnadsformet (en terskel som lar deg sløyfe en dyr konstruksjon), så det å svare på oppgaven og å svare på spørsmålet SAMMENFALLER. På N200 og N500 gjør de det ikke, og modellen fulgte oppgaven den fikk. ### (b) Siterte den riktig konsept-id? Ordren gir to instrumenter. Begge rapporteres, og bare det ene er bærende. | | N100 | N200 | N500 | |---|---|---|---| | stempelets siteringer | 8 | 8 | 8 | | stempel ∩ delivered | **8 av 8** | **8 av 8** | **8 av 8** | | fasit-id i stempelet | **JA** | **JA** | **JA** | | **modellen navnga fasit-id-en** | **NEI** (navnga ingen id) | **NEI** (navnga `id-03418c46…`) | **NEI** (navnga `id-05152184…`) | **Stempel-lesningen kan ikke diskriminere, og er derfor ikke bærende.** Stempelet siterer de leverte konseptene MEKANISK, uavhengig av hva modellen leste — det ville vært `8 av 8` også for en kjøring der modellen leste ingenting. Det er repoets egen vakuøs-gate-klasse. Den bærende lesningen er hva modellen faktisk refererte, og der er svaret **nei på alle tre**. De to id-ene modellen DID navngi er begge ekte, leverte konsepter — bare ikke fasit. Konsept-id-en er tilgjengelig for modellen: `render_context` avgrenser hvert utdrag med `--- BEGIN DATA ---`. På N200 og N500 brukte modellen den; på N100 lot den være. ### (c) Hallusinerte den et kravnummer eller en verdi som ikke står i kroppen? Kjent-negativ: tall i modellens PROSA som ikke finnes i delivered-mengden, etter at UUID-fragmenter er fjernet (ellers teller instrumentet biter av ekte id-er som oppdiktede tall). | | N100 | N200 | N500 | |---|---|---|---| | kravnummer-formede tokens i prosa | ingen | ingen | ingen | | tall i prosa ikke i delivered | **0** | **0** | **0** | | konsept-id-referanser som ikke er levert | **0** | **0** | **0** | **(c) = 0 på alle tre i prosaen.** Modellen siterte kun det den hadde. To treff ble undersøkt og forkastet som instrumentfeil: N200s `03418` er et fragment av den ekte, leverte id-en `id-03418c46-…` (modellen skrev den uten `id-`-prefikset), og N500s `500` er normalens eget navn. **Men det strukturerte FORSLAGET er en annen sak, og der er det ett ekte funn.** N200s validerte forslag bruker to kostkoder: ```json "affected_items":[{"code":"03418c46","quantity":1,"unit_cost":15000000}, {"code":"03423b12","quantity":500,"unit_cost":4500}] ``` `03418c46` er et **kravnummer brukt som kostkode** — en ekte konsept-id, men ikke en kostlinje. `03423b12` finnes **0 ganger blant basens 1 137 filer** (målt). Det er en oppdiktet identifikator, formet som en ekte. Begge ble **VALIDERT**, fordi kjøringen er UFORANKRET og validatorens stage 0 derfor hoppes over — nøyaktig den defekten `--require-cost-baseline` (F4, økt 100) ble bygget for, og det første LEVENDE tilfellet av den. Kjøringen sa det selv, i klartekst: > `Cost baseline: NONE in the bundle — this run is un-anchored: the validator's stage 0 … is SKIPPED` Dette er ikke telt under (c) etter ordrens definisjon (tall i SVARET mot delivered-mengden), men å la det stå urapportert ville vært å bruke definisjonen som en gjemmeplass. ### (d) Kostnad Listepris, Azure Retail Prices API (`api-version=2023-01-01-preview`, `currencyCode='NOK'`, `armRegionName=eastus`), **hentet på nytt 08.09**, metere `gpt 4.1 mini Inp/Outp glbl Tokens`: input NOK 0,003734 / 1K, output NOK 0,014936 / 1K. | Kjøring | Prompter | Input | Output | NOK | |---|---:|---:|---:|---:| | N100 | 6 | 12 057 | 718 | 0,056 | | N200 | 5 | 24 582 | 822 | 0,104 | | N500 | 6 | 10 115 | 817 | 0,050 | | klientprobe | 1 | ~20 | ~5 | ~0,000 | | **SUM** | **18** | **46 754** | **2 357** | **NOK 0,21** | **NOK 0,21 — 4,2 % av taket på NOK 5. 429-svar: 0.** Takene (`max_rounds=3`, `max_tokens`, `max_attempts`) er URØRT, og ingen kjøring traff dem. ### (e) Nevner-vokabularet **Ikke brukt i noen av de tre armene.** `[sourced-not-sufficient]` og de øvrige markørene står 0 ganger i 17 modellsvar. Det nærmeste er N500s checker: «No other specific cost-saving tradeoffs were found within the given excerpt for N500» — riktig innhold, feil vokabular. Det er ærlig nok her: alle tre armene FANT noe å foreslå i kuttet, så ingen av dem var i posisjonen markøren finnes for. Kontrasten er S7 arm A, som brukte `[sourced-not-sufficient]` ordrett fordi kuttet der ikke bar svaret. --- ## 5. Hovedfunnet: kuttet leverer riktig dokument og fjerner nøkkelen spørsmålet stiller Dette er det som avgjør «ferdig»-dommen, og det ble målt fordi (a) falt på to av tre. Fasit-konseptets fil i basen bærer kravnummeret i frontmatter: ```yaml title: Krav 3.3.1—13 H1 – Nasjonal hovedveg, ÅDT < 6 000 og fartsgrense 80 km/t req_number: Krav 3.3.1—13 description: Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000. ``` Pre-passets utdrag bærer feltene `bundle_id · concept_id · sha256 · adjudication · trust_tier · bundle_id_inherited · text_sha256 · text · rank` — **ingen `title`, ingen `req_number`**. | kravnummeret i det modellen faktisk fikk | N100 `3.3.1` | N200 `2.9.2` | N500 `10.2` | |---|---|---|---| | i fasit-utdragets `text` | **NEI** | ja (kroppen navngir «Tabell 2.9.2—1») | **NEI** | | noe sted i hele det leverte kuttet | **NEI** | ja | **NEI** | Til sammenlikning, po sin EGEN `read_file` på samme fil returnerer hele fila — 774 tegn, inkludert `title` og `req_number`. Pre-passets utdrag er 98 tegn kropp. **Pre-passet RANGERER på kravnummeret** — det er hele `a37d5ce`s mekanisme, og den virker: rang 1 av 446. **Og så leverer det utdraget uten den nøkkelen.** Modellen får et avsnitt om planfrie kryssinger uten noe som helst som knytter det til «Krav 3.3.1—13». For to av tre bundler er spørsmålets identifikator dermed ikke til stede i modellens kontekst i det hele tatt. Dette er den strukturelle tvillingen til S7c-funnet: **der kjøpte låsene BYTENE, ikke STRUKTUREN; her kjøper rangeringen RIKTIG DOKUMENT, ikke NØKKELEN.** --- ## 6. «Ferdig»-dommen, ærlig, per bundle Kriteriet er ordrens: ferdig = (a) ja OG (b) ja OG (c) 0. | | (a) | (b) modell | (c) | **ferdig** | |---|---|---|---|---| | **N100:2023** | **JA** (ordrett) | NEI | **0** | **NEI** | | **N200:2024** | NEI | NEI | **0** | **NEI** | | **N500:2024** | NEI | NEI | **0** | **NEI** | **0 av 3.** N100 er nærmest: den gjenga fasit-vilkåret ordrett og hallusinerte ingenting; den navnga bare ikke konseptet den siterte. ### Hvem eier hva som mangler **llm-ingestion-okf eier én ting, og den er skarp.** Utdragsformen i `okf-consumption/1` bærer `text` uten `title`/`req_number`. Rangeringen er FIKSET og god (rang 1 × 3 med flaggløs kommando) — det er leveransen som mister nøkkelen. Et spørsmål stilt på en identifikator kan ikke besvares på en identifikator som ikke ble levert. **Dette er ikke en ny nekt eller et flagg: det er ett felt til per utdrag.** **vegnormal-okf eier ingenting her.** Bundlene bærer `title`, `req_number`, `description` og riktig kropp; indekstreet lukker (0 ufulgte lenker × 3); tre-hashene reproduserer; nevnerne stemmer. Kroppene er de riktige kroppene. Det er ingen innholdsmangel i noen av de tre. **portfolio-optimiser eier kjøreformen, og det er den største posten.** A-formens oppgave er hardkodet til et kostnads-mandat, og den eneste døra som bærer en operatør-prompt (`--explore`) er nektet med `--prepass-payload`. **po kan ikke STILLE et oppslagsspørsmål i A-form.** Det som ble målt over er derfor det nærmeste A-formen kommer: fikk modellen fasit-teksten, og brukte den den? Ja på N100, nei på to — og på begge de to fulgte modellen oppgaven den faktisk fikk. ### Anbefaling til operatøren (beslutningen er din) 1. **Meld feltet til llm-ingestion-okf: la utdraget bære `title` (eller `req_number`).** Billigst, mest presist, og det eneste som gjør et identifikator-spørsmål besvarbart i det hele tatt. Kostnaden er noen titalls tegn per utdrag mot dagens 8 utdrag. 2. **Avgjør om po skal ha en oppslags-dør.** I dag finnes den ikke i A-form. Tre veier, ikke bygget her: (i) la `--prepass-payload` ta et operatør-spørsmål som debattens oppgave; (ii) løsne `--explore`-nekten under et deklarert kutt (Q5=B-armen `--prepass-seed` er allerede den formen, med verktøyene BEHOLDT); (iii) erklær at po ikke er et oppslagsverktøy og la «ferdig» bety noe annet enn V1s K0-spørsmål. **Dette er en beslutning, ikke en fiks.** 3. **Kjør N-bundlene med `--require-cost-baseline` neste gang det er en kostnadskjøring.** N200 validerte et forslag med en oppdiktet kostkode fordi kjøringen var uforankret. F4-flagget finnes allerede og ville nektet den. 4. **De tre bundlene kan IKKE kalles fullført på dette grunnlaget** — men det som mangler er ikke bundlene. Etter (1) er kriteriet på nytt målbart for under NOK 0,25. --- ## 7. Funn — rapportert, ikke fikset 1. **Pre-passets utdrag mister kravnummeret** (§ 5). Eier: llm-ingestion-okf. Nevner: 2 av 3 bundler har ikke identifikatoren noe sted i modellens kontekst. 2. **po har ingen oppslags-dør i A-form** (§ 2). Eier: po. `run.py:1243` er hardkodet; ingen av `run_project`s 26 parametre bærer et spørsmål; `--explore` nektes med `--prepass-payload`. 3. **En uforankret kjøring validerte en oppdiktet kostkode** (§ 4c). Eier: po (bruksmåte, ikke kode — F4-flagget finnes). `03423b12` finnes 0 av 1 137 filer. 4. **Nevner-vokabularet ble ikke brukt i noen arm** (§ 4e). Eier: uavklart. Ingen av armene var i posisjonen markøren finnes for, så dette er ikke bevis for at det ikke virker — det er en ubesvart nevner. 5. **Budsjettforbruket avviker fra V1s tall** på alle tre (§ 1). Forventet konsekvens av `a37d5ce`, ikke en defekt — nevnt fordi V1s tabell ellers ville lest som stale. --- ## 8. Ærlighets-grenser, uttalt - **Én kjøring er én kjøring.** Tre armer, ett spørsmål hver, ingen gjentakelse. Ingenting her måler varians, og et annet trekk fra samme modell kunne gitt et annet utfall på (a). - **(a) på N100 er ikke bevis for at kjeden svarer på oppslag.** Det er bevis for at fasit-teksten nådde modellen og ble brukt — og på N100 sammenfaller «svar på oppgaven» og «svar på spørsmålet» ved et sammentreff i kravets innhold. Sammentreffet er identifisert, ikke skjult. - **(b) er skåret på modellens referanse, ikke på stempelet**, fordi stempelet ikke kan diskriminere. Det er en skjerping av ordrens kriterium, ikke en oppmykning, og den er begrunnet. - **(c) = 0 gjelder PROSAEN.** Det strukturerte forslaget dikter opp kostkoder, som er strukturelt påkrevd (ingen baseline, og oppgaven krever et tall). Skillet er uttalt i § 4c. - **`--cost-vocabulary`, `--k` og `--rarity-weight` ble IKKE brukt.** Fasit sto på rang 1 med default-kommandoen på alle tre, så opt-in-flaggene var ikke nødvendige — ordrens betingelse for å bruke dem (`below_k`) inntraff aldri. - **Kuttet er verifisert mot den monterte basen** (`admit_payload` × 3), så payloaden kan ikke ha levert bytes basen ikke holder. Det er en gate, ikke en tillitserklæring til produsenten. - **Ingen av de tre bundlene er faglig gjennomgått.** Sammenlikningen i (a) er mot konseptkroppen slik den står, ikke mot vegnormalen. --- ## 9. Verifiseringslogg | # | Påstand | Slik den ble verifisert | |---|---|---| | 1 | Tre tre-hasher reproduserer | `payload.bundle.ref` mot vegnormal-okfs melding, 3 av 3 ordrett | | 2 | 446 / 1 133 / 270 konsepter | `okf.navigate_bundle(...).context_files`, po sin egen kode | | 3 | Fasit på rang 1 × 3 | indeks av fasit-id-en i `payload.excerpts`, default-kommando | | 4 | Kontraktsjekk exit 0 × 3 | `okf_contract_check.py`, 14 regler, 0 funn | | 5 | Klientproben grønn | `uv run pytest tests/test_foundry_profile_live.py -q` → 1 passed | | 6 | Deployment urørt | `az … deployment show` → GlobalStandard, 100, `2025-04-14` | | 7 | Debattens oppgave er hardkodet | `grep -n 'Find a cost-saving measure' src/` → ett treff, `run.py:1243` | | 8 | Ingen spørsmåls-parameter | `inspect.signature(run_project)`, 26 navn, 0 treff | | 9 | Nekten er ekte | argv kjørt → rc 1, meldingen ordrett, null modellkall | | 10 | Spørsmålet nådde modellen | ordrett delstreng i 2 av 6 / 2 av 5 / 2 av 6 prompter | | 11 | (a) N100 ja | fasit-setningen ORDRETT i svaret; `planskilt`/`ÅDT`/`4 000` alle til stede | | 12 | (a) N200/N500 nei | 0 av 6 nøkkelord fra hver fasit-kropp i noe svar | | 13 | (c) = 0 | tall i prosa (UUID-fragmenter fjernet) mot delivered-teksten; 2 treff undersøkt og forkastet som instrumentfeil | | 14 | `03423b12` er oppdiktet | 0 treff blant basens 1 137 filer | | 15 | Utdraget mangler `title` | feltlista i `payload.excerpts[0]`; kravnummeret ikke i `text` for N100/N500 | | 16 | po sin `read_file` bærer det | `navigator_tools(...)` → 774 tegn inkl. `req_number` | | 17 | Null parse-feil | `{run_id}-parse-failures.json` fraværende i alle tre utboksene | | 18 | Steg 5 fyrer levende | «REJECTED by the deterministic validator» i forsøk 2 og 3, begge armer | | 19 | Prisene | Azure Retail Prices API hentet på nytt 08.09 | | 20 | 0 × 429 | `retries`-telleren i alle 17 poster |