docs(s7c): both locks open, the price is delivered -- and the live model still did not read it [skip-docs]

S7c ran the whole chain on a knowledge base built at llm-ingestion-okf HEAD (6776c37):
raw corpus -> okf build -> pre-pass -> declared cut -> LIVE model -> deterministic
validator -> artefacts. Two paid arms, identical but for the payload. No production
code changed; every table names the command that produced it.

The chain works end to end. The door closes (43 = 39 + 4), all 629 concepts now carry
the stamp --ingested-at asked for (S7 measured 11 of 629, so F1 is really fixed), the
diff against the delivered bundle is ONE line, both contract checks exit 0, both arms
return rc 0 with zero 429s, for NOK 0.63 of the NOK 5 cap.

What it does not do is answer the question it was opened for. The priced table was
delivered at rank 10, its bytes reached 2 of 11 prompts with 5647500 verbatim six
times -- and none of the 11 replies used it. Measured why, not guessed: the excerpt is
a single-column pandoc SIMPLE table with whitespace runs of 887 characters between a
label and its amount, exactly the form F4 measured that derive_cost_baseline must
refuse. Opening both locks buys the BYTES, not the STRUCTURE.

Three premises felled before anything was paid for:
- the order's step-1 command cannot run (okf build requires --bundle-id/--okf-version);
- the order's known-positive was mis-paired: 58 401 is NOT the flagless default but
  --cost-vocabulary --k 12 --limit 120000. Both producer numbers reproduce exactly;
  the flagless default measures 57 289, so the price of the priced table is +8.5 %
  payload / +20.9 % rendered context, not +6.4 %;
- --plan-review is still structurally refused with a payload (rc 1, both combinations).

Recommendation to the operator (the decision is theirs): keep the flags OFF by default
-- measured gain nil, measured cost +20.2 % debate input and +29.6 % NOK on the one
open-cut run, which ended rejected. Keep them as opt-in; they do deliver the document.

Five findings reported, not fixed, two of them cross-repo (log.md is still a navigable
concept for po at 630 while okf considers 629; the priced form is unreadable as
rendered).

Suite 1511 passed / 5 skipped, ruff + mypy clean, golden demo-transcript.stdout
BYTE-UNCHANGED (shasum -a 1 of the CONTENT = ea8c534773acdbe41ae68f2c55724d69aaf8be4f).

Measurement: docs/2026-09-08-syretest-s7c-begge-laaser-k2.md
Order: 20260908T033950Z-4303132405-from-.claude

Co-Authored-By: Claude <Opus 5>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-08 07:00:47 +02:00
commit 648b36e9ad

View file

@ -0,0 +1,423 @@
# Syretest S7c — hele kjeden på fikset kunnskapsbase, med begge låser åpnet, mot en LEVENDE modell
**Dato:** 2026-09-08 · **Ordre:** `20260908T033950Z-4303132405-from-.claude` ·
**Grunnlag:** `docs/2026-09-07-syretest-s7-prepass-k2.md` (S7 — levende modell leste kuttet, men
kuttet holdt tilbake prisskjemaet), `docs/2026-09-07-prepass-mater-q5b-k2.md` (B tapte, A er
default), og produsentens to målinger `llm-ingestion-okf docs/2026-09-08-blindsone-below-k-k2.md`
(`4c699fd`) + `docs/2026-09-08-blindsone-laas2-budsjett-k2.md` (`6776c37`).
Dette er en **måling**. Ingen produksjonskode er endret; hele måleoppsettet ligger utenfor treet
(`scratchpad/s7c/`, utracket), og hver tabell under er produsert av en kommando som står i teksten.
Fem funn 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 hele kjeden — råkorpus → `okf build` på produsentens HEAD → pre-pass → deklarert
kutt → LEVENDE modell → deterministisk validator → artefakter — går ende til ende for et
**mandat-formet** spørsmål, i to armer som er identiske bortsett fra hvilket payload de fikk. Målt
er også hva den dyre halvdelen kjøper: om modellen faktisk **brukte** prisskjemaet når begge låser
er åpnet og bytene ligger i prompten.
**IKKE målt:** at en modell dømmer **bedre** med det åpne kuttet. To kjøringer på ett manus er ikke
et utvalg; armene endte ulikt (validert mot avvist) 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), at prisene i K2 er ekte (skjemaet er **ikke** fylt ut — se
§ 5), eller at leverandørens caching traff prefiksene.
**Kjent-positiv, kjørt FØRST og assertert i hvert måleskript** (`p_measure.py`, `live_s7c.py`
`assert`-er og nekter å kjøre videre): rotnivå-listingen på **levert** K2 måler
**3 954 tegn / 1 495 o200k-tokens over 629 konseptfiler** — S7a-3s publiserte tall, eksakt.
**To uavhengige kjent-positive til, mot produsentens egne tall, FØR noe ble betalt:**
`62 149` og `58 401` o200k-tokens er begge reprodusert til tokenet (§ 2), og den nye
`sha256-tree`-refen `f14872a0…` er den samme som produsenten publiserte.
---
## 1. Bundelen: bygget på okf HEAD, og hva den er identisk med
```bash
cd ~/repos/llm-ingestion-okf && git rev-parse --short HEAD # 6776c37 (rent tre)
uv run okf build ~/corpora/okf-telling-20260829/K2/trinn1 \
--bundle <scratchpad>/k2-bundle-s7c \
--bundle-id k2-trinn1-20260903 --okf-version 0.2 \
--ingested-at 2026-09-03T00:00:00Z --report <scratchpad>/build-report.json
```
**Premiss felt før noe ble kjørt:** ordrens steg-1-kommando utelater `--bundle-id` og
`--okf-version`. `okf build --help` sier at begge er **påkrevd med mindre `--segments off`**, så
kommandoen slik den står i ordren kan ikke kjøres. S7s verdier er brukt, ellers ville diffen mot
den leverte basen målt to ting samtidig.
| Egenskap | Målt |
|---|---|
| Døra (bevaringsidentiteten) | `merged + coded rejections = 43; N = 43` ✔ |
| — extracted / gated / persisted | 39 / 39 / 39 av 43 |
| — substantive / degenerate / rejected | **39 / 0 / 4** |
| — avvisningskoder | `extractor_empty_pdf` 1, `extractor_unknown` 3 |
| Konverterer | pandoc **3.9** (pinnet, `pypandoc`-bundlet) |
| Veggklokke, okf sin egen rapport | **789,20 s** total, 18,353 s per fil |
| Veggklokke, målt i skallet (start → `rc`) | **2 351 s** — differansen er ikke oppløst her |
| `ref` (`sha256-tree`) | `sha256-tree:f14872a01104e47474093611b1960c6c541e4701dc40147a00c8e1b337c8a92a` |
| `bundle_id` / opphav | `k2-trinn1-20260903` / **`declared-index`** |
| Ufulgte kryss-lenker (`skipped`) | **0** |
| Filer totalt (`files`) | 1 108 |
| Konsepter, **okf sin nevner** (`considered`) | **629** |
| Konsepter, **po sin navigasjon** (`context_files`) | **630** — se funn 2 |
### Diffen mot `K2-bundle-20260903` er ÉN linje
```bash
diff -r <scratchpad>/k2-bundle-s7c ~/corpora/okf-telling-20260829/K2-bundle-20260903
# exit 1 — 1 fil skiller seg, 3 diff-linjer, 0 "Only in"
45d44
< - [Corpus run history](log.md)
```
**F1 er reelt fikset.** S7 målte at `--ingested-at` nådde **11 av 629** konsepter; her bærer
**629 av 629** `ingested_at: 2026-09-03T00:00:00Z` (`grep -rh "^ingested_at:" | sort | uniq -c`).
Alle 629 konseptfiler er byte-identiske med den leverte basen.
**F2 er fikset på KONSUMENTSIDEN, ikke i bundelen.** Lenken `- [Corpus run history](log.md)` står
fortsatt i rot-`index.md`; produsentens eget pre-pass ekskluderer den (`considered` = 629), mens po
sin `navigate_bundle` følger kryss-lenker og teller **630**`log.md` ER i `context_files`.
Den leverte basen har verken lenken eller dokumentet i navigasjonen (629). Se funn 2.
---
## 2. To payloads på samme base og samme spørsmål — og ordrens kjent-positiv var feilparet
Spørsmålet er ORDRETT S7as og S7s mandat-spørsmål: `Finn kostnadsbesparelser i Stange skole-anbudet`.
```bash
# P-default (som S7: k=8, default limit, ingen flagg)
uv run python tools/okf_consume.py <base> --question "<spørsmålet>" --out payload-default.json
# P-åpen (begge låser)
uv run python tools/okf_consume.py <base> --question "<spørsmålet>" \
--cost-vocabulary --k 12 --limit 160000 --out payload-open.json
# den tredje konfigurasjonen, kjørt for å avgjøre hva 58 401 er
uv run python tools/okf_consume.py <base> --question "<spørsmålet>" \
--cost-vocabulary --k 12 --limit 120000 --out payload-okf-defaultlimit.json
uv run python tools/okf_contract_check.py --skill skills/okf-consume/SKILL.md --payload <hver>
```
| | **P-default** (flaggløs) | **P-åpen** (begge låser) | okf sin «default limit» |
|---|---|---|---|
| flagg | ingen | `--cost-vocabulary --k 12 --limit 160000` | `--cost-vocabulary --k 12 --limit 120000` |
| considered / withheld / delivered | 629 / 621 / **8** | 629 / 617 / **12** | 629 / 618 / 11 |
| identiteten lukker | ✔ | ✔ | ✔ |
| `below_k` | 261 | 267 | 266 |
| `no_lexical_match` | 358 | 349 | 349 |
| `over_budget_alone` | 2 | 1 | 2 |
| `over_budget_after_knapsack` | — | — | **1** |
| budsjett brukt / tak (B) | 79 440 / 120 000 | **150 249** / 160 000 | 82 399 / 120 000 |
| payload på disk (B) | 169 583 | 240 021 | 172 246 |
| **payload, o200k-tokens** | **57 289** | **62 149** | **58 401** |
| kontraktsjekk | **exit 0** (14 regler, 8 utdrag, 621 tilbakeholdt) | **exit 0** (14 / 12 / 617) | **exit 0** (14 / 11 / 618) |
| **prisskjemaet** | `below_k` | **LEVERT, rang 10 av 12** | `over_budget_after_knapsack` |
| rendering debatten ser (`render_context`) | 75 341 tegn / **22 284** tok | 145 237 tegn / **26 936** tok | — |
**Premiss felt: ordrens kjent-positiv paret to tall som ikke hører sammen.** Ordren ber om at
«58 401 / 62 149» reproduseres for henholdsvis P-default og P-åpen. `62 149` reproduseres eksakt.
`58 401` gjør det **ikke** for den flaggløse defaulten — den måler **57 289**. okf-meldingens egen
ordlyd er «the same run at the default limit», altså `--cost-vocabulary --k 12 --limit 120000`, og
den konfigurasjonen måler **58 401 eksakt**. Begge produsent-tallene er altså reprodusert; det var
parringen som var feil, ikke tallene.
**Konsekvensen for operatørens beslutning er ikke kosmetisk.** Prisen på prisskjemaet er
`+6,4 %` bare målt mot den tredje konfigurasjonen. Mot den defaulten som faktisk shipper og som
S7 kjørte, er den:
| Sammenligning | Tokens | Delta |
|---|---|---|
| payload: flaggløs default → P-åpen | 57 289 → 62 149 | **+4 860 (+8,5 %)** |
| **rendering debatten faktisk betaler for** | 22 284 → 26 936 | **+4 652 (+20,9 %)** |
| debatt-input hos leverandøren (§ 4, like-for-like) | 68 238 → 81 997 | **+13 759 (+20,2 %)** |
Payload-tokens er ikke prisen. Renderingen er, og den er **tre ganger** så dyr som +6,4 %.
---
## 3. Revise-steget: kombinasjonen ordren spør om er fortsatt STRUKTURELT NEKTET
Ordren spør om `--plan-review revise` «hvis kjeden tillater det uten å omgå en nekt». Målt på nytt
mot HEAD, på denne basen og dette payloadet:
```
run refused: --prepass-payload and --explore cannot be combined (…) # rc = 1
run refused: --plan-review requires --explore (…) # rc = 1
```
Begge nektene står (M32; F4), og de er S7 § 3s egne. Døra som finnes for et menneske i A-formen er
`--proposal-review` (MAJOR-2), og den er brukt i begge armer i § 4 — der ga arm Adef en `approve`,
mens arm Aopen aldri nådde døra fordi ingen kandidat validerte. **Nekten er funnet, ikke en
hindring:** utforskningens eget kutt er fortsatt uerklært, akkurat som S7 sa.
---
## 4. To betalte armer, A-formen, samme base og samme spørsmål
Alle roller LEVENDE mot Foundry `gpt-4-1-mini` (GlobalStandard, `capacity` **100**, versjon
`2025-04-14` — målt med `az cognitiveservices account deployment show`, ingen konfig rørt).
Innsprutspunktet er `run._default_factory` (Fase 4e); ingen fil under `src/` er rørt.
```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/s7c/live_s7c.py {Adef|Aopen}
# argv: K2 --profile azure --docs-dir <base> --bundle-dir <base> --proposal-review
# --outbox-dir … --run-id … --prepass-payload {payload-default|payload-open}.json
```
Den billige klient-proben (`tests/test_foundry_profile_live.py`) ble kjørt FØRST og var grønn —
måleprotokollens stige, så en feil i armene er attribuerbar.
| | **Adef — P-default** | **Aopen — P-åpen** |
|---|---|---|
| prompter totalt | **4** | **11** |
| — debatt / generering | 3 / 1 | 3 / **8** |
| leverandør-input | 68 810 | **86 331** |
| — debatt / generering | 68 238 / 572 | 81 997 / 4 334 |
| output-tokens | 1 076 | 2 103 |
| største enkeltkall (input) | 23 069 | 27 616 |
| prompt-tokens, debatt (instrument) | 45 334 | 54 533 |
| debatt-verktøy / verktøykall | 0 / **0** | 0 / **0** |
| **siteringer i stempelet** | **8** | **12** |
| `cost_baseline_anchored` | `False` | `False` |
| parse-feil (`{run_id}-parse-failures.json`) | **fila skrevet ikke** | **5** |
| `{run_id}-prepass.json` | skrevet, `rest_reachable: false` | skrevet, `rest_reachable: false` |
| **utfall** | **ValidatedProposal** (`51a0821dfb711fc2`) | **Rejection** (`65094b3648af8d7d`) |
| — validatorens grunn | — | `claimed saving 1400000 exceeds P90 feasible 879107` |
| proposal review | `1 approve, 0 revise` | `offered, never consulted (no candidate validated)` |
| **429** | **0** | **0** |
| **NOK** | **0,273** | **0,354** |
**Deklarasjonen som når operatøren, ordrett fra arm Aopen:**
```
Knowledge base: a DECLARED CUT was used — 12 of 629 concept(s) delivered, 617 withheld by rule:
below_k (267), no_lexical_match (349), over_budget_alone (1). Base k2-trinn1-20260903 at ref
sha256-tree:f14872a0…c8a92a; cut computed for: Finn kostnadsbesparelser i Stange skole-anbudet
```
### Kontraktens nekt-vokabular ble brukt i ÉN av to armer
Arm Aopen, proposerens første svar, ordrett:
> `… no direct cost-saving details are present in the available documentation [sourced-not-sufficient].`
Med nevner: markøren står i **2 av 11** prompter i Aopen og forekommer i **1 av 11** svar. I Adef
står den i 2 av 4 prompter og i **0 av 4** svar. S7s arm A brukte den; Adef — som er samme argv på
en fikset base — gjorde det ikke. **Én kjøring er én kjøring.**
Motprøven, med nevner, som i S7: nevnerne selv (`629`, `621`, `617`, `delivered`, `DECLARED CUT`)
står i 2 prompter per arm og i **0** svar i begge armer. Modellen bruker nekt-vokabularet, aldri
nevnerne.
### Forankring: begge forslag handler om noe armen faktisk så
| Arm | Forslaget handler om | Målt i det armen så |
|---|---|---|
| Adef | renhold: vinyl med PUR, veggmonterte skap, unngå åpne himlinger | `renhold` 66 i **2 av 8** · `vinyl` 7 og `PUR` 3 i **1 av 8** (`…bilag-1-2-renholdstekniske-funksjonskrav…`) |
| Aopen | prøvedrift: bedre forhåndskoordinering, færre gjentatte tester | `prøvedrift` **91** i **1 av 12** (`inbox-del-ii-bilag-1-1-…-generelle-tekniske-krav`) |
Dokumentet Aopens forslag hviler på er levert i **begge** payloads (rang 1). De fire ekstra
dokumentene det åpne kuttet kjøpte — prisskjemaet blant dem — formet altså ikke forslaget.
---
## 5. Kjernespørsmålet: brukte modellen prisskjemaet? **NEI — målt, med nevner**
Prisskjemaet (`del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1`, S7a § 6.2s post 82,
**5 647 500 NOK**) ble levert i P-åpen på rang 10, og bytene nådde prompten:
| | Adef | **Aopen** |
|---|---|---|
| `5647500` i **prompter** | 0 | **6 forekomster i 2 av 11** |
| `prissammenstilling` i prompter | 0 | 24 i 2 av 11 |
| `prisskjema` i prompter | 2 i 2 av 4 (omtale i et annet levert utdrag — kontroll: 1 forekomst i de 8 utdragene) | 6 i 2 av 11 |
| `5647500` / `prissammenstilling` / `prisskjema` / `pris` i **SVAR** | **0 av 4** | **0 av 11** |
**Bytene var der. Modellen brukte dem ikke i ett eneste av elleve svar.**
### Hvorfor, målt og ikke gjettet: FORMEN, ikke tilstedeværelsen
Det leverte utdraget er 67 245 tegn over **104 linjer**, og det er en pandoc **SIMPLE table med ÉN
kolonneoverskrift** (`Prisskjema`). Målt: lengste sammenhengende mellomrom-løp er **887 tegn**, og
det finnes bare **19** tall ≥ 1000 på `.0`-form (10 distinkte). Etiketten og beløpet står på samme
logiske linje, adskilt av flere hundre mellomrom:
```
… Prosjektering (tiltransport av prosjekterende) … 5647500.0
92.0
```
Dette er **nøyaktig den formen F4 målte 08.09**: `derive_cost_baseline` (MAJOR-4) NEKTER dette
skjemaet fordi det har én kolonneoverskrift. Så samme dokument er utilgjengelig for begge
konsumenter av ulik grunn — deriveren nekter det, og modellen leste forbi det.
**Å åpne begge låser leverer BYTENE, ikke STRUKTUREN.**
Og skjemaet er ikke fylt ut: det er et **pre-award** prisskjema (MAJOR-4s egen fixtur-observasjon,
her bekreftet på den leverte basen). En kjøring forankret på dette dokumentet ville uansett nektet.
---
## 6. Mot S7 (arm A) og S7s arm C
| | S7 arm A (07.09) | S7 arm C (07.09) | **S7c Adef** | **S7c Aopen** |
|---|---|---|---|---|
| form | kutt (P-default) | fri navigasjon | kutt (P-default) | **kutt (P-åpen)** |
| base | 630 konsepter, ref `4ffd750c…` | samme | 629/630, ref **`f14872a0…`** | samme |
| prompter | 5 | 15 | **4** | **11** |
| leverandør-input | 69 043 | 67 846 | 68 810 | **86 331** |
| output | 964 | 1 409 | 1 076 | 2 103 |
| verktøykall | 0 | **10** | 0 | 0 |
| siteringer | 8 | 630 | 8 | **12** |
| nevnere annonsert | 630 = 622 + 8 | ingen | 629 = 621 + 8 | 629 = 617 + 12 |
| **nådde prisskjemaet** | nei (`below_k`) | **JA, i fire steg** | nei (`below_k`) | **levert — og ikke brukt** |
| utfall | ValidatedProposal | ValidatedProposal | ValidatedProposal | **Rejection** |
**Like-for-like er de to siste kolonnene:** samme base, samme spørsmål, samme argv bortsett fra
payloadet. Det åpne kuttet koster **+20,2 % debatt-input** og **+29,6 % NOK**, ga **+7 prompter**
(fordi genereringen brukte åtte forsøk mot ett), og endte på et **avvist** forslag mot et validert.
**S7c Adef mot S7 arm A** er den andre like-for-like-en: nesten identisk pris (68 810 mot 69 043),
én prompt færre, samme utfall. Den fiksede basen endrer altså ikke A-formens kostnad — den endrer
nevneren fra 630 til 629 og gjør stempelet ærlig.
**Arm C er fortsatt den eneste som NÅDDE prisskjemaet** — i fire navigasjonssteg av 630
dokumenter — og den brukte det ikke i et forslag heller (S7 § 4: arm C endte på klimakriterier).
---
## 7. Kostnad
**Listepris, Azure Retail Prices API** (`api-version=2023-01-01-preview`, `currencyCode='NOK'`,
`armRegionName=eastus`), metere `gpt 4.1 mini Inp/Outp glbl Tokens`, **hentet på nytt 2026-09-08**
og identiske med S7s: input **NOK 0,003734 / 1K**, output **NOK 0,014936 / 1K**.
| Kjøring | Prompter | Input | Output | NOK |
|---|---:|---:|---:|---:|
| Adef — P-default, approve | 4 | 68 810 | 1 076 | 0,273 |
| Aopen — P-åpen, approve | 11 | 86 331 | 2 103 | 0,354 |
| klient-probe (`test_foundry_profile_live`) | 1 | ~20 | ~5 | ~0,000 |
| **SUM** | **16** | **155 161** | **3 184** | **NOK 0,63** |
**NOK 0,63 — 12,5 % av taket på NOK 5. 429-svar: 0.** Største enkeltkall er 27 616 tokens; ingen
enkeltpost over 100 000. Takene (`max_rounds=3`, `max_tokens`, `max_attempts`) er **URØRT**, og
ingen kjøring traff dem.
---
## 8. «Virker det?» — den ærlige konklusjonen
**Ja for kjeden, nei for spørsmålet.**
**Kjeden virker ende til ende.** Råkorpus → `okf build` på HEAD (døra lukker, 43 = 39 + 4) →
pre-pass med lukkende nevnere og grønn kontraktsjekk → deklarert kutt inn i en debatt med
verktøyene trukket → levende modell → deterministisk validator → outbox med kutt-deklarasjon,
siteringer og dom-nøkkel. Begge armer returnerte `rc 0`, uten en eneste 429, for **NOK 0,63**
til sammen. Det som var uprøvd i S7 — en base der `--ingested-at` faktisk holder og et pre-pass som
kan levere prisskjemaet — er nå prøvd, og det holder.
**Men det åpne kuttet løste ikke problemet det ble bygget for.** S7s funn 5 var at kuttet holder
tilbake det ene dokumentet i K2 som bærer en pris. Begge låser er nå åpnet, dokumentet er levert på
rang 10, bytene står i to av elleve prompter — og modellen brukte dem ikke i noe svar. Blindsonen
flyttet seg fra **rangeringen** til **lesningen**. Grunnen er målt og ikke gjettet: skjemaet er en
énkolonnes SIMPLE table med opptil 887 mellomrom mellom etikett og beløp, altså samme form F4 målte
at `derive_cost_baseline` må nekte.
**Anbefaling til operatøren (beslutningen er din):** **behold flaggene AV som default.**
- Prisen er ikke +6,4 %, den er **+8,5 % payload / +20,9 % rendret kontekst / +20,2 % debatt-input**
mot den defaulten som faktisk shipper — produsentens +6,4 % er målt mot en tredje konfigurasjon.
- Den målte gevinsten er **null**: de fire ekstra dokumentene formet ikke forslaget, og prisskjemaet
ble ikke lest.
- Den ene kjøringen med åpent kutt kostet 29,6 % mer og endte avvist. Det er **ikke** bevis for at
kuttet gjør modellen dårligere — én kjøring per arm — men det er heller ikke noe å betale for.
- Flaggene er verdt å beholde som **opt-in** for et spørsmål som faktisk trenger et bestemt stort
dokument. Det er dét de er, og de fungerer: prisskjemaet BLE levert.
**Det som faktisk ville flyttet noe** er ikke et flagg i pre-passet, men at prissammenstillingen
kommer ut som en tabell med kolonner. Da kunne `--derive-cost-baseline` forankret kjøringen
(stage 0), og da ville modellen fått linjer i stedet for et mellomromsteppe. Det er en
**produsent-side**-observasjon, meldt videre, ikke bestilt.
---
## 9. Funn — rapportert, ikke fikset
1. **Ordrens kjent-positiv var feilparet** (§ 2). `58 401` er ikke den flaggløse defaulten, men
`--cost-vocabulary --k 12 --limit 120000`. Begge produsent-tall er reprodusert eksakt; den
flaggløse defaulten måler 57 289. Konsekvensen er at «prisen for prisskjemaet» er **+8,5 %**,
ikke +6,4 %, målt mot det som shipper.
2. **`log.md` er fortsatt et navigerbart konseptdokument for po** (§ 1). Produsentens F2-fiks
ekskluderer den i deres egen vandring (`considered` = 629), men lenken står i rot-`index.md`, så
`okf.navigate_bundle` returnerer **630** og korpus-kjøringens egen logg kan leses og siteres av
agentene. Den leverte `K2-bundle-20260903` har ikke lenken. **Kryss-repo, `llm-ingestion-okf`.**
3. **Det leverte prisskjemaet er uleselig i form, ikke fraværende i bytes** (§ 5). Énkolonnes
SIMPLE table, 887 tegns mellomromsløp, 19 tall ≥ 1000. Samme form F4 målte at MAJOR-4s
deriver må nekte. **Kryss-repo, produsent-side.**
4. **Genereringen brukte åtte forsøk i Aopen, fem av dem parse-feil** — alle av samme klasse:
`claimed saving … exceeds affected items' total …`. Modellen påstår en besparelse større enn
summen av linjene den selv oppgir. Pydantic fanget hver gang, og fangsten er ærlig
(`{run_id}-parse-failures.json` skrevet). Adef traff det ikke i det hele tatt.
5. **En uforankret kjøring er fortsatt ærlig, men kandidaten er oppdiktet** (S7s funn 4, gjentatt).
`cost_baseline_anchored: False` i begge armer; kostkodene er modellens egne (`cleaning_labor`,
`maintenance_materials`, `PRD-001`, `PRD-002`). `--require-cost-baseline` (F4, 100) ville nektet
begge kjøringene — og `--derive-cost-baseline` ville nektet basen, av funn 3s grunn.
---
## 10. Ærlighets-grenser, uttalt
- **To kjøringer er ikke et utvalg.** At det åpne kuttet gir dårligere forslag er **ikke** vist;
at det ikke ga et bedre er målt for disse to kjøringene.
- **Ordrens revise-steg finnes ikke i A-formen** (§ 3). `--plan-review` krever `--explore`, som er
nektet sammen med et payload. `--proposal-review` er brukt i stedet, og i Aopen nådde kjøringen
aldri den 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.
- **Byggets veggklokke er ikke oppløst.** okf rapporterer 789,20 s; skallet målte 2 351 s fra start
til `rc`. Differansen er ikke undersøkt her.
- **Ordoverlapp mellom engelsk modell-output og norsk base måler ingenting** — forankringen i § 4 er
målt på norske fagtermer, som er svakere enn en id-join. Id-joinen er fortsatt umulig: ingen av de
15 svarene skrev en konsept-id.
- **Prisene i K2 er ikke fylt ut.** Ingen validert besparelse mot ekte tall er forventet eller
funnet; begge armer regner på tall modellen selv oppga.
- **Kostnadstallene er listepris**, ikke faktura, og caching er ikke målt.
---
## 11. Verifiseringslogg
| # | Påstand | Kommando → resultat |
|---|---|---|
| 1 | Instrumentet reproduserer publisert fasit | `p_measure.py` / `live_s7c.py` `assert` → 3 954 / 1 495 / 629 |
| 2 | okf HEAD og rent tre | `git rev-parse --short HEAD``6776c37`, `git status --short` tomt |
| 3 | Døra lukker | `okf build` stdout → `merged + coded rejections = 43; N = 43` |
| 4 | F1 fikset | `grep -rh "^ingested_at:"``629 ingested_at: 2026-09-03T00:00:00Z` |
| 5 | Diffen er én linje | `diff -r` exit 1 → 1 fil, 3 linjer, 0 `Only in`, `log.md`-lenka |
| 6 | F2 kun konsumentside | `okf_consume` `considered` = 629 mot `navigate_bundle` 630, `log.md` i `context_files` |
| 7 | Nevnerne lukker + kontrakt grønn | `okf_contract_check.py` × 3 → `0 findings`, exit 0 |
| 8 | okf sine to tall reprodusert | `62 149` (P-åpen) og `58 401` (`--limit 120000`) eksakt |
| 9 | Prisskjemaet levert i P-åpen | payload `excerpts[9]` = `del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1` |
| 10 | Steg-3-kombinasjonene nektes | rc = 1 begge, meldingene i § 3 |
| 11 | Levende modell leste kuttet | `Adef/Aopen-records.json` → 3 debatt-prompter à 2227 k tok, rc 0 |
| 12 | Bytene nådde prompten | `5647500` 6 forekomster i 2 av 11 Aopen-prompter |
| 13 | Modellen brukte dem ikke | 0 forekomster av alle fem prismarkører i 11 av 11 svar |
| 14 | Formen er årsaken | 104 linjer, én kolonneoverskrift, mellomromsløp 887 tegn |
| 15 | `[sourced-not-sufficient]` brukt | 1 av 11 svar i Aopen, 0 av 4 i Adef |
| 16 | Validatoren beholder siste ord | `outcome.json``rejected`, `1400000 exceeds P90 879107` |
| 17 | Deployment urørt | `az … deployment show` → GlobalStandard, 100, `2025-04-14` |
| 18 | Pris hentet, ikke husket | Azure Retail Prices API 2026-09-08 → 0,003734 / 0,014936 NOK per 1K |
**Ikke verifisert her:** at en levende modell velger *bedre* med et åpent kutt; at `N=43` er
produsentens riktige nevner (lest fra deres stdout, men rå-katalogen har 43 filer, målt); at
byggets 1 562 s ubokførte veggklokke skyldes indeks-fasen; at leverandørens caching traff.
**Instrumentoppsett:** `scratchpad/s7c/` (utracket) — `p_measure.py`, `live_s7c.py`,
`payload-{default,open,okf-defaultlimit}.json`, `{Adef,Aopen}-records.json`, `outbox-{Adef,Aopen}/`.
`tiktoken` `o200k_base` via `uv run --with tiktoken`; fortsatt ingen prosjektavhengighet.