portfolio-optimiser/docs/2026-09-07-syretest-s7-prepass-k2.md
Kjell Tore Guttormsen de50764e5c docs(s7): a live model reads a declared cut -- three premises felled, four findings [skip-docs]
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>
2026-09-07 16:07:29 +02:00

27 KiB
Raw Blame History

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 622no_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 Rejectionclaimed 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

  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.pyconformant … 0 findings, exit 0
6 Prisskjemaet er holdt tilbake payload withhelddel-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.citations8 (A, B) mot 630 (C)
12 Arm C nådde prisskjemaet {run_id}-debate.jsonread_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.jsonrejected, 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.pyFalse (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.