docs(n-bundlene): rank 1 on 3 of 3, and the cut still drops the key the question asks by [skip-docs]

The live consumption measurement on N100:2023, N200:2024 and N500:2024, ordered
as P1 (20260908T113200Z-46497613). Three paid arms in A-form
(--prepass-payload), one per bundle, NOK 0.21 of a NOK 5 cap, 0 x 429. No file
under src/ touched; no production code in this commit.

ALL FIVE KNOWN-POSITIVES HELD BEFORE ANYTHING WAS PAID FOR. The three
sha256-tree refs reproduce vegnormal-okf's values character for character;
okf.navigate_bundle -- our own code -- reaches exactly 446 / 1133 / 270
concepts with 0 unfollowed links; the pre-pass on okf a37d5ce delivers the gold
concept at RANK 1 of 8 on all three with the flagless default command;
okf_contract_check exits 0 three times; the cheap client probe is green.
okf's three opt-in flags were NOT used: the order allowed them only if the gold
came back below_k, and it never did.

THE VERDICT IS 0 OF 3, and the three reasons are different and separately
owned. Criterion: (a) the model answers with the gold requirement's central
condition AND (b) cites the right concept id AND (c) zero hallucinated values.
(c) is 0 on all three -- the model quoted only what it had. (a) is YES only on
N100, where it reproduced the body sentence verbatim. On N200 and N500, 0 of 6
keywords from each gold body appear in any answer.

THE MAIN FINDING, MEASURED, NOT GUESSED (okf owns it): the payload's excerpt
carries `text` and no `title`/`req_number`, so for N100 and N500 the
requirement number the question is ASKED BY appears nowhere in the model's
context -- not in the gold excerpt, not anywhere in the delivered cut. The
ranking finds the right document ON that number and the delivery then drops it.
Our own read_file returns the whole 774-character file including
`req_number: Krav 3.3.1-13`; the excerpt is 98 characters of body. The declared
cut is strictly less informative than our own navigation on precisely the key
the question uses. This is the structural twin of S7c: there the locks bought
the BYTES and not the STRUCTURE; here the ranking buys the RIGHT DOCUMENT and
not the KEY.

THE SECOND FINDING IS OURS, and the order asked for it by name: po has no
lookup door in A-form. `run.py:1243` is hard-coded (`Find a cost-saving measure
for {project.id}`), none of run_project's 26 parameters carries a question, a
prompt, an objective or a task (measured with inspect.signature), and
`--explore` is refused together with `--prepass-payload` (rc 1, zero model
calls). The question reaches the model only as the pre-pass's declared
`question` line -- verbatim in 2 of 6 / 2 of 5 / 2 of 6 prompts -- while the
task line says something else. On N200 and N500 the model followed the task it
was actually given and used a different delivered concept. That is the form,
not a misconfiguration, and choosing what to do about it is the operator's.

(b) IS SCORED ON THE MODEL'S REFERENCE, NOT ON THE STAMP, and that is a
sharpening of the order's criterion rather than a softening. The stamp cites
the delivered concepts MECHANICALLY: `stamp intersect delivered` is 8 of 8 on
all three and would be 8 of 8 for a run in which the model read nothing. A
measure that can only come out one way is this repository's vacuous-gate class,
so the load-bearing reading is what the model actually named -- and there the
answer is no on all three.

A THIRD FINDING, reported and not fixed: N200's run VALIDATED a proposal whose
cost codes were `03418c46` (a real requirement id used as a cost line) and
`03423b12` (0 matches among the bundle's 1137 files -- invented). It passed
because the run was un-anchored and the validator's stage 0 was skipped: the
first LIVE instance of exactly what --require-cost-baseline (F4, session 100)
refuses. The run said so itself, in plain text, on its own notice line.

TWO THINGS GOT CONFIRMED LIVE ON THREE FRESH CORPORA, neither of them ordered.
`{run_id}-parse-failures.json` is absent from all three outboxes, so the
derived structured-output grammar (Fase 1b finding 1b) was accepted by the live
endpoint on corpora it had never been tested against -- closing one of that
row's stated honesty limits. And Step 5's informed refinement fires: attempts 2
and 3 carry "your previous proposal was REJECTED by the deterministic
validator" verbatim, and the claim falls monotonically (3 000 000 -> 1 500 000
-> 600 000 on N100; 350 000 -> 210 000 -> 90 000 on N500).

S7a-3's slack was paid for here for the first time: all three bases declare
`bundle_id` in the root index while mounted under a different directory name.
Before session 81 that was REFUSED, so none of the three could have been opened
as delivered.

HONESTY LIMITS, stated: one run is one run -- three arms, one question each,
one model, no repetition, so nothing here measures variance. (a) on N100 is not
evidence that the chain answers lookups: that gold requirement is
cost-shaped, so answering the task and answering the question coincide, and the
coincidence is identified rather than hidden. (c) = 0 covers the PROSE; the
structured proposal invents cost codes, which is structurally required with no
baseline. The denominator vocabulary was used 0 times in 17 replies, but no arm
was ever in the position the marker exists for, so that is an unanswered
denominator and not evidence it does not work. None of the three bundles was
reviewed on its subject matter; (a) compares against the concept body only.

Suite after `git add`: 1511 passed / 5 skipped, ruff and mypy clean, golden
demo-transcript.stdout BYTE-UNCHANGED (shasum -a 1 of the CONTENT =
ea8c534773acdbe41ae68f2c55724d69aaf8be4f, never the git blob id). Leak check
after staging: 0 hits for the real host in staged content and in every tracked
file. Verdicts sent FYI to vegnormal-okf (which owns nothing here -- the
bundles are clean) and to llm-ingestion-okf (one field).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-08 14:01:31 +02:00
commit e7ffe9e196

View file

@ -0,0 +1,416 @@
# Konsum-målingen på N100, N200 og N500 — hentet, resonnert og sitert, mot en LEVENDE modell
> **Ordre `20260908T113200Z-46497613-from-.claude`.** «Ferdig» skulle bety at portfolio-optimiser
> henter, resonnerer og siterer riktig fra hver av de tre bundlene med en levende modell.
> Tre betalte armer i A-formen (`--prepass-payload`), én per bundle, samme oppsett som S7c.
> Underlag: vegnormal-okf `docs/2026-09-08-n100-n200-n500-ferdig.md` (`6d953f8`),
> llm-ingestion-okf worktree `llm-ingestion-okf-wt-o2c` @ `a37d5ce`.
>
> **Svaret er nei på alle tre — og de tre grunnene er ulike, målt, og eies av hvert sitt repo.**
---
## 0. Hva som ER målt, og hva som IKKE er det
**MÅLT.** De tre tre-hashene reprodusert ordrett fra vegnormal-okfs melding. `okf.navigate_bundle`
når 446 / 1 133 / 270 konsepter — po sin egen kode, mot V1s tall. Pre-passet leverer fasit-konseptet
**rang 1 av 8 på alle tre**, med default-kommandoen, ingen flagg. Kontraktsjekk exit 0 × 3.
Klientproben grønn. Tre betalte kjøringer, rc 0 × 3, **NOK 0,21 av taket 5, 0 × 429**. Hver rolles
prompter, prompt-tokens og leverandør-tokens. Hvert modellsvar ordrett. Nekten `--explore` +
`--prepass-payload` (rc 1, null modellkall). Hvilke felt pre-passets utdrag faktisk bærer.
**IKKE MÅLT.** **Én kjøring er én kjøring** — tre armer, ett spørsmål hver, én modell
(`gpt-4-1-mini`), ett deployment. Ingen arm er gjentatt, så ingenting her sier noe om varians.
At en ANNEN modell ville lest det samme kuttet annerledes er ikke målt. Om rangeringen holder for
andre spørsmål enn V1s tre er ikke målt her (okf måler det). Ingen av de tre bundlene er
faglig gjennomgått av meg — jeg sammenlikner mot konseptkroppen, ikke mot vegnormalen.
**IKKE RØRT.** Ingen fil under `src/`. Ingen Azure-konfig. Ingen fil i vegnormal-okf eller i noen
okf-checkout. Ingen push.
---
## 1. Kjent-positiv per bundle, FØR noe ble betalt
Måleprotokollens stige: alt gratis først, så en feil i en betalt arm er attribuerbar.
```bash
OKF=/Users/ktg/repos/llm-ingestion-okf-wt-o2c # ren worktree, a37d5ce, egen venv
B=/Users/ktg/repos/vegnormal-okf/build/ferdig
$OKF/.venv/bin/python3 $OKF/tools/okf_consume.py $B/n100-2023 \
--question "Hva krever Krav 3.3.1—13 i N100? Gjengi det sentrale vilkåret." --out payload-n100.json
# ... tilsvarende for n200-2024 og n500-2024, DEFAULT-kommandoen, ingen flagg
```
| kjent-positiv | N100:2023 | N200:2024 | N500:2024 |
|---|---|---|---|
| `sha256-tree` reproduserer V1s ref | **JA** `5f288f2c…` | **JA** `c420b754…` | **JA** `eb74e987…` |
| `okf.navigate_bundle` → konsepter | **446** (fasit 446) | **1 133** (fasit 1 133) | **270** (fasit 270) |
| `Bundle.skipped` (ufulgte lenker) | 0 | 0 | 0 |
| considered / withheld / delivered | 446 / 438 / 8 | 1 133 / 1 125 / 8 | 270 / 262 / 8 |
| budsjett brukt av 120 000 | 8 939 | 21 102 | 9 085 |
| **fasit-konseptets rang** | **1 av 8** | **1 av 8** | **1 av 8** |
| `okf_contract_check` | **exit 0**, 14 regler, 0 funn | **exit 0**, 14 regler, 0 funn | **exit 0**, 14 regler, 0 funn |
| `prepass.admit_payload` mot montert base | **OK** | **OK** | **OK** |
| klientprobe `test_foundry_profile_live` | **1 passed** — kjørt FØR armene | (samme kjøring) | (samme kjøring) |
`a37d5ce` gjør det den sier: fasit-konseptet står på **rang 1 på 3 av 3** med den flaggløse
kommandoen. Nevnerne lukker mot V1 til konseptet. **Budsjettforbruket avviker fra V1s tall**
(8 939 mot 8 977 · 21 102 mot 17 818 · 9 085 mot 10 517) — forventet, og det er selve fiksen:
oppslags-omordningen leverer et ANNET sett med åtte utdrag enn den V1 målte.
Deployment urørt, målt med `az cognitiveservices account deployment show`: `GlobalStandard`,
`capacity` **100**, versjon `2025-04-14`, `Succeeded`.
### 1.1 En egenskap S7a-3 kjøpte, som først nå ble betalt for
Alle tre basene erklærer `bundle_id` i rot-`index.md` (`vegnormal-n100-2023`) mens de er montert som
`n100-2023`. Til 03.09 NEKTET `reconcile_bundle_id` nøyaktig det. Uten slakke-beslutningen (økt 81)
kunne **ingen av de tre bundlene åpnes slik de er levert** — botemiddelet ville vært å montere dem
på nytt for hånd, én gang per leveranse. Kjøringen sier avviket høyt i stedet:
```
Knowledge base: declares bundle_id 'vegnormal-n100-2023' (source: declared-index) but is mounted
as 'n100-2023' — the DECLARED id is the identity, so every artefact this run stamps names
'vegnormal-n100-2023'
```
---
## 2. Kjøreformen: po har INGEN oppslags-dør i A-form, og nekten er målt
Ordren ba meg velge kjøreform og begrunne, og sa at en nekt er et funn. Den er det.
**Debattens oppgave er hardkodet.** `run.py:1243`, ett eneste forekomststed:
```python
result = await debate.run(f"Find a cost-saving measure for {project.id}.\nContext:\n{context}")
```
Ingen av `run_project`s **26 parametre** bærer et spørsmål, en prompt, et objective eller en task
(målt med `inspect.signature`). Operatørens spørsmål når modellen KUN som pre-passets erklærte
`question`-linje inne i `context`.
**Den ene døra som bærer en operatør-prompt er `--explore`, og den er NEKTET med `--prepass-payload`:**
```
$ python -m portfolio_optimiser.run N100 --profile local --docs-dir B --bundle-dir B \
--explore "Hva krever Krav 3.3.1—13 i N100? …" --explore-config /dev/null \
--prepass-payload payload-n100.json
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, null modellkall
```
**Valget, og begrunnelsen:** jeg kjørte A-formen som ordren spesifiserer, fordi det er den eneste
formen som finnes for et deklarert kutt, og fordi den andre armen (`--prepass-seed`, som VILLE båret
spørsmålet som `explore()`s prompt) er utenfor denne ordrens gjerde. Konsekvensen er målt og
uttalt, ikke bortforklart:
| | N100 | N200 | N500 |
|---|---|---|---|
| oppgavelinja modellen fikk | `Find a cost-saving measure for N100.` | `… for N200.` | `… for N500.` |
| V1s spørsmål ORDRETT i prompten | ja, i **2 av 6** prompter | ja, i **2 av 5** | ja, i **2 av 6** |
Modellen fikk altså både spørsmålet og fasit-teksten — men ble ALDRI bedt om å svare på spørsmålet.
Det er ikke en feilkonfigurasjon; det er formen po har.
---
## 3. Tre betalte armer
```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/nbundler/live_nbundler.py {n100|n200|n500}
# argv: <N100|N200|N500> --profile azure --docs-dir <base> --bundle-dir <base>
# --proposal-review --outbox-dir … --run-id nb-<tag> --prepass-payload payload-<tag>.json
```
Innsprutspunktet er `run._default_factory` (Fase 4e). Alle roller LEVENDE.
| | **N100** | **N200** | **N500** |
|---|---:|---:|---:|
| rc | 0 | 0 | 0 |
| prompter totalt | **6** | **5** | **6** |
| — debatt / generering | 3 / 3 | 3 / 2 | 3 / 3 |
| proposer / checker | 5 / 1 | 4 / 1 | 5 / 1 |
| prompt-tokens (o200k), debatt | 6 826 | 15 595 | 5 553 |
| prompt-tokens (o200k), generering | 800 | 483 | 782 |
| leverandør-input | 12 057 | 24 582 | 10 115 |
| leverandør-output | 718 | 822 | 817 |
| **429-svar** | **0** | **0** | **0** |
| parse-feil-artefakt | **fraværende** | **fraværende** | **fraværende** |
| verktøykall i debatten | **0** (A-form: verktøyene trukket) | **0** | **0** |
| validator-dom | rejected (stage 4, P90) | **validated** | rejected (stage 4, P90) |
| dom-nøkkel | `d7eeac666dbe88dc` | `7326ad0ec7353039` | `1059ab348ea87f48` |
**Null parse-feil på tre ferske korpora.** `{run_id}-parse-failures.json` finnes ikke i noen av de
tre utboksene, og filens tilstedeværelse ER signalet (økt 35). Den avledede grammatikken (Fase 1b
funn 1b) ble akseptert av det levende endepunktet på tre korpora den aldri er testet mot — det
lukker en av den radens uttalte ærlighets-grenser.
**Steg 5 fyrer LEVENDE på begge de avviste armene.** Forsøk 2 og 3 bærer ordrett «your previous
proposal was REJECTED by the deterministic validator», og påstanden faller monotont:
| | forsøk 1 | forsøk 2 | forsøk 3 |
|---|---:|---:|---:|
| N100 `claimed_saving_nok` | 3 000 000 | 1 500 000 | 600 000 (P90 = 530 585) |
| N500 `claimed_saving_nok` | 350 000 | 210 000 | 90 000 (P90 = 81 323) |
---
## 4. Målene (a)(e), med nevner
### (a) Svarte modellen med det sentrale vilkåret i fasit-kravet?
Ordrett sammenlikning mot konseptkroppen.
**N100 — JA.** Fasit-kroppen er én setning, og modellen gjenga den **ORDRETT**:
> «Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.»
og resonnerte riktig om den (ÅDT ≤ 4 000 ⇒ planfri kryssing ikke påkrevd). Nøkkelordene
`planskilt`, `ÅDT` og `4 000` står alle i svaret.
**N200 — NEI.** Fasit er Krav 2.9.2—12, filterkriterier for friksjonsjordarter, med tabell
2.9.2—1. Nevner: **0 av 6** nøkkelord fra kroppen (`filterkriteri`, `friksjonsjordart`, `2.9.2`,
`O90`, `D90`, `filter`) står i noe av modellens svar. Modellen resonnerte i stedet om
grunnundersøkelser, fra et ANNET levert konsept.
**N500 — NEI.** Fasit er Krav 10.2—2, tekniske bygg som egne brannceller. Nevner: **0 av 6**
nøkkelord (`branncelle`, `brannsikker`, `teknisk(e) bygg`, `10.2`, `byggteknisk`). Modellen
resonnerte om tunnelportaler, fra et annet levert konsept.
**Mekanismen er målt, ikke gjettet:** modellen ble bedt om et kostnadsbesparende tiltak. På N100
ER fasit-kravet kostnadsformet (en terskel som lar deg sløyfe en dyr konstruksjon), så det å svare
på oppgaven og å svare på spørsmålet SAMMENFALLER. På N200 og N500 gjør de det ikke, og modellen
fulgte oppgaven den fikk.
### (b) Siterte den riktig konsept-id?
Ordren gir to instrumenter. Begge rapporteres, og bare det ene er bærende.
| | N100 | N200 | N500 |
|---|---|---|---|
| stempelets siteringer | 8 | 8 | 8 |
| stempel ∩ delivered | **8 av 8** | **8 av 8** | **8 av 8** |
| fasit-id i stempelet | **JA** | **JA** | **JA** |
| **modellen navnga fasit-id-en** | **NEI** (navnga ingen id) | **NEI** (navnga `id-03418c46…`) | **NEI** (navnga `id-05152184…`) |
**Stempel-lesningen kan ikke diskriminere, og er derfor ikke bærende.** Stempelet siterer de leverte
konseptene MEKANISK, uavhengig av hva modellen leste — det ville vært `8 av 8` også for en kjøring
der modellen leste ingenting. Det er repoets egen vakuøs-gate-klasse. Den bærende lesningen er hva
modellen faktisk refererte, og der er svaret **nei på alle tre**. De to id-ene modellen DID navngi
er begge ekte, leverte konsepter — bare ikke fasit.
Konsept-id-en er tilgjengelig for modellen: `render_context` avgrenser hvert utdrag med
`--- BEGIN DATA <concept_id> ---`. På N200 og N500 brukte modellen den; på N100 lot den være.
### (c) Hallusinerte den et kravnummer eller en verdi som ikke står i kroppen?
Kjent-negativ: tall i modellens PROSA som ikke finnes i delivered-mengden, etter at UUID-fragmenter
er fjernet (ellers teller instrumentet biter av ekte id-er som oppdiktede tall).
| | N100 | N200 | N500 |
|---|---|---|---|
| kravnummer-formede tokens i prosa | ingen | ingen | ingen |
| tall i prosa ikke i delivered | **0** | **0** | **0** |
| konsept-id-referanser som ikke er levert | **0** | **0** | **0** |
**(c) = 0 på alle tre i prosaen.** Modellen siterte kun det den hadde. To treff ble undersøkt og
forkastet som instrumentfeil: N200s `03418` er et fragment av den ekte, leverte id-en
`id-03418c46-…` (modellen skrev den uten `id-`-prefikset), og N500s `500` er normalens eget navn.
**Men det strukturerte FORSLAGET er en annen sak, og der er det ett ekte funn.** N200s validerte
forslag bruker to kostkoder:
```json
"affected_items":[{"code":"03418c46","quantity":1,"unit_cost":15000000},
{"code":"03423b12","quantity":500,"unit_cost":4500}]
```
`03418c46` er et **kravnummer brukt som kostkode** — en ekte konsept-id, men ikke en kostlinje.
`03423b12` finnes **0 ganger blant basens 1 137 filer** (målt). Det er en oppdiktet identifikator,
formet som en ekte. Begge ble **VALIDERT**, fordi kjøringen er UFORANKRET og validatorens stage 0
derfor hoppes over — nøyaktig den defekten `--require-cost-baseline` (F4, økt 100) ble bygget for,
og det første LEVENDE tilfellet av den. Kjøringen sa det selv, i klartekst:
> `Cost baseline: NONE in the bundle — this run is un-anchored: the validator's stage 0 … is SKIPPED`
Dette er ikke telt under (c) etter ordrens definisjon (tall i SVARET mot delivered-mengden), men å
la det stå urapportert ville vært å bruke definisjonen som en gjemmeplass.
### (d) Kostnad
Listepris, Azure Retail Prices API (`api-version=2023-01-01-preview`, `currencyCode='NOK'`,
`armRegionName=eastus`), **hentet på nytt 08.09**, metere `gpt 4.1 mini Inp/Outp glbl Tokens`:
input NOK 0,003734 / 1K, output NOK 0,014936 / 1K.
| Kjøring | Prompter | Input | Output | NOK |
|---|---:|---:|---:|---:|
| N100 | 6 | 12 057 | 718 | 0,056 |
| N200 | 5 | 24 582 | 822 | 0,104 |
| N500 | 6 | 10 115 | 817 | 0,050 |
| klientprobe | 1 | ~20 | ~5 | ~0,000 |
| **SUM** | **18** | **46 754** | **2 357** | **NOK 0,21** |
**NOK 0,21 — 4,2 % av taket på NOK 5. 429-svar: 0.** Takene (`max_rounds=3`, `max_tokens`,
`max_attempts`) er URØRT, og ingen kjøring traff dem.
### (e) Nevner-vokabularet
**Ikke brukt i noen av de tre armene.** `[sourced-not-sufficient]` og de øvrige markørene står
0 ganger i 17 modellsvar. Det nærmeste er N500s checker: «No other specific cost-saving tradeoffs
were found within the given excerpt for N500» — riktig innhold, feil vokabular.
Det er ærlig nok her: alle tre armene FANT noe å foreslå i kuttet, så ingen av dem var i posisjonen
markøren finnes for. Kontrasten er S7 arm A, som brukte `[sourced-not-sufficient]` ordrett fordi
kuttet der ikke bar svaret.
---
## 5. Hovedfunnet: kuttet leverer riktig dokument og fjerner nøkkelen spørsmålet stiller
Dette er det som avgjør «ferdig»-dommen, og det ble målt fordi (a) falt på to av tre.
Fasit-konseptets fil i basen bærer kravnummeret i frontmatter:
```yaml
title: Krav 3.3.1—13 H1 Nasjonal hovedveg, ÅDT < 6 000 og fartsgrense 80 km/t
req_number: Krav 3.3.1—13
description: Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.
```
Pre-passets utdrag bærer feltene `bundle_id · concept_id · sha256 · adjudication · trust_tier ·
bundle_id_inherited · text_sha256 · text · rank` — **ingen `title`, ingen `req_number`**.
| kravnummeret i det modellen faktisk fikk | N100 `3.3.1` | N200 `2.9.2` | N500 `10.2` |
|---|---|---|---|
| i fasit-utdragets `text` | **NEI** | ja (kroppen navngir «Tabell 2.9.2—1») | **NEI** |
| noe sted i hele det leverte kuttet | **NEI** | ja | **NEI** |
Til sammenlikning, po sin EGEN `read_file` på samme fil returnerer hele fila — 774 tegn, inkludert
`title` og `req_number`. Pre-passets utdrag er 98 tegn kropp.
**Pre-passet RANGERER på kravnummeret** — det er hele `a37d5ce`s mekanisme, og den virker: rang 1
av 446. **Og så leverer det utdraget uten den nøkkelen.** Modellen får et avsnitt om planfrie
kryssinger uten noe som helst som knytter det til «Krav 3.3.1—13». For to av tre bundler er
spørsmålets identifikator dermed ikke til stede i modellens kontekst i det hele tatt.
Dette er den strukturelle tvillingen til S7c-funnet: **der kjøpte låsene BYTENE, ikke STRUKTUREN;
her kjøper rangeringen RIKTIG DOKUMENT, ikke NØKKELEN.**
---
## 6. «Ferdig»-dommen, ærlig, per bundle
Kriteriet er ordrens: ferdig = (a) ja OG (b) ja OG (c) 0.
| | (a) | (b) modell | (c) | **ferdig** |
|---|---|---|---|---|
| **N100:2023** | **JA** (ordrett) | NEI | **0** | **NEI** |
| **N200:2024** | NEI | NEI | **0** | **NEI** |
| **N500:2024** | NEI | NEI | **0** | **NEI** |
**0 av 3.** N100 er nærmest: den gjenga fasit-vilkåret ordrett og hallusinerte ingenting; den
navnga bare ikke konseptet den siterte.
### Hvem eier hva som mangler
**llm-ingestion-okf eier én ting, og den er skarp.** Utdragsformen i `okf-consumption/1` bærer
`text` uten `title`/`req_number`. Rangeringen er FIKSET og god (rang 1 × 3 med flaggløs kommando) —
det er leveransen som mister nøkkelen. Et spørsmål stilt på en identifikator kan ikke besvares på en
identifikator som ikke ble levert. **Dette er ikke en ny nekt eller et flagg: det er ett felt til
per utdrag.**
**vegnormal-okf eier ingenting her.** Bundlene bærer `title`, `req_number`, `description` og riktig
kropp; indekstreet lukker (0 ufulgte lenker × 3); tre-hashene reproduserer; nevnerne stemmer.
Kroppene er de riktige kroppene. Det er ingen innholdsmangel i noen av de tre.
**portfolio-optimiser eier kjøreformen, og det er den største posten.** A-formens oppgave er
hardkodet til et kostnads-mandat, og den eneste døra som bærer en operatør-prompt (`--explore`) er
nektet med `--prepass-payload`. **po kan ikke STILLE et oppslagsspørsmål i A-form.** Det som ble
målt over er derfor det nærmeste A-formen kommer: fikk modellen fasit-teksten, og brukte den den?
Ja på N100, nei på to — og på begge de to fulgte modellen oppgaven den faktisk fikk.
### Anbefaling til operatøren (beslutningen er din)
1. **Meld feltet til llm-ingestion-okf: la utdraget bære `title` (eller `req_number`).** Billigst,
mest presist, og det eneste som gjør et identifikator-spørsmål besvarbart i det hele tatt.
Kostnaden er noen titalls tegn per utdrag mot dagens 8 utdrag.
2. **Avgjør om po skal ha en oppslags-dør.** I dag finnes den ikke i A-form. Tre veier, ikke
bygget her: (i) la `--prepass-payload` ta et operatør-spørsmål som debattens oppgave;
(ii) løsne `--explore`-nekten under et deklarert kutt (Q5=B-armen `--prepass-seed` er allerede
den formen, med verktøyene BEHOLDT); (iii) erklær at po ikke er et oppslagsverktøy og la
«ferdig» bety noe annet enn V1s K0-spørsmål. **Dette er en beslutning, ikke en fiks.**
3. **Kjør N-bundlene med `--require-cost-baseline` neste gang det er en kostnadskjøring.** N200
validerte et forslag med en oppdiktet kostkode fordi kjøringen var uforankret. F4-flagget finnes
allerede og ville nektet den.
4. **De tre bundlene kan IKKE kalles fullført på dette grunnlaget** — men det som mangler er ikke
bundlene. Etter (1) er kriteriet på nytt målbart for under NOK 0,25.
---
## 7. Funn — rapportert, ikke fikset
1. **Pre-passets utdrag mister kravnummeret** (§ 5). Eier: llm-ingestion-okf. Nevner: 2 av 3
bundler har ikke identifikatoren noe sted i modellens kontekst.
2. **po har ingen oppslags-dør i A-form** (§ 2). Eier: po. `run.py:1243` er hardkodet; ingen av
`run_project`s 26 parametre bærer et spørsmål; `--explore` nektes med `--prepass-payload`.
3. **En uforankret kjøring validerte en oppdiktet kostkode** (§ 4c). Eier: po (bruksmåte, ikke
kode — F4-flagget finnes). `03423b12` finnes 0 av 1 137 filer.
4. **Nevner-vokabularet ble ikke brukt i noen arm** (§ 4e). Eier: uavklart. Ingen av armene var i
posisjonen markøren finnes for, så dette er ikke bevis for at det ikke virker — det er en
ubesvart nevner.
5. **Budsjettforbruket avviker fra V1s tall** på alle tre (§ 1). Forventet konsekvens av `a37d5ce`,
ikke en defekt — nevnt fordi V1s tabell ellers ville lest som stale.
---
## 8. Ærlighets-grenser, uttalt
- **Én kjøring er én kjøring.** Tre armer, ett spørsmål hver, ingen gjentakelse. Ingenting her
måler varians, og et annet trekk fra samme modell kunne gitt et annet utfall på (a).
- **(a) på N100 er ikke bevis for at kjeden svarer på oppslag.** Det er bevis for at fasit-teksten
nådde modellen og ble brukt — og på N100 sammenfaller «svar på oppgaven» og «svar på spørsmålet»
ved et sammentreff i kravets innhold. Sammentreffet er identifisert, ikke skjult.
- **(b) er skåret på modellens referanse, ikke på stempelet**, fordi stempelet ikke kan
diskriminere. Det er en skjerping av ordrens kriterium, ikke en oppmykning, og den er begrunnet.
- **(c) = 0 gjelder PROSAEN.** Det strukturerte forslaget dikter opp kostkoder, som er strukturelt
påkrevd (ingen baseline, og oppgaven krever et tall). Skillet er uttalt i § 4c.
- **`--cost-vocabulary`, `--k` og `--rarity-weight` ble IKKE brukt.** Fasit sto på rang 1 med
default-kommandoen på alle tre, så opt-in-flaggene var ikke nødvendige — ordrens betingelse for
å bruke dem (`below_k`) inntraff aldri.
- **Kuttet er verifisert mot den monterte basen** (`admit_payload` × 3), så payloaden kan ikke ha
levert bytes basen ikke holder. Det er en gate, ikke en tillitserklæring til produsenten.
- **Ingen av de tre bundlene er faglig gjennomgått.** Sammenlikningen i (a) er mot konseptkroppen
slik den står, ikke mot vegnormalen.
---
## 9. Verifiseringslogg
| # | Påstand | Slik den ble verifisert |
|---|---|---|
| 1 | Tre tre-hasher reproduserer | `payload.bundle.ref` mot vegnormal-okfs melding, 3 av 3 ordrett |
| 2 | 446 / 1 133 / 270 konsepter | `okf.navigate_bundle(...).context_files`, po sin egen kode |
| 3 | Fasit på rang 1 × 3 | indeks av fasit-id-en i `payload.excerpts`, default-kommando |
| 4 | Kontraktsjekk exit 0 × 3 | `okf_contract_check.py`, 14 regler, 0 funn |
| 5 | Klientproben grønn | `uv run pytest tests/test_foundry_profile_live.py -q` → 1 passed |
| 6 | Deployment urørt | `az … deployment show` → GlobalStandard, 100, `2025-04-14` |
| 7 | Debattens oppgave er hardkodet | `grep -n 'Find a cost-saving measure' src/` → ett treff, `run.py:1243` |
| 8 | Ingen spørsmåls-parameter | `inspect.signature(run_project)`, 26 navn, 0 treff |
| 9 | Nekten er ekte | argv kjørt → rc 1, meldingen ordrett, null modellkall |
| 10 | Spørsmålet nådde modellen | ordrett delstreng i 2 av 6 / 2 av 5 / 2 av 6 prompter |
| 11 | (a) N100 ja | fasit-setningen ORDRETT i svaret; `planskilt`/`ÅDT`/`4 000` alle til stede |
| 12 | (a) N200/N500 nei | 0 av 6 nøkkelord fra hver fasit-kropp i noe svar |
| 13 | (c) = 0 | tall i prosa (UUID-fragmenter fjernet) mot delivered-teksten; 2 treff undersøkt og forkastet som instrumentfeil |
| 14 | `03423b12` er oppdiktet | 0 treff blant basens 1 137 filer |
| 15 | Utdraget mangler `title` | feltlista i `payload.excerpts[0]`; kravnummeret ikke i `text` for N100/N500 |
| 16 | po sin `read_file` bærer det | `navigator_tools(...)` → 774 tegn inkl. `req_number` |
| 17 | Null parse-feil | `{run_id}-parse-failures.json` fraværende i alle tre utboksene |
| 18 | Steg 5 fyrer levende | «REJECTED by the deterministic validator» i forsøk 2 og 3, begge armer |
| 19 | Prisene | Azure Retail Prices API hentet på nytt 08.09 |
| 20 | 0 × 429 | `retries`-telleren i alle 17 poster |