docs(n-bundlene): the key exists now, and po drops it twice [skip-docs]
Order 20260908T134013Z-2103630340 (P2). Re-measures N100/N200/N500 in hypothesis form against the new excerpt, with --require-cost-baseline, and judges by the new "done" definition (operator choice 08.09 12:20, D-1: po is not a lookup tool). P1's finding 1 was llm-ingestion-okf's and it is CLOSED, verified here: the excerpt carries 14 members (was 9), among them title, req_number, sources, source_element_id and source_sha256. Ranking still puts the gold concept at rank 1 of 8 on all three with the flagless command; contract check exits 0 with 15 rules; the budget instrument's own known-positive moved to 12 563 / 12 227 / 336 and measured == expected on all three. What remains is po's, and it is two independent losses on one path. PrepassExcerpt inherits _Permissive (extra="ignore"), so the payload's 14 members become 7 on the object po builds; and _data_blocks renders four things per excerpt: concept_id, adjudication, trust_tier, text. req_number is cited 0 times in 18 model replies -- and could not have been. N200's proposer writes "as per the krav with ID 03418c46-..." because the UUID in the DATA delimiter is the only identifier it can see. A first measurement of "did the field reach the prompt" was CONFOUNDED and was falsified before anything was built on it: a substring search found req_number in 2 of 6 prompts because the string is part of the QUESTION line, and source_element_id because it is a substring of concept_id. The repository's own rule -- never assert on a substring two branches share -- applied to a measurement rather than a test. D-3 measured: --require-cost-baseline refused all three, rc 1, ZERO model calls, on the full run path, with an rc-0 control on the same argv without the flag. --derive-cost-baseline refuses too. There is no anchored form of an N-bundle run: a road standard is a requirements corpus and carries no cost lines. Stated deviation: the three paid arms therefore ran WITHOUT the flag, because with it they cost nothing and measure nothing. Verdict, new definition: 0 of 3, and the binding row is now (b'), which is a po verdict rather than a model verdict -- no model could pass it as the code stands. NOK 0.22 of the 5 cap, 0 x 429. No file under src/ touched. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
a26e8f2338
commit
c6e6066b1b
1 changed files with 476 additions and 0 deletions
476
docs/2026-09-08-n-bundlene-hypoteseform.md
Normal file
476
docs/2026-09-08-n-bundlene-hypoteseform.md
Normal file
|
|
@ -0,0 +1,476 @@
|
|||
# N100, N200 og N500 re-målt i hypoteseform — det nye utdraget bærer nøkkelen, og po dropper den
|
||||
|
||||
> **Ordre `20260908T134013Z-2103630340-from-.claude` (P2).** P1 (`docs/2026-09-08-n-bundlene-konsum.md`,
|
||||
> `e7ffe9e`+`a26e8f2`) fant at pre-passets utdrag leverte `text` uten `title`/`req_number`, så
|
||||
> kravnummeret spørsmålet stiller fantes ikke noe sted i modellens kontekst. llm-ingestion-okf lukket
|
||||
> det (`17c49fc`, `c95d189` — HEAD `171798e`, treet rent), vegnormal-okf re-bygde de tre bundlene med
|
||||
> proveniens (`feae0c8`, V2-treet). Denne målingen re-kjører de tre armene mot det nye utdraget, med
|
||||
> `--require-cost-baseline` (operatørvalg D-3), og dømmer etter den NYE «ferdig»-definisjonen
|
||||
> (operatørvalg 08.09 12:20, D-1: **po er ikke et oppslagsverktøy**).
|
||||
>
|
||||
> **Utdraget bærer nå nøkkelen — 14 medlemmer, var 9. Modellen fikk den likevel ikke: po dropper
|
||||
> feltene TO ganger, ved parsing og ved rendering. Funnet har byttet eier, fra okf til po.**
|
||||
|
||||
---
|
||||
|
||||
## 0. Hva som ER målt, og hva som IKKE er det
|
||||
|
||||
**MÅLT.** Tre nye tre-hasher reprodusert ordrett fra vegnormal-okfs V2-melding. `okf.navigate_bundle`
|
||||
når 446 / 1 133 / 270 konsepter, 0 ufulgte lenker. Fasit-konseptet på **rang 1 av 8 på alle tre**, med
|
||||
den flaggløse kommandoen. Utdragets medlemsliste: **14**, med `title`, `req_number`, `sources`,
|
||||
`source_element_id`, `source_sha256`. Kontraktsjekk **exit 0 × 3**, 15 regler, 0 funn.
|
||||
`prepass.admit_payload` OK × 3. Klientproben grønn. `--require-cost-baseline` nektet alle tre, rc 1,
|
||||
**0 modellkall** — på full kjøresti, ikke bare dry-run. `--derive-cost-baseline` nektet også, alle tre.
|
||||
Tre betalte armer uten flagget, rc 0 × 3, **NOK 0,22 av taket 5, 0 × 429**. Hva som nådde prompten,
|
||||
felt for felt. Hvert modellsvar ordrett.
|
||||
|
||||
**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 gjentakelse. Ingenting her sier noe om varians, og P1 og P2
|
||||
er to trekk fra samme modell på nesten samme input: at N100 gikk fra `rejected` (P1) til `validated`
|
||||
(P2) og N200 motsatt vei er ikke tilskrevet noen årsak. At en ANNEN modell ville lest kuttet
|
||||
annerledes er ikke målt. Ingen av bundlene er faglig gjennomgått — sammenlikningen er 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
|
||||
|
||||
```bash
|
||||
OKF=~/repos/llm-ingestion-okf # HEAD 171798e, `git status --short` TOMT
|
||||
B=~/repos/vegnormal-okf/build/ferdig # feae0c8 (V2)
|
||||
$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
|
||||
$OKF/.venv/bin/python3 $OKF/tools/okf_skill.py $B/n100-2023 --out skill-n100
|
||||
$OKF/.venv/bin/python3 $OKF/tools/okf_contract_check.py --skill skill-n100/SKILL.md --payload 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 V2s ref | **JA** `da6b8204…` | **JA** `c64f36b7…` | **JA** `673a0c2c…` |
|
||||
| `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 | 11 868 | 23 961 | 11 941 |
|
||||
| **fasit-konseptets rang** | **1 av 8** | **1 av 8** | **1 av 8** |
|
||||
| `okf_contract_check` | **exit 0**, 15 regler, 0 funn | **exit 0**, 15 regler, 0 funn | **exit 0**, 15 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) |
|
||||
|
||||
Budsjettforbruket er høyere enn P1s (11 868 mot 8 939 · 23 961 mot 21 102 · 11 941 mot 9 085) —
|
||||
forventet, og det er selve endringen: hvert utdrag bærer nå fem felt til. okfs egen melding målte
|
||||
+450,5 B per utdrag på et annet korpus; her er differansen +2 929 / +2 859 / +2 856 B over åtte
|
||||
utdrag, altså **+366 / +357 / +357 B per utdrag**.
|
||||
|
||||
**Budsjett-instrumentets egen kjent-positiv flyttet, som okf varslet:** `expected` 12 563 /
|
||||
`raw_bytes` 12 227 / `encoding_delta` 336 (var 10 349 / 10 060 / 289), og `measured == expected` på
|
||||
alle tre. En stale verdi ville fått pre-passet til å nekte — den høylytte feilen, ikke en defekt.
|
||||
|
||||
**Utdragets medlemmer: 14, var 9.** Ordren forventet ≥ 12.
|
||||
|
||||
```
|
||||
adjudication · bundle_id · bundle_id_inherited · concept_id · rank · req_number · sha256
|
||||
· source_element_id · source_sha256 · sources · text · text_sha256 · title · trust_tier
|
||||
```
|
||||
|
||||
De fem nye er `title`, `req_number`, `sources`, `source_element_id`, `source_sha256`.
|
||||
(okfs melding målte 9 → 17 på K2; differansen er at K2 bærer fem `source_*`-lokatorer der
|
||||
N-bundlene bærer to — prefiks-regelen, ikke en allowlist.)
|
||||
|
||||
For N100s fasit-konsept:
|
||||
|
||||
```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
|
||||
sources: [{resource: https://viewers.vegnorm.vegvesen.no/api/nisosts/859984?languageCode=nb,
|
||||
title: N100:2023}]
|
||||
source_element_id: id-4b61eee9-a149-42b3-863d-293b8320c15a
|
||||
source_sha256: c58e8bbc5fa9a5400c111e51b04c05f2cfd9edabd884ef5352a486fdab2cb5ab
|
||||
```
|
||||
|
||||
**Alt P1 etterlyste er der.** Det er derfor resten av dette dokumentet handler om po.
|
||||
|
||||
---
|
||||
|
||||
## 2. `--require-cost-baseline` NEKTET alle tre — og nekten er gratis
|
||||
|
||||
Operatørvalg D-3. Flagget ble kjørt på **full kjøresti**, ikke bare dry-run, og nekten er ordrett:
|
||||
|
||||
```
|
||||
run refused: this run was required to be anchored, but the knowledge base offers no cost baseline:
|
||||
without one the validator's stage 0 (reconciling each proposed cost line against the project's own)
|
||||
is skipped and nothing ties a proposed cost line to this project. Ship a cost-baseline.json, or pass
|
||||
--derive-cost-baseline when the base carries a priced schedule
|
||||
```
|
||||
|
||||
| | N100 | N200 | N500 |
|
||||
|---|---|---|---|
|
||||
| `--require-cost-baseline`, full kjøring | **rc 1** | **rc 1** | **rc 1** |
|
||||
| modellkall før nekten | **0** | **0** | **0** |
|
||||
| kontroll: samme argv UTEN flagget | **rc 0** | **rc 0** | **rc 0** |
|
||||
| `cost-baseline.json` i basen | fraværende | fraværende | fraværende |
|
||||
| `--derive-cost-baseline` (den andre døra nekten navngir) | **rc 1** | **rc 1** | **rc 1** |
|
||||
|
||||
Antallet modellkall asserteres, ikke exit-koden alene: **en nekt etter forbruket ser identisk ut ved
|
||||
exit-koden** (økt 57s regel). rc-0-kontrollen er der fordi en arm som bare kan bli rød ikke beviser
|
||||
noe.
|
||||
|
||||
Den andre dørens nekt er like presis, og den forklarer hvorfor det ikke finnes en tredje vei:
|
||||
|
||||
```
|
||||
no cost table found in bundle '…/n100-2023': no concept file carries a markdown table whose header
|
||||
names all three of ['code', 'quantity', 'unit_cost']
|
||||
```
|
||||
|
||||
**Målt konsekvens: det finnes ingen forankret form av en N-bundle-kjøring.** En vegnormal er et
|
||||
kravkorpus, ikke et anbudskorpus — den bærer ingen kostlinjer i det hele tatt, og ingen av po sine
|
||||
tre baseline-projeksjoner (håndskrevet fil · `baseline_from_project` · `derive_cost_baseline`) kan
|
||||
lage én av den. F4-flagget gjør altså nøyaktig det det ble bygget for, og svaret er at N-bundlene
|
||||
ikke er kostnadskjøringer.
|
||||
|
||||
**Derfor er de tre betalte armene kjørt UTEN flagget, og det er et uttalt avvik fra ordrens
|
||||
bokstav.** Ordren ba om tre betalte armer MED flagget; med flagget koster de ingenting og produserer
|
||||
ingen modellsvar, altså heller ingen (a), (b′), (c) eller (e). Nekten er rapportert som resultatet
|
||||
D-3 ba om (over), og armene som faktisk måler det nye utdraget er kjørt uten det. Det som ellers ville
|
||||
stått igjen, var en tom måling av den eneste tingen P2 finnes for.
|
||||
|
||||
---
|
||||
|
||||
## 3. Tre betalte armer
|
||||
|
||||
```bash
|
||||
export PORTFOLIO_FOUNDRY_PROJECT_ENDPOINT=… # utledet INLINE fra `az`, aldri i fil
|
||||
export PORTFOLIO_FOUNDRY_DEPLOYMENT=gpt-4-1-mini
|
||||
export PORTFOLIO_MODEL_MAP=scratchpad/major2-live/model_map.json
|
||||
export PACE_SECONDS=2
|
||||
uv run --with tiktoken python scratchpad/nbundler-p2/live_nbundler_p2.py {n100|n200|n500}
|
||||
# argv: <N100|N200|N500> --profile azure --docs-dir <base> --bundle-dir <base>
|
||||
# --proposal-review --outbox-dir … --run-id p2-<tag>-free --prepass-payload payload-<tag>.json
|
||||
```
|
||||
|
||||
Innsprutspunktet er `run._default_factory` (Fase 4e). Alle roller LEVENDE.
|
||||
Deployment urørt (`az … deployment show`): `GlobalStandard`, `capacity` **100**, `gpt-4.1-mini`
|
||||
`2025-04-14`, `Succeeded`.
|
||||
|
||||
| | **N100** | **N200** | **N500** |
|
||||
|---|---:|---:|---:|
|
||||
| rc | 0 | 0 | 0 |
|
||||
| prompter totalt | **6** | **7** | **5** |
|
||||
| proposer / checker | 5 / 1 | 6 / 1 | 4 / 1 |
|
||||
| prompt-tokens (o200k) | 7 748 | 16 764 | 6 092 |
|
||||
| leverandør-input | 12 217 | 25 877 | 9 619 |
|
||||
| leverandør-output | 824 | 1 248 | 611 |
|
||||
| **429-svar** | **0** | **0** | **0** |
|
||||
| parse-feil-artefakt | fraværende | **TIL STEDE (1)** | fraværende |
|
||||
| verktøykall i debatten | **0** (A-form: verktøyene trukket) | **0** | **0** |
|
||||
| validator-dom | **validated** | rejected (stage 4, P90) | **validated** |
|
||||
| dom-nøkkel | `c195117970ce86ef` | `70f3eb3540cd88f7` | `c9740904b1303f65` |
|
||||
| Steg 5 (reason matet tilbake) | 2 prompter | 2 prompter | 1 prompt |
|
||||
|
||||
**Én parse-feil, på N200 — og filens tilstedeværelse ER signalet** (økt 35). Den er ikke en
|
||||
formatfeil: modellen leverte gyldig JSON i riktig form, og det som falt var en DOMENE-invariant i
|
||||
`SavingsProposal`:
|
||||
|
||||
> `Value error, claimed saving 1500000.0 exceeds affected items' total 900000.0`
|
||||
|
||||
Den avledede grammatikken (Fase 1b funn 1b) holdt altså på tre ferske korpora igjen; det som fanget
|
||||
denne var pydantics egen `claimed <= total`. Funn-1-fangsten (kaller-eid sink, `finally`) leverte
|
||||
teksten VERBATIM, som er hele grunnen til at setningen over kan siteres i det hele tatt.
|
||||
|
||||
---
|
||||
|
||||
## 4. Hovedfunnet: nøkkelen finnes nå, og po dropper den to ganger
|
||||
|
||||
P1s funn 1 var okfs. **Det er lukket.** Det som står igjen er po sitt, og det er to uavhengige tap
|
||||
på samme sti.
|
||||
|
||||
**Tap 1 — ved PARSING.** `prepass.PrepassExcerpt` arver `_Permissive`, som er
|
||||
`ConfigDict(extra="ignore")`. Payloadens 14 medlemmer blir til 7 i objektet po bygger:
|
||||
|
||||
```python
|
||||
>>> sorted(gold.model_dump())
|
||||
['adjudication', 'bundle_id', 'concept_id', 'sha256', 'text', 'text_sha256', 'trust_tier']
|
||||
```
|
||||
|
||||
`title`, `req_number`, `sources`, `source_element_id` og `source_sha256` finnes ikke lenger.
|
||||
|
||||
**Tap 2 — ved RENDERING.** `prepass._data_blocks` renderer fire ting per utdrag: `concept_id`,
|
||||
`adjudication`, `trust_tier` og `text`. Selv om feltene hadde overlevd parsing, ville de ikke nådd
|
||||
prompten. DATA-blokka for fasit-konseptet, ORDRETT:
|
||||
|
||||
```
|
||||
--- BEGIN DATA krav/N100/id-4b61eee9-a149-42b3-863d-293b8320c15a (adjudication: unknown, trust_tier: unverified) ---
|
||||
|
||||
## Krav
|
||||
|
||||
Eventuell kryssing mellom gang- og sykkelveg og veg skal være planskilt ved ÅDT > 4 000.
|
||||
--- END DATA krav/N100/id-4b61eee9-a149-42b3-863d-293b8320c15a ---
|
||||
```
|
||||
|
||||
**En første måling av dette var KONFUNDERT, og ble felt før noe ble bygget på den.** Et naivt
|
||||
delstreng-søk fant `req_number` i 2 av 6 prompter og `source_element_id` i 2 av 6 — begge falske:
|
||||
strengen `Krav 3.3.1—13` står i prompten fordi den er en del av SPØRSMÅLET
|
||||
(«cut computed for: Hva krever Krav 3.3.1—13 i N100?»), og `id-4b61eee9-…` fordi den er en delstreng
|
||||
av `concept_id`. Ingen av dem kommer fra utdragets nye felt. Det er repoets egen regel om at en
|
||||
assert aldri skal stå på en delstreng to grener deler, anvendt på en måling i stedet for en test.
|
||||
|
||||
| når prompten faktisk? | N100 | N200 | N500 |
|
||||
|---|---|---|---|
|
||||
| utdragets `text` | **JA** | **JA** | **JA** |
|
||||
| `concept_id` (UUID-formet) | **JA** | **JA** | **JA** |
|
||||
| `req_number` som FELT | **NEI** | **NEI** | **NEI** |
|
||||
| `title` | **NEI** | **NEI** | **NEI** |
|
||||
| `sources` / `resource`-URL | **NEI** | **NEI** | **NEI** |
|
||||
| `source_element_id` som FELT | **NEI** | **NEI** | **NEI** |
|
||||
| `source_sha256` | **NEI** | **NEI** | **NEI** |
|
||||
|
||||
**Konsekvensen er direkte observerbar i modellens egne ord.** N200s proposer skriver:
|
||||
|
||||
> «…to optimize the geotechnical investigations and ground assessments already in the regulatory
|
||||
> planning phase (**as per the krav with ID 03418c46-ad07-4678-bae1-08f441f38903**)»
|
||||
|
||||
Modellen siterer en UUID fordi UUID-en er den eneste identifikatoren den kan se — den står i
|
||||
DATA-avgrenseren. Kravnummeret, som er det et menneske ville sitert, er i payloaden og når aldri
|
||||
fram. **Rangeringen finner riktig dokument, produsenten leverer nå nøkkelen, og konsumenten kaster
|
||||
den.**
|
||||
|
||||
---
|
||||
|
||||
## 5. Målene (a)–(e) + (b′), med nevner
|
||||
|
||||
### (a) Svarte modellen med det sentrale vilkåret i fasit-kravet?
|
||||
|
||||
| | N100 | N200 | N500 |
|
||||
|---|---|---|---|
|
||||
| nøkkelord fra fasit-kroppen | **3 av 3** (`planskilt` 13×, `ÅDT` 14×, `4 000` 3×) | **0 av 6** | **0 av 5** |
|
||||
| fasit-setningen ORDRETT | **3 ganger** | 0 | 0 |
|
||||
| **(a)** | **JA** | **NEI** | **NEI** |
|
||||
|
||||
Uendret fra P1, og mekanismen er den samme, målt og 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å «svar på oppgaven» og «svar på spørsmålet» sammenfaller. På N200 og N500 gjør
|
||||
de det ikke, og modellen fulgte oppgaven den fikk — den resonnerte om grunnundersøkelser og om
|
||||
fjernstyrte bommer, begge fra ANDRE leverte konsepter i kuttet.
|
||||
|
||||
### (b′) Navnga modellen konseptet den bygde på?
|
||||
|
||||
Ordrens nye mål, og det som P2 finnes for.
|
||||
|
||||
| | N100 | N200 | N500 |
|
||||
|---|---|---|---|
|
||||
| `req_number` ordrett i svaret | **0** | **0** | **0** |
|
||||
| `title` ordrett | 0 | 0 | 0 |
|
||||
| fasit-`concept_id` ordrett | 0 | 0 | 0 |
|
||||
| `source_element_id` som EGET felt | 0 | 0 | 0 |
|
||||
| `resource`-URL / `nisosts` | 0 | 0 | 0 |
|
||||
| leverte konsepter navngitt i det hele tatt | **0 av 8** | **1 av 8** (ikke fasit) | **1 av 8** (ikke fasit) |
|
||||
| **(b′)** | **NEI** | **NEI** | **NEI** |
|
||||
|
||||
**`req_number` er sitert 0 ganger i 18 modellsvar** — og det kan den ikke være, siden feltet aldri
|
||||
nådde prompten (§ 4). (b′) måler derfor po sin renderer, ikke modellens vilje: ingen implementasjon
|
||||
av modellen kunne bestått denne raden slik koden står.
|
||||
|
||||
**Proveniens sitert: nei × 3.** Verken `source_element_id` eller `resource`-URL-en forekommer i noe
|
||||
svar. Det er samme årsak.
|
||||
|
||||
### (c) Hallusinerte den et kravnummer eller en verdi?
|
||||
|
||||
| | N100 | N200 | N500 |
|
||||
|---|---|---|---|
|
||||
| kravnummer-formede tokens i svaret | **0** | **0** | **0** |
|
||||
| tall i prosa som ikke er i delivered | **0** | **0** | **0** |
|
||||
| konsept-id-referanser som ikke er levert | **0** | **0** | **0** |
|
||||
| **(c)** | **0** | **0** | **0** |
|
||||
|
||||
Ett treff undersøkt og forkastet som instrumentfeil: N100s `4,000` er modellens engelske tusenskille
|
||||
av det leverte `4 000`. N200s og N500s tall-fragmenter (`03418`, `4678`, `0000`, `4715`, …) er biter
|
||||
av ekte, leverte konsept-UUID-er som modellen skrev i prosa.
|
||||
|
||||
**Kjent-negativ for instrumentet:** første tall-regex fant 0 tokens i N200s og N500s prosa, altså
|
||||
kunne den ikke ha funnet en hallusinasjon heller. Den ble skjerpet til den fant de ekte tallene
|
||||
(N100 `4 000` fra kroppen), og målingen over står på den skjerpede.
|
||||
|
||||
**Det strukturerte FORSLAGET dikter fortsatt opp kostkoder**, som i P1, og av samme strukturelle
|
||||
grunn (ingen baseline, og oppgaven krever et tall):
|
||||
|
||||
| | kode | finnes i basen |
|
||||
|---|---|---|
|
||||
| N100 | `planskilt_kryssing` | **0 av 450 filer** |
|
||||
| N200 | `03418c46-ad07-4678-bae1-08f441f38903` | 2 av 1 137 — en EKTE konsept-id brukt som kostkode |
|
||||
| N500 | `RCB01` | **0 av 274 filer** |
|
||||
|
||||
**Forskjellen fra P1 er verdt å si:** P1s `03423b12` var en oppdiktet identifikator formet som en
|
||||
ekte, og den ble VALIDERT. Denne gangen er ingen oppdiktet kode identifikator-formet — de to
|
||||
oppdiktede er generiske kostlinje-etiketter. Det er ikke en forbedring noen bygget; det er et annet
|
||||
trekk fra samme modell. **Begge kjøringene ville vært nektet av `--require-cost-baseline`** (§ 2),
|
||||
og det er den delen som ikke er et sammentreff.
|
||||
|
||||
### (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 217 | 824 | 0,058 |
|
||||
| N200 | 7 | 25 877 | 1 248 | 0,115 |
|
||||
| N500 | 5 | 9 619 | 611 | 0,045 |
|
||||
| klientprobe | 1 | ~20 | ~5 | ~0,000 |
|
||||
| **SUM** | **19** | **47 733** | **2 688** | **NOK 0,22** |
|
||||
|
||||
**NOK 0,22 — 4,4 % av taket på NOK 5, og under ordrens tak på NOK 1. 429-svar: 0.**
|
||||
De tre nekt-armene kostet **NOK 0,00** (0 modellkall).
|
||||
|
||||
### (e) Nevner-vokabularet
|
||||
|
||||
**Ikke brukt i noen arm.** `[sourced-not-sufficient]`, `[unread]`, `[sourced]`, `[inferred]` og
|
||||
`[unsupported]` står **0 ganger i 18 modellsvar**. Som i P1: alle tre armene FANT noe å foreslå i
|
||||
kuttet, så ingen var i posisjonen markøren finnes for. Det er en ubesvart nevner, ikke et bevis for
|
||||
at markøren ikke virker.
|
||||
|
||||
---
|
||||
|
||||
## 6. «Ferdig»-dommen, etter den NYE definisjonen
|
||||
|
||||
Operatørvalg 08.09 12:20 (D-1). **Oppslagsspørsmålet «Hva krever Krav X?» er IKKE lenger po sitt
|
||||
kriterium** — oppslag er Claude Code sin jobb via okf sin C1-oppskrift
|
||||
(`llm-ingestion-okf/docs/2026-09-08-claude-code-skill-vilkaarlig-bundle.md`, som måler fire spørsmål
|
||||
over to bundler med fire pass og null oppfunne tall). po sitt kriterium er hypoteseformen:
|
||||
|
||||
**ferdig i po = (a) modellen bygger hypotesen på riktig fasit-konsept ELLER nekter forankret
|
||||
· (b′) navngir konseptet · (c) 0 hallusinasjoner.**
|
||||
|
||||
| | (a) | (b′) | (c) | **ferdig** |
|
||||
|---|---|---|---|---|
|
||||
| **N100:2023** | **JA** (fasit-setningen ordrett ×3) | **NEI** | **0** | **NEI** |
|
||||
| **N200:2024** | NEI | **NEI** | **0** | **NEI** |
|
||||
| **N500:2024** | NEI | **NEI** | **0** | **NEI** |
|
||||
|
||||
**0 av 3 — og den bindende raden er nå (b′), på alle tre.**
|
||||
|
||||
Det er en annen situasjon enn P1s 0 av 3, og forskjellen er hele poenget:
|
||||
|
||||
- **P1: nøkkelen fantes ikke.** For to av tre bundler var kravnummeret fraværende fra modellens
|
||||
kontekst i det hele tatt. Ingen konsument kunne gjort noe.
|
||||
- **P2: nøkkelen finnes, og po kaster den.** Alle tre payloadene bærer `req_number`, `title` og en
|
||||
hentbar `resource`-adresse. `prepass.PrepassExcerpt` ignorerer dem, og `prepass._data_blocks`
|
||||
renderer dem ikke. **(b′) er derfor ikke en modell-dom — det er en po-dom**, og den kan ikke bli
|
||||
ja for noen modell før de to linjene endres.
|
||||
|
||||
Den andre halvdelen av (a) — «ELLER nekter forankret» — er verdt å lese nøyaktig: med
|
||||
`--require-cost-baseline` nekter alle tre (§ 2), men da finnes det ingen hypotese å navngi et
|
||||
konsept for, så (b′) er umålbar og dommen ville vært ufullstendig snarere enn ja. **En N-bundle kan
|
||||
ikke samtidig være forankret og produsere en hypotese**, fordi et kravkorpus ikke bærer kostlinjer.
|
||||
Det er ikke en defekt i noen av de tre repoene; det er hva slags korpus en vegnormal er.
|
||||
|
||||
### Hvem eier hva som mangler
|
||||
|
||||
**llm-ingestion-okf eier ingenting her lenger.** P1s funn 1 er lukket og verifisert i denne
|
||||
målingen: utdraget bærer `title`, `req_number`, `sources`, `source_element_id` og `source_sha256`,
|
||||
rangeringen står på rang 1 × 3, kontraktsjekken går exit 0 med 15 regler, og budsjett-instrumentets
|
||||
egen kjent-positiv er oppdatert i takt med at § 8 flyttet.
|
||||
|
||||
**vegnormal-okf eier ingenting.** V2-treet reproduserer sine egne hasher, nevnerne lukker, 0 ufulgte
|
||||
lenker × 3, og hvert konsept bærer en adresse okf kan bære videre.
|
||||
|
||||
**portfolio-optimiser eier begge de gjenstående postene.** (1) `prepass`-sømmen dropper fem felt to
|
||||
ganger. (2) Kjøreformen: A-formens oppgave er fortsatt hardkodet (`run.py:1243`) og `--explore` er
|
||||
fortsatt nektet med `--prepass-payload` — men etter D-1 er dét ikke lenger en mangel, det er en
|
||||
avgrensning operatøren har tatt stilling til.
|
||||
|
||||
### Anbefaling til operatøren (beslutningen er din)
|
||||
|
||||
1. **La po bære utdragets nye felt gjennom til prompten.** To linjer: navngi feltene på
|
||||
`PrepassExcerpt` (eller les dem via `model_extra`), og la `_data_blocks` sette `req_number` og
|
||||
`title` i DATA-avgrenseren ved siden av `concept_id`. Kostnaden er målt: **+366 B per utdrag**
|
||||
er allerede betalt i payloaden, og rendringen legger til titalls tegn per utdrag. Dette er det
|
||||
ENESTE som kan gjøre (b′) nåbar, og det er en rød test og en søm — ikke en beslutning.
|
||||
2. **Ikke gjør N-bundlene til kostnadskjøringer.** `--require-cost-baseline` og
|
||||
`--derive-cost-baseline` nekter begge, målt, og grunnen er strukturell. Hvis en N-kjøring skal
|
||||
forankres, må baselinen komme fra prosjektet — ikke fra normalen.
|
||||
3. **`--require-cost-baseline` bør fortsatt brukes på N-kjøringer der et TALL skal telle.** Den
|
||||
nektet tre kjøringer som ellers ville stemplet `validated` over kostkoder som ikke finnes i noen
|
||||
base (§ 5c). Prisen er null.
|
||||
4. **Etter (1) er kriteriet på nytt målbart for under NOK 0,25.** Samme tre armer, samme spørsmål.
|
||||
|
||||
---
|
||||
|
||||
## 7. Funn — rapportert, ikke fikset
|
||||
|
||||
1. **po dropper utdragets nye felt to ganger** (§ 4). Eier: po. `PrepassExcerpt` er
|
||||
`extra="ignore"`; `_data_blocks` renderer fire ting. Nevner: 5 av 14 medlemmer når aldri
|
||||
prompten, og `req_number` er sitert 0 ganger i 18 svar. **Dette er (b′)s eneste årsak.**
|
||||
2. **Ingen forankret form finnes for en N-bundle** (§ 2). Eier: ingen — det er en egenskap ved
|
||||
korpustypen. Begge dørene nekter, målt, med rc-0-kontroll.
|
||||
3. **To av tre validerte forslag bruker oppdiktede kostkoder** (§ 5c). Eier: po (bruksmåte).
|
||||
`planskilt_kryssing` 0 av 450, `RCB01` 0 av 274. F4-flagget nekter dem, gratis.
|
||||
4. **Én parse-feil på N200** (§ 3). Ikke en formatfeil — en domene-invariant i `SavingsProposal`
|
||||
(`claimed 1 500 000 > total 900 000`). Rapportert fordi P1 målte null på alle tre, og fordi
|
||||
artefaktets tilstedeværelse er signalet.
|
||||
5. **Nevner-vokabularet ble ikke brukt i noen arm** (§ 5e). Uendret fra P1, samme ubesvarte nevner.
|
||||
6. **En delstreng-måling av «nådde feltet prompten» er konfundert** (§ 4). Både `req_number` og
|
||||
`source_element_id` finnes i prompten av HELT andre grunner (spørsmålslinja og `concept_id`).
|
||||
Nevnt fordi neste måling vil gjøre samme feil om den ikke er skrevet ned.
|
||||
|
||||
---
|
||||
|
||||
## 8. Ærlighets-grenser, uttalt
|
||||
|
||||
- **Én kjøring er én kjøring.** Tre armer, ett spørsmål hver, ingen gjentakelse, én modell.
|
||||
P1 og P2 er to trekk fra samme modell på nesten samme input, og de er UENIGE om utfallet på to av
|
||||
tre armer (N100 rejected → validated, N200 validated → rejected). Ingen årsak er tilskrevet; det
|
||||
er nettopp dét varians ser ut som når nevneren er 1.
|
||||
- **(b′) måler po, ikke modellen.** Feltet når aldri prompten, så ingen modell kunne bestått raden.
|
||||
Å skåre den som en modell-svakhet ville vært å bruke definisjonen som gjemmeplass.
|
||||
- **(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 de to spørsmålene ved et sammentreff i
|
||||
kravets innhold. Sammentreffet er identifisert, ikke skjult — og etter D-1 er oppslag uansett
|
||||
ikke po sitt kriterium.
|
||||
- **(c) = 0 gjelder svaret.** Det strukturerte forslaget dikter opp kostkoder, som er strukturelt
|
||||
påkrevd i en uforankret kjøring. Skillet er uttalt i § 5c, ikke skjult av definisjonen.
|
||||
- **AVVIK fra ordren, uttalt:** de tre betalte armene er kjørt UTEN `--require-cost-baseline`.
|
||||
Med flagget koster de null og måler null (§ 2). Nekten er rapportert som D-3s resultat, og armene
|
||||
som måler det nye utdraget er kjørt uten det.
|
||||
- **`--cost-vocabulary`, `--k` og `--rarity-weight` ble IKKE brukt.** Fasit sto på rang 1 med
|
||||
default-kommandoen på alle tre, så betingelsen for opt-in-flaggene 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 bundlene er faglig gjennomgått.** Sammenlikningen i (a) er mot konseptkroppen slik den
|
||||
står, ikke mot vegnormalen.
|
||||
- **`sources`-adressen er ikke hentet av po.** vegnormal-okf målte at URL-en returnerer bytes som
|
||||
er bytelike med `source_sha256`; den målingen er deres, ikke gjentatt her.
|
||||
|
||||
---
|
||||
|
||||
## 9. Verifiseringslogg
|
||||
|
||||
| # | Påstand | Slik den ble verifisert |
|
||||
|---|---|---|
|
||||
| 1 | okf HEAD `171798e`, treet rent | `git -C ~/repos/llm-ingestion-okf log --oneline -1` + `status --short` (tom) |
|
||||
| 2 | Tre V2-hasher reproduserer | `payload.bundle.ref` mot vegnormal-okfs melding, 3 av 3 ordrett |
|
||||
| 3 | 446 / 1 133 / 270 konsepter, 0 skipped | `okf.navigate_bundle(...).context_files`, po sin egen kode |
|
||||
| 4 | Fasit på rang 1 × 3 | indeks av fasit-id-en i `payload.excerpts`, flaggløs kommando |
|
||||
| 5 | Utdraget har 14 medlemmer | `sorted(payload['excerpts'][0].keys())`, 3 av 3 |
|
||||
| 6 | Kontraktsjekk exit 0 × 3 | `okf_contract_check.py --skill … --payload …`, 15 regler, 0 funn |
|
||||
| 7 | `admit_payload` OK × 3 | `prepass.admit_payload(p, bundle_dir=…, resolved_id=…)` |
|
||||
| 8 | Klientproben grønn | `uv run pytest tests/test_foundry_profile_live.py -q` → 1 passed |
|
||||
| 9 | Deployment urørt | `az … deployment show` → GlobalStandard, 100, `2025-04-14` |
|
||||
| 10 | Flagget nekter × 3, 0 modellkall | full kjøring, `assert not records` i måleskriptet, rc 1 |
|
||||
| 11 | rc-0-kontroll uten flagget | samme argv uten `--require-cost-baseline` → rc 0, 3 av 3 |
|
||||
| 12 | `--derive-cost-baseline` nekter × 3 | rc 1 + nekt-teksten navngir de tre påkrevde kolonnene |
|
||||
| 13 | po dropper feltene ved parsing | `sorted(excerpt.model_dump())` → 7 nøkler; `_Permissive` er `extra="ignore"` |
|
||||
| 14 | po dropper dem ved rendering | `prepass.render_context(...)`, DATA-blokka sitert ordrett |
|
||||
| 15 | Delstreng-målingen var konfundert | de to «treffene» lokalisert til spørsmålslinja og `concept_id` |
|
||||
| 16 | (a) N100 ja | fasit-setningen ORDRETT 3 ganger; `planskilt`/`ÅDT`/`4 000` alle til stede |
|
||||
| 17 | (a) N200/N500 nei | 0 av 6 / 0 av 5 nøkkelord fra hver fasit-kropp i noe svar |
|
||||
| 18 | (b′) nei × 3 | `req_number`/`title`/`concept_id`/`element_id`/URL: 0 treff i 18 svar |
|
||||
| 19 | (c) = 0 | kravnummer-formede tokens: 0; tall i prosa mot delivered, ett treff forkastet |
|
||||
| 20 | Instrumentet for (c) virker | skjerpet til det fant `4 000` fra kroppen; første form fant 0 av 0 |
|
||||
| 21 | Kostkodene | `grep -rl` i hver base med nevner; fasit-id-en som kjent-positiv (2 treff) |
|
||||
| 22 | Parse-feilen på N200 | `p2-n200-free-parse-failures.json` finnes; feilteksten sitert ordrett |
|
||||
| 23 | Prisene | Azure Retail Prices API hentet på nytt 08.09 |
|
||||
| 24 | 0 × 429 | `retries`-telleren i alle 18 poster |
|
||||
Loading…
Add table
Add a link
Reference in a new issue