portfolio-optimiser/docs/2026-09-08-syretest-s7c-begge-laaser-k2.md
Kjell Tore Guttormsen 648b36e9ad 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>
2026-09-08 07:00:47 +02:00

423 lines
24 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

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

# 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.