# Syretest S7 med pre-passet — K2 → kunnskapsbase → deklarert kutt → LEVENDE modell → revise **Dato:** 2026-09-07 · **Ordre:** `20260907T125216Z-9858825824-from-.claude` · **Grunnlag:** `~/.claude/docs/helhetlig-plan-okf-og-portfolio-optimiser.md` § 5, § 9.1/9.2 · **Forrige ledd:** `docs/2026-09-03-syretest-s7a-k2.md` (tørr) og `docs/2026-09-07-okf-prepass-i-debatten.md` (kuttet, uten levende modell). Dette er en **måling**. Ingen produksjonskode er endret; hele måleoppsettet ligger utenfor treet (`scratchpad/s7-prepass/`, utracket) og hver tabell under er produsert av en kommando som står i teksten. Fire defekter og tre felte premisser er **rapportert, ikke fikset** — det er ordrens egen regel. --- ## 0. Hva som ER målt, og hva som IKKE er det **Målt her:** at en **LEVENDE modell leser et rendret kutt** — den ene setningen `docs/2026-09-07-okf-prepass-i-debatten.md` § 6 sa ikke var bevist. Bundelen bygget fra råkorpuset på produsentens `fbaac6d`, dens identitet mot den leverte, pre-passets nevnere, kontraktsjekken, tre betalte armer (kutt/approve, kutt/revise, fri navigasjon/approve), tokenprofil per fase fra BudgetMiddleware-ledgeren og fra et uavhengig instrument, siteringene i stempelet, K5-terskelen med kjent-positiv kontroll, og kostnad i NOK mot Microsofts egne NOK-listepriser. **IKKE målt:** at en modell dømmer **bedre** med et deklarert kutt enn med fri navigasjon. Tre kjøringer på ett manus er ikke et utvalg, og de to armene endte på ulike forslag av grunner som ikke er isolert her. Samme klasse som structured-output-grensen. Heller ikke målt: at `sha256-tree` dekker hele treet (vi verifiserer de leverte dokumentene), og ikke at prisene i K2 er ekte — de er ikke fylt ut i det hele tatt, se § 2. **Kjent-positiv, kjørt FØRST og assertert i hvert eneste måleskript:** rotnivå-listingen på **levert** K2 måler **3 954 tegn / 1 495 o200k-tokens over 629 konseptfiler** — S7a-3s publiserte tall, eksakt. `scratchpad/s7-prepass/live_s7.py` `assert`-er på trippelen og nekter å kjøre videre hvis den ikke reproduseres; utskriften står øverst i hver armlogg. En andre, uavhengig kjent-positiv falt ut av § 1: `okf_consume.py` mot den leverte bundelen gir `sha256-tree:9a4e5561…a968b5`, ordrett refen `docs/2026-09-07-okf-prepass-i-debatten.md` § 1 publiserte. --- ## 1. Bundelen: bygget fra råkorpuset, og hva den er identisk med ```bash cd ~/repos/llm-ingestion-okf && git rev-parse --short HEAD # fbaac6d uv run okf build ~/corpora/okf-telling-20260829/K2/trinn1 \ --bundle /k2-bundle-s7 \ --bundle-id k2-trinn1-20260903 --okf-version 0.2 \ --ingested-at 2026-09-03T00:00:00Z --report /build-report.json ``` Ingen `--outline-run` / `--table-grid` — Arm B, produktveien slik den leveres. | Egenskap | Målt | |---|---| | Døra (bevaringsidentiteten) | `merged + coded rejections = 43; N = 43` ✔ | | — substantive / degenerate / rejected | **39 / 0 / 4** | | — avvisningskoder | `extractor_empty_pdf` 1, `extractor_unknown` 3 | | Veggklokke | **805,74 s** total, 18,738 s per fil | | Konverterer | pandoc **3.9** (pinnet, `pypandoc`-bundlet) | | Konseptfiler (`context_files`) | **630** | | Filer totalt (`files`) | 1 108 | | Ufulgte kryss-lenker (`skipped`) | **0** | | `bundle_id` / opphav | `k2-trinn1-20260903` / **`declared-index`** | | `ref` (`sha256-tree`) | `sha256-tree:4ffd750cec9b2905613bdd15167f8066b5165a0ce9c92a24c522f07fddf25273` | ### Byte-identisk med `K2-bundle-20260903`? **NEI** — og de 619 diffene er to ting, ikke tilfeldig støy ```bash diff -r /k2-bundle-s7 ~/corpora/okf-telling-20260829/K2-bundle-20260903 # exit 1, 3 093 linjer, 619 filer skiller seg, 0 "Only in" (identisk filsett) ``` | | Antall | |---|---| | Filer som skiller seg | **619** av 1 108 | | — kun på `ingested_at`-linja | **618** | | — rot-`index.md` (én linje) | 1 | | Filer bare i den ene | **0** | | Diff-linjer som ikke er `ingested_at` | **1** (`- [Corpus run history](log.md)`) | **(a) `--ingested-at` når 11 av 629 konsepter.** Den nye bundelen bærer `ingested_at: 2026-09-03T00:00:00Z` i **11** filer og standardverdien `1970-01-01T00:00:00Z` i **618**; den leverte bærer `2026-09-03` i alle **629**. De 11 er nøyaktig de udelte hel-dokument-konseptene (`inbox-*.md`); de 618 er de segmenterte. Flagget dokumenterer seg selv som «stamped verbatim», og det gjør det for én av to skriveveier. **Kryss-repo-funn for `llm-ingestion-okf`** — rapportert, ikke fikset (§ 10, funn 1). **(b) Rot-indeksen lenker `log.md` i dag; den leverte gjør det ikke.** Fila finnes i BEGGE (590 B, identisk), men navigasjonen følger kryss-lenker — så `navigate_bundle` returnerer **630** konseptfiler mot den leverte bundelens **629**. Korpus-kjøringens egen logg blir dermed et dokument agentene kan lese. Det er en produsent-side endring mellom 03.09 og i dag, ikke et avvik i konsumenten (§ 10, funn 2). **Refene skiller seg, og det er dét de er til for:** `4ffd750c…` mot `9a4e5561…`. `ingested_at` er innhold, så et tidsstempel som glapp forandrer treets hash — nøyaktig egenskapen som gjør en kjøring re-målbar. --- ## 2. Pre-passet: nevnerne, kontraktsjekken, og det kuttet ikke leverte ```bash uv run python tools/okf_consume.py /k2-bundle-s7 \ --question "Finn kostnadsbesparelser i Stange skole-anbudet" --out /payload-s7.json uv run python tools/okf_contract_check.py --skill skills/okf-consume/SKILL.md \ --payload /payload-s7.json # exit 0 ``` Spørsmålet er S7as mandat-spørsmål ordrett (`docs/2026-09-03-syretest-s7a-k2.md` § 2). | | Målt | |---|---| | considered | **630** | | withheld | **622** — `no_lexical_match` 359, `below_k` 261, `over_budget_alone` 2 | | delivered | **8** | | identiteten lukker | 630 = 622 + 8 ✔ | | kontraktsjekk | **exit 0** — «conformant: 14 rules over 8 excerpts and 622 withheld entries, 0 findings» | | payload på disk | 169 656 B / 57 332 o200k-tok | | **renderingen debatten ser** | **75 341 tegn / 22 283 o200k-tok** | | pekeren FØR-armen ser | 325 tegn / **99** o200k-tok | | veggklokke | ~0,8 s | ### Kuttet holder tilbake prisskjemaet, og det er dagens skarpeste funn For spørsmålet **«Finn kostnadsbesparelser …»** er `del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1` holdt tilbake under regelen **`below_k`**. Det er den eneste posten i hele K2 som bærer en pris (S7a § 6.2: post 82, 5 647 500 NOK), og med navigatørverktøyene trukket har debatten **ingen vei** til den. Dette er ikke en hypotese: **arm C i § 4 nådde nøyaktig det dokumentet, live, i fire steg.** Det gode spørsmålet fra 07.09 («Hva er enhetsprisen for kostkode 21.1 …») leverte det; det mandat-formede spørsmålet gjør det ikke. Kostnaden ved et kutt følger altså ikke bare hvor godt spørsmålet passer basen, men hvor **spesifikt** det er formulert — og et mandat er per konstruksjon bredt. **Kontroll som gjør observasjonen skarp:** kuttet er **identisk** på de to bundlene. Samme 8 leverte konsept-ider, samme regelfordeling bortsett fra den ene ekstra `no_lexical_match` (= `log.md`). `ingested_at`-driften i § 1 endrer altså `ref`, ikke kuttet. --- ## 3. Ordrens steg-3-kommando er STRUKTURELT NEKTET — premisset felt før noe ble betalt Ordren ber om `--explore … --prepass-payload … --plan-review`. Kjørt ordrett: ``` 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 ``` Og uten `--explore`, med `--plan-review` beholdt: ``` run refused: --plan-review requires --explore (there is no plan to review without an exploration, so the flag would be accepted and then never used) # rc = 1 ``` Begge nektene er **bevisste og gatede** (`docs/2026-09-07-okf-prepass-i-debatten.md` § 5, M32; F4). Kombinasjonen kan ikke kjøres, og en måling som omgikk nekten ville målt en flate som ikke finnes. **Det som ble kjørt i stedet, og hvorfor det er ordrens sak og ikke en erstatning for den:** ordren sier selv hva den måler — «ingen LEVENDE modell har lest et rendret kutt». Døra som gir en levende modell et rendret kutt er **debatten** (`--prepass-payload` uten `--explore`), og døra som gir et menneske en revise på det som ligger på bordet er **`--proposal-review`** (MAJOR-2), som ikke er nektet sammen med et payload. Steg 3 og steg 4 er derfor kjørt gjennom de to dørene som finnes. **Konsekvensen, uttalt:** ordrens steg 4 ber om et *forbedret mandat*. Uten utforskning finnes intet mandat, så det som er målt er *forbedret forslag* — § 5s egen ordlyd («Feedback → forbedret», «diff mellom første og andre forslag ikke tom»). **Utforskningens eget kutt er fortsatt uerklært**, akkurat som `docs/2026-09-07-okf-prepass-i-debatten.md` § 6 sa. Denne ordren lukker det ikke. --- ## 4. Tre betalte armer, samme base, samme spørsmål, samme økt Alle roller LEVENDE mot Foundry `gpt-4-1-mini`. Innsprutspunktet er `run._default_factory` (Fase 4e), ingen fil under `src/` er rørt. `PACE_SECONDS=2`, Azure-konfigen fra STATE **UENDRET**. ```bash uv run --with tiktoken python scratchpad/s7-prepass/live_s7.py {A|B|C} # argv: K2 --profile azure --docs-dir --bundle-dir --proposal-review # --outbox-dir … --run-id … [+ --prepass-payload for A og B] ``` | | **A — kutt, approve** | **B — kutt, revise** | **C — fri navigasjon, approve** | |---|---|---|---| | prompter totalt | **5** | 6 | **15** | | — debatt / generering | 2 / 3 | 2 / 4 | 7 / 8 | | BudgetMiddleware-ledger | **70 007** | 71 466 | **69 255** | | input-tokens (leverandør) | 69 043 | 70 084 | 67 846 | | output-tokens | 964 | 1 382 | 1 409 | | største enkeltkall (input) | 22 874 | 23 057 | **14 119** | | prompt-tokens, debatt (instrument) | **44 913** | 44 959 | **21 608** | | prompt-tokens, generering | 816 | 1 488 | 1 235 | | debatt-verktøy | **0** | 0 | 4 | | verktøykall | **0** | 0 | **10** | | **siteringer i stempelet** | **8** | **8** | **630** | | nevnere annonsert på stdout | **630 = 622 + 8, tre regler** | ja | **ingen** | | `{run_id}-prepass.json` | skrevet | skrevet | **ikke skrevet** | | utfall | **ValidatedProposal** | Rejection (§ 5) | ValidatedProposal | | 429 | 0 | 0 | 0 | **Deklarasjonen som når operatøren, ordrett fra arm A:** ``` Knowledge base: a DECLARED CUT was used — 8 of 630 concept(s) delivered, 622 withheld by rule: below_k (261), no_lexical_match (359), over_budget_alone (2). Base k2-trinn1-20260903 at ref sha256-tree:4ffd750c…f25273; cut computed for: Finn kostnadsbesparelser i Stange skole-anbudet ``` ### En levende modell brukte kontraktens eget nekt-vokabular Arm A, proposerens svar, ordrett: > `[sourced-not-sufficient for exact quantified saving estimate, but document clearly emphasizes marking breadth and durability, implying potential for cost savings by optimizing marking scope]` **Kontrollen er bærende:** markøren står **1** gang i renderingen modellen fikk (§ 4 i konsumkontrakten, gjennom `prepass.render_context`), og **1** gang i modellens svar. Den er altså ikke bare til stede i instruksjonen — den ble **brukt**, på nøyaktig det den finnes for: at de leverte dokumentene ikke bærer et kvantifisert anslag. **Første gang målt.** Motprøven, med nevner: markørene `withheld` (2), `622` (1) og `630` (2) står i renderingen, og **ingen av dem** forekommer i noe modellsvar i noen av de tre armene. Modellen tok altså *nekt-vokabularet* i bruk, men gjentok aldri *nevnerne*. ### Arm C nådde prisskjemaet — kuttets blindsone, målt `{run_id}-debate.json`, i kallrekkefølge: ``` list_bundles → read_bundle(k2-trinn1-20260903) → read_dir(del-ii-bilag-7-prisskjema) → read_file(del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1.md) → read_dir(del-ii-bilag-6-teknisk-oppsett) ← NEKTET → read_dir(del-ii-bilag-6-teknisk-oppsett.md) ← NEKTET → read_file(inbox-del-i-vedlegg-5-…-tildelingskriterier.md) → list_bundles → read_bundle → read_file(samme) ``` Fire steg til prisskjemaet, av 630 konseptdokumenter. **Det er dokumentet kuttet holdt tilbake.** **Prisskjemaet koster 4 075 o200k-tokens, ikke 100 000.** Fila er 101 067 **tegn**, men den er en pandoc SIMPLE table med lange mellomrom-løp, og de tokeniserer effektivt (24,8 tegn/token). Leverandørens egen delta for det kallet er ~4 130 tokens. **Dette nyanserer STATE-ens åpne K2-funn 4** («ett 101K-dok kan spise run-taket»): for *dette* dokumentet gjør det ikke det. De to dokumentene S7a § 1d målte til 121 462 og 119 909 **tokens** er prosa-PDF-er og en annen sak; de ble ikke åpnet her. ### Forankring: begge armer bygger på det de faktisk så Ordrens «refererte konsept-id-er ∩ delivered / refererte» er **ikke målbar** slik den er formulert: **nevneren er 0**. Ingen av de to kutt-armene skrev en eneste konsept-id-formet streng i noe svar — modellen refererer i prosa («the detailed section on marking in the technical general requirements»), aldri ved id. Rapportert som «ikke målt», ikke som null. Det som *kan* måles er om forslaget handler om noe som står i det armen så. Ordoverlapp er ubrukelig (modellen svarer engelsk, basen er norsk — en instrumentgrense, ikke et funn), så det er målt på de norske fagtermene: | Arm | Forslaget handler om | Målt i det armen så | |---|---|---| | A (kutt) | merking/gravering | `merking` 14 · `merkes` 21 · `gravert` 7 · `graverte` 6 — alle i **1 av 8** leverte utdrag (`…bilag-1-1-generelle-tekniske-krav`) | | C (navigasjon) | klimakriterier som tildelingskrav | `klima` 90 · `tildelingskriterier` 20 — i dokumentet navigatøren **åpnet** (`…vedlegg-5-begrunnelse-for-bruke-krav…`) | **Kontroll:** `merking` forekommer **0** ganger i prisskjemaet, altså i det arm C åpnet og arm A ikke fikk. De to forslagene er forskjellige fordi de to armene så forskjellige ting. --- ## 5. Revise-sløyfa: ordene når fram ordrett, og validatoren beholder siste ord ```bash # stdin: "revise Anslaget hviler paa dokumenter kuttet ikke leverte. Bind forslaget til # kostlinjer som faktisk staar i de leverte utdragene, og halver claimed_saving_nok." ``` | Ledd | Målt | |---|---| | Døra stilte spørsmålet | ja — `PROPOSAL REVIEW #2 — K2`, kandidaten validatoren nettopp aksepterte | | Tilbakemeldingen i artefaktet | **ordrett**, `honoured: true`, `attempt: 1`, dom-nøkkel `208da36e54abdfb7` | | Tilbakemeldingen i neste forsøks prompt | **ordrett**, i prompt #5 og **kun** der (nevner: 6 prompter) | | Forsøket ble kjøpt under EKSISTERENDE tak | ja — `attempts remaining: 1`, ingen ny løkke | | **Diff mellom forslag 1 og 2** | **ikke tom** (under) | | Endelig utfall | **Rejection** — `claimed saving 660000 exceeds P90 feasible 351981` | | stdout | `proposal review: 1 answer(s) across 1 candidate(s) — 0 approve, 1 revise` | | | Forslag 1 (validert) | Forslag 2 (etter revise) | |---|---|---| | kostlinjer | `RITB_Hours` 1200 × 850, `SystemIntegrator_Hours` 1000 × 900 | `RITB-HOURS` 500 × 1200, `SYSINT-HOURS` 400 × 1300 | | `claimed_saving_nok` | **320 000** | **660 000** | **Operatøren ba om å HALVERE anslaget; modellen DOBLET det.** Ordene nådde prompten ordrett, ble prosedyremessig etterkommet (`honoured: true` betyr at forsøket ble kjøpt og hentet et svar), og innholdet gikk motsatt vei. Så **validatoren avviste**. Det er MAJOR-2s **D6 i levende form**: *validatorens siste dom vinner, aldri revieweren sin* — mennesket er en tredje stemme som gater ingenting utover å be om ett forsøk til. Kjøringen ender ærlig på `Rejection`, ikke på et forbedret utfall ingen falsifiserer sa ja til. **Første forsøk (B1) nådde aldri døra**, og det står her fordi det er en egenskap ved målingen: med identisk argv bortsett fra stdin uttømte den første kjøringen `max_attempts` uten at noen kandidat validerte (`claimed saving 300000 exceeds P90 feasible 96196`), og stdout sa `proposal review offered, never consulted (no candidate validated)` — akkurat den raden MAJOR-2-invarianten innførte for at stillhet ikke skulle bli tvetydig. Begge kjøringene er betalt og talt i § 9. --- ## 6. Mot S7a (03.09, tørr) og mot dagens FØR-arm | | S7a 03.09 (skriptet) | 07.09 FØR, går stigen (skriptet) | **07.09 arm C, LEVENDE** | **07.09 arm A, LEVENDE + kutt** | |---|---|---|---|---| | base | 39 konsepter | 629 | **630** | **630** | | modell | skriptet | skriptet | **gpt-4-1-mini** | **gpt-4-1-mini** | | prompter | 13 | 10 | **15** | **5** | | prompt-tokens (instrument) | 40 320 | 7 031 | **22 843** | **45 729** | | verktøykall | 3 | 3 | **10** | **0** | | siteringer | — | 629 | **630** | **8** | | nevnere | ingen | ingen | **ingen** | **630 = 622 + 8** | **Like-for-like er de to siste kolonnene: +22 886 instrument-tokens (+100 %) og ti prompter færre.** Målt på leverandørens egen `usage` er forskjellen derimot **+1 197 tokens (+1,8 %)** (69 043 mot 67 846) — fordi arm C betaler for femten prompter med voksende historikk, mens arm A betaler for to store og tre små. **Kuttet er altså ikke dyrere i praksis her; det er dyrere per prompt og billigere per kjøring.** Det er en annen konklusjon enn 07.09s skriptede +51 %, og grunnen er at den skriptede FØR-armen bare gikk tre trinn mens en levende navigatør gikk ti. Tallene er **ikke** direkte sammenlignbare med S7as 40 320: den kjøringen var en *utforskning* på en 39-konsepts base, disse er *debatter* på en 630-konsepts base. --- ## 7. Falsifisering mot proveniens (K5-terskelen) **S7a § 4s premiss er ikke lenger sant om denne bundelen, og det er en korreksjon:** S7a målte `adjudication` til **0 av 39**. Dagens build bærer den i **618 av 630**, sammen med `segment_id`, `source_offset` og `bundle_id` — den segmenterte provenienss-formen B4 ble skrevet for. **Den leverte `K2-bundle-20260903` bærer nøyaktig det samme** (målt), så dette er ikke en endring i dag; det er S7as tall som gjaldt en eldre, usegmentert 39-konsepts bundle. Terskelen flytter seg likevel ikke, og det er poenget: | | K2 slik den er bygget | Kjent-positiv kontroll (patchet kopi) | |---|---|---| | `adjudication_for` (prisskjemaet) | **`proposed`** | `adjudicated` | | `(state, reason, items_seen)` | `(absent, None, 0)` | `(present, None, 1)` | | `trust_tier` | `None` | `human-reviewed` | | `admits_falsification` | **`False`** | **`True`** | Over alle 630, med nevner: `adjudication` `proposed` **618** / `unknown` 12 · `evidence.state` `absent` **630/630** · `trust_tier` `None` **630/630** · `admits_falsification` `False` **630/630**. **K5 hviler på `verified`, ikke på `adjudication`,** og `verified` er fraværende i hele korpuset (0/630, ved siden av `sources` 0/630). Kontrollen er bærende: uten den er «alle 630 diskontert» ikke til å skille fra «funksjonen diskonterer alltid». Kopien der ett konsept får `verified: { by: human:ktg, at: … }` flipper gaten `False → True`. Den bygde bundelen er aldri skrevet til. --- ## 8. Ordrens steg 6: premisset er felt, ikke bekreftet Ordren sier at nekten `IR projection not found in bundle: 'validator-input.json'` (S7a § 2) «er KJENT og forventet på K2 … dokumentér at den fortsatt nekter med samme melding». **Den nekter ikke lenger.** Målt mot HEAD, på en base uten fila: ```bash ls /validator-input.json # No such file or directory uv run python -m portfolio_optimiser.run K2 --bundle-dir --docs-dir --live-dry-run … # rc = 0 — "K2: LIVE-DRY-RUN OK …" ``` Grunnen står i CLAUDE.md: **S7b søm 1 (økt 83) gjorde IR-projeksjonen valgfri** (`okf.load_optional_ir_projection`), nettopp for at et ingestert anbudskorpus skulle kunne kjøre. Meldingen finnes fortsatt (`okf.py:1568`), men den fail-faste loaderen kalles ikke lenger fra `run_project`s bundle-arm; `verdicts.bundle_candidate_features` og `run.py:2038`s dispatcher-kilde er dens gjenværende kallsteder. De tre betalte kjøringene i § 4 er selve beviset: alle tre kjørte hele løkka på en base uten `validator-input.json`. **Bivirkningen er synlig og annonsert:** `Cost baseline: NONE in the bundle — this run is un-anchored`. Se § 10, funn 4. --- ## 9. Kostnad **Listepris, Azure Retail Prices API** (`api-version=2023-01-01-preview`, `currencyCode='NOK'`, `armRegionName=eastus`, hentet **2026-09-07**), metere `gpt 4.1 mini Inp/Outp glbl Tokens` — identiske med dem `docs/2026-09-06-major2-levende-k2.md` § 1 målte: input **NOK 0,003734 / 1K**, output **NOK 0,014936 / 1K**. | Kjøring | Prompter | Input | Output | |---|---|---|---| | A — kutt, approve | 5 | 69 043 | 964 | | B1 — kutt, revise (nådde ikke døra) | 7 | 70 604 | 1 452 | | B — kutt, revise | 6 | 70 084 | 1 382 | | C — fri navigasjon, approve | 15 | 67 846 | 1 409 | | klient-probe (`test_foundry_profile_live`) | 1 | ~20 | ~5 | | **SUM** | **34** | **277 597** | **5 212** | **NOK 1,036 + 0,078 = NOK 1,11 — 22 % av taket på NOK 5. 429-svar: 0.** Største enkeltkall er **23 057 tokens**; § 5s kriterium («ingen enkeltpost > 100 000 uten navngitt grunn») er ikke utløst. Takene (`max_rounds=3`, `max_tokens=100 000`, `max_attempts`) er **URØRT**, og ingen kjøring traff dem. --- ## 10. Funn — rapportert, ikke fikset 1. **`okf build --ingested-at` når 11 av 629 konsepter** (§ 1a). Segmenterte konsepter får standardverdien `1970-01-01T00:00:00Z` uansett hva flagget sier. Flagget dokumenterer seg selv som «stamped verbatim». Konsekvensen er at en bundle bygget med et eksplisitt tidsstempel ikke kan reproduseres byte-likt fra sitt eget råkorpus. **Kryss-repo, `llm-ingestion-okf`.** 2. **Rot-indeksen lenker `log.md`, som dermed blir et navigerbart konseptdokument** (§ 1b). `context_files` går 629 → 630, og korpus-kjøringens egen logg kan leses av agentene og siteres i stempelet. Om det er ønsket er produsentens avgjørelse; at det er en endring mellom 03.09 og i dag er målt. **Kryss-repo, `llm-ingestion-okf`.** 3. **`read_dir` på et katalogNAVN utledet av et konseptnavn nektes to ganger på rad** (§ 4). Live traff modellen `read_dir('del-ii-bilag-6-teknisk-oppsett')` og deretter `read_dir('…-teknisk-oppsett.md')` — begge `BundlePathNotFound`. Dette er STATE-ens åpne **K2-funn 3-resten**, nå observert på en fersk base med en levende modell. Nekten er korrekt (det er en konseptfil på rota, ikke en katalog), men den koster to runder. 4. **En uforankret kjøring er ærlig, men kandidaten er oppdiktet** (§ 8). Med `cost_baseline_anchored: False` er validatorens stage 0 hoppet over, og alle tre armene produserte kostkoder modellen fant på (`ENGRAVE_MARK`, `RITB_Hours`, `Material_Cost_Concrete`). Stage 2/4/5 dømte tallene mot hverandre og gjorde jobben sin, men **ingenting knyttet linjene til K2**. Det er nøyaktig S4.0s begrunnelse, sett i levende drift, og det er en grunn til at `--derive-cost-baseline` (MAJOR-4) hører sammen med en ekte leveranse. 5. **Kuttet holder tilbake prisskjemaet for et mandat-formet spørsmål** (§ 2). Ikke en defekt i noen komponent — pre-passet gjør nøyaktig det det sier — men den operative konsekvensen er at et deklarert kutt bestilt på et bredt mandat kan utelate det ene dokumentet analysen trenger, uten at debatten kan oppdage det. --- ## 11. Ærlighets-grenser, uttalt - **Tre kjøringer er ikke et utvalg.** At kuttet gir bedre eller verre forslag enn fri navigasjon er **ikke** vist; de to armene så ulike dokumenter og endte ulikt, og det er alt som er målt. - **Ordrens steg 3/4-kommando finnes ikke** (§ 3). Utforskningens eget kutt er fortsatt uerklært. - **B ble kjørt to ganger** fordi den første ikke nådde review-døra. Begge er talt i kostnaden, og at en av to kjøringer med identisk argv ikke validerte er en egenskap ved en levende modell — ikke ved døra. - **`sha256-tree` bæres, ikke re-beregnes.** Vi verifiserer de leverte dokumentene mot de monterte bytene; en endring i et dokument payloadet ikke leverte fanges ikke. - **Prisene i K2 er ikke fylt ut i det hele tatt.** Ingen validert besparelse er forventet eller funnet; S7bs syntetiske fixtur er ikke brukt her (den er S7bs sak, ikke denne ordrens). - **Ordoverlapp mellom engelsk modell-output og norsk base måler ingenting** (§ 4). Forankringen er derfor målt på fagtermer, som er svakere enn en id-join ville vært — og id-joinen er ikke mulig fordi modellen aldri skriver id-er. - **`--ingested-at`-funnet er målt på ÉN kjøring** av ett korpus. At det gjelder alle segmenterte skriveveier er ikke vist. --- ## 12. Verifiseringslogg | # | Påstand | Kommando → resultat | |---|---|---| | 1 | Instrumentet reproduserer publisert fasit | `live_s7.py` `assert` → 3 954 / 1 495 / 629, ordrett S7a-3 | | 2 | Refen på levert base reproduseres uavhengig | `okf_consume.py ` → `sha256-tree:9a4e5561…a968b5`, ordrett 07.09-dokumentet | | 3 | Døra lukker | `okf build …` stdout → `merged + coded rejections = 43; N = 43` | | 4 | Ikke byte-identisk, og hvorfor | `diff -r` exit 1, 619 filer, 618 kun `ingested_at`, 1 index-linje, 0 `Only in` | | 5 | Nevnerne lukker + kontrakt grønn | `okf_contract_check.py` → `conformant … 0 findings`, exit 0 | | 6 | Prisskjemaet er holdt tilbake | payload `withheld` → `del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1` = `below_k` | | 7 | Kuttet er likt på begge bundlene | de 8 leverte ider er identiske; eneste regeldiff er `log.md` | | 8 | Ordrens steg-3-kommando nektes | rc = 1, meldingen i § 3 | | 9 | Levende modell leste kuttet | `A-prepass-approve-records.json` → 2 debatt-prompter à 22 294 / 22 619 tok, rc 0, `ValidatedProposal` | | 10 | `[sourced-not-sufficient]` brukt | 1 forekomst i renderingen, 1 i proposerens svar; `withheld`/`622`/`630` i renderingen, 0 i svarene | | 11 | Siteringene | `provenance.citations` → **8** (A, B) mot **630** (C) | | 12 | Arm C nådde prisskjemaet | `{run_id}-debate.json` → `read_file(del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1.md)` | | 13 | Revise ordrett i neste prompt, og kun der | `B-prepass-revise-records.json` → treff i 1 av 6 prompter | | 14 | Validatoren beholder siste ord | `outcome.json` → `rejected`, `claimed saving 660000 exceeds P90 feasible 351981` | | 15 | Steg 6s premiss felt | `--live-dry-run` uten `validator-input.json` → rc 0 | | 16 | K5 diskriminerer | `m4_falsification.py` → `False` (630/630) vs `True` (patchet kopi) | | 17 | Pris hentet, ikke husket | Azure Retail Prices API 2026-09-07 → 0,003734 / 0,014936 NOK per 1K | **Ikke verifisert her:** at en levende modell velger *bedre* med et kutt; at `N=43` er produsentens riktige nevner (den er lest fra produsentens egen stdout, ikke uavhengig talt — men rå-katalogen har 43 filer, målt); at leverandørens caching traff prefiksene; at `--ingested-at`-funnet gjelder andre korpus. **Instrumentoppsett:** `scratchpad/s7-prepass/` (utracket) — `m0_known_positive.py`, `m1_render.py`, `m2_compare.py`, `m3_grounding.py`, `m4_falsification.py`, `live_s7.py`. `tiktoken` `o200k_base` via `uv run --with tiktoken`; fortsatt ingen prosjektavhengighet.