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>
27 KiB
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
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
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
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.
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
# 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:
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_projects bundle-arm; verdicts.bundle_candidate_features og run.py:2038s 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
okf build --ingested-atnår 11 av 629 konsepter (§ 1a). Segmenterte konsepter får standardverdien1970-01-01T00:00:00Zuansett 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.- Rot-indeksen lenker
log.md, som dermed blir et navigerbart konseptdokument (§ 1b).context_filesgå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. read_dirpå et katalogNAVN utledet av et konseptnavn nektes to ganger på rad (§ 4). Live traff modellenread_dir('del-ii-bilag-6-teknisk-oppsett')og deretterread_dir('…-teknisk-oppsett.md')— beggeBundlePathNotFound. 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.- En uforankret kjøring er ærlig, men kandidaten er oppdiktet (§ 8). Med
cost_baseline_anchored: Falseer 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. - 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-treebæ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.