S7-syretesten med pre-passet, ende-til-ende paa K2 med LEVENDE modell
(gpt-4-1-mini). En MAALING: ingen fil under src/ er roert.
Hovedresultatet er den ene setningen docs/2026-09-07-okf-prepass-i-debatten.md
SS 6 sa ikke var bevist: en levende modell har naa lest et rendret kutt, og den
brukte kontraktens eget [sourced-not-sufficient] ordrett -- 1 forekomst i
renderingen, 1 i svaret, mens `withheld`/`622`/`630` sto i renderingen og i null
svar. Siteringer 8 mot 630. Revise-ordene naadde neste forsoeks prompt ordrett og
KUN der, og validatoren avviste oppfoelgeren: operatoeren ba om halvering,
modellen doblet, kjoeringen endte paa Rejection. Det er MAJOR-2s D6 i levende
form.
Tre premisser ble felt FOER noe ble betalt, og de er rapportert i stedet for
omgaatt:
1. Ordrens steg-3-kommando finnes ikke. --prepass-payload + --explore nektes
ved konstruksjon, og --plan-review krever --explore. Maalingen gikk gjennom
de to doerene som finnes: debatten (kuttet) og --proposal-review (revisen).
Utforskningens eget kutt er dermed fortsatt uerklaert.
2. Steg 6s IR-nekt fyrer ikke lenger. S7b soem 1 gjorde projeksjonen valgfri,
og alle tre armene kjoerte hele loekka uten validator-input.json.
3. S7a SS 4s «adjudication 0/39» gjaldt en eldre, usegmentert base. K2 baerer
noekkelen i 618 av 630 -- men `verified` er 0/630, saa K5 diskonterer
fortsatt hvert konsept. Den kjent-positive kontrollen flipper gaten.
Bundelen er bygget fra raakorpuset paa produsentens fbaac6d. Doera lukker
(merged + coded rejections = 43 = N), 630 konsepter, ref sha256-tree:4ffd750c...
Den er IKKE byte-identisk med K2-bundle-20260903: 619 filer skiller seg, 618 av
dem kun paa ingested_at.
Fire funn, ingen fikset:
F1 (kryss-repo) okf build --ingested-at naar 11 av 629 konsepter; segmenterte
faar 1970-defaulten, saa en bundle ikke kan reproduseres byte-likt fra sitt
eget raakorpus.
F2 (kryss-repo) rot-indeksen lenker naa log.md, som dermed blir et navigerbart
konsept (629 -> 630) og kan siteres i stempelet.
F3 read_dir paa et katalognavn utledet av et konseptNAVN nektes to ganger paa
rad -- STATEs aapne K2-funn 3, naa observert live.
F4 en uforankret kjoering dikter kostkoder. Stage 0 er hoppet over, og alle
tre armene fant paa kostlinjer. S4.0s begrunnelse i drift.
Kuttet holdt tilbake prisskjemaet (below_k) for S7as eget mandat-spoersmaal,
mens fri navigasjon naadde det i fire steg. Kuttet er identisk paa begge
bundlene, saa ingested_at-driften endrer ref, ikke utvalget.
Instrumentet er validert mot en kjent positiv FOER hvert tall: rotlistingen paa
levert K2 = 3 954 tegn / 1 495 o200k-tok over 629 konsepter, assertert i
maaleskriptet. Refen paa levert base reproduseres uavhengig som
sha256-tree:9a4e5561..., ordrett det 07.09-dokumentet publiserte.
Kostnad NOK 1,11 av taket paa 5 (22 %), 0 stk 429, stoerste enkeltkall 23 057
tokens. Azure-konfigurasjonen er uendret; endepunktet utledes inline og er aldri
lagret i fil. Suite 1467 passed / 5 skipped, ruff + mypy rene, golden
demo-transcript.stdout byte-uendret.
Ordre: 20260907T125216Z-9858825824-from-.claude
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
488 lines
27 KiB
Markdown
488 lines
27 KiB
Markdown
# 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 <scratchpad>/k2-bundle-s7 \
|
||
--bundle-id k2-trinn1-20260903 --okf-version 0.2 \
|
||
--ingested-at 2026-09-03T00:00:00Z --report <scratchpad>/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 <scratchpad>/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 <scratchpad>/k2-bundle-s7 \
|
||
--question "Finn kostnadsbesparelser i Stange skole-anbudet" --out <scratchpad>/payload-s7.json
|
||
uv run python tools/okf_contract_check.py --skill skills/okf-consume/SKILL.md \
|
||
--payload <scratchpad>/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 <base> --bundle-dir <base> --proposal-review
|
||
# --outbox-dir … --run-id … [+ --prepass-payload <fil> 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 <base>/validator-input.json # No such file or directory
|
||
uv run python -m portfolio_optimiser.run K2 --bundle-dir <base> --docs-dir <base> --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 <levert>` → `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.
|