P2 measured that the producer's payload now carries title/req_number/sources/source_* on every excerpt (14 members, was 9), but PrepassExcerpt ignored them (extra="ignore") and _data_blocks rendered only concept_id/adjudication/trust_tier -- so (b') was a po verdict, never a model verdict. title/req_number/sources are now named fields; source_* locators are read via model_extra and a prefix scan (measured: the producer treats source_* as an open-ended family, not a fixed allowlist), so a future producer's new source_foo key reaches the prompt without a code change here. A P1-form payload renders byte-identical to before. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
34 KiB
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 levertetextutentitle/req_number, så kravnummeret spørsmålet stiller fantes ikke noe sted i modellens kontekst. llm-ingestion-okf lukket det (17c49fc,c95d189— HEAD171798e, 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
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:
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
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:
>>> 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,titleog en hentbarresource-adresse.prepass.PrepassExcerptignorerer dem, ogprepass._data_blocksrenderer 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)
- La po bære utdragets nye felt gjennom til prompten. To linjer: navngi feltene på
PrepassExcerpt(eller les dem viamodel_extra), og la_data_blockssettereq_numberogtitlei DATA-avgrenseren ved siden avconcept_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. - Ikke gjør N-bundlene til kostnadskjøringer.
--require-cost-baselineog--derive-cost-baselinenekter begge, målt, og grunnen er strukturell. Hvis en N-kjøring skal forankres, må baselinen komme fra prosjektet — ikke fra normalen. --require-cost-baselinebør fortsatt brukes på N-kjøringer der et TALL skal telle. Den nektet tre kjøringer som ellers ville stempletvalidatedover kostkoder som ikke finnes i noen base (§ 5c). Prisen er null.- 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
- po dropper utdragets nye felt to ganger (§ 4). Eier: po.
PrepassExcerpterextra="ignore";_data_blocksrenderer fire ting. Nevner: 5 av 14 medlemmer når aldri prompten, ogreq_numberer sitert 0 ganger i 18 svar. Dette er (b′)s eneste årsak. - 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.
- To av tre validerte forslag bruker oppdiktede kostkoder (§ 5c). Eier: po (bruksmåte).
planskilt_kryssing0 av 450,RCB010 av 274. F4-flagget nekter dem, gratis. - É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. - Nevner-vokabularet ble ikke brukt i noen arm (§ 5e). Uendret fra P1, samme ubesvarte nevner.
- En delstreng-måling av «nådde feltet prompten» er konfundert (§ 4). Både
req_numberogsource_element_idfinnes i prompten av HELT andre grunner (spørsmålslinja ogconcept_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,--kog--rarity-weightble 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 medsource_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 |
10. P3 (ordre 20260908T141941Z) — po bærer utdragets nye felt gjennom til prompten
PM-valg 08.09 14:20Z, på denne målingens egen anbefaling (§ 6): ja, to linjer, rød test først.
10.1 Reproduksjon (steg 1, uendret fra § 4)
>>> sorted(json.load(open("scratchpad/nbundler-p2/payload-n500.json"))["excerpts"][0].keys())
['adjudication', 'bundle_id', 'bundle_id_inherited', 'concept_id', 'rank', 'req_number',
'sha256', 'source_element_id', 'source_sha256', 'sources', 'text', 'text_sha256', 'title',
'trust_tier'] # 14 medlemmer, i payloaden
>>> sorted(prepass.load_prepass_payload("scratchpad/nbundler-p2/payload-n500.json").excerpts[0]
... .model_dump().keys())
['adjudication', 'bundle_id', 'concept_id', 'sha256', 'text', 'text_sha256', 'trust_tier']
# 7 medlemmer, etter parsing
>>> "req_number" in prepass.render_context(...)
False # aldri i prompten (§ 4)
10.2 Feltform, valgt med måling
Spørsmålet ordren stiller: hvilken form overlever en ukjent source_foo-nøkkel fra en FRAMTIDIG
produsent, uten kodeendring her? okfs egen melding (§ 4, sitert) kaller source_* en prefiks-
regel, ikke en allowlist — K2 bærer fem slike lokatorer der N-bundlene bærer to. To former ble
sammenliknet mot nøyaktig det spørsmålet:
- Navngitte felt (
source_element_id: str | None,source_sha256: str | None, …): en tredjesource_*-nøkkel krever et NYTT felt påPrepassExcerptog en ny rendringslinje — en kodeendring, nøyaktig det prefiksregelen sier man IKKE skal måtte gjøre. model_extra(extra="allow"påPrepassExcerptALENE, lest tilbake via etsource_-prefikssøk isource_locators()): en nysource_*-nøkkel havner unavngitt imodel_extraog plukkes opp av SAMME søk, null kodeendring.
Valgt: model_extra for source_*-familien. title, req_number og sources er derimot
navngitte felt — de er SS-8-deklarerte, entallige medlemmer (aldri en voksende familie), og en
model_extra-lesning av dem ville kastet bort pydantics egen validering for ingen gevinst.
Testen test_a_future_source_star_key_survives_without_a_code_change
(tests/test_prepass_excerpt_fields_loadbearing.py) legger til en TREDJE, aldri navngitt
source_page_number-nøkkel og viser at den når source_locators() uendret.
10.3 Fiksen: to steder, ikke to linjer
Anbefalingen i § 6 anslo "to linjer"; målt var det to STEDER (parsing + rendering), hver med mer
enn én linje fordi sources trengte en egen typet klasse (PrepassSource, med resource og en
valgfri title) og source_locators() trengte en egen metode:
- Parsing (
PrepassExcerpt):title: str | None,req_number: str | None,sources: tuple[PrepassSource, ...] | None, alle defaultNone(de fleste payloader i dette repoet er fra FØR P2s produsent-endring og bærer ingen av dem — et påkrevd felt ville refusert hver payload skrevet før i dag).model_config = ConfigDict(extra="allow")— kun på DENNE klassen,_Permissivesextra="ignore"står urørt forPrepassBundle/PrepassBudget/osv. - Rendering (
_excerpt_header, ny funksjon_data_blocksnå kaller):req_numberogtitlelegges til i parentesen ved siden avadjudication/trust_tierNÅR de finnes;sources[0].resource(adressen) og hversource_*-lokator (generisk, viasource_locators()) legges til deretter. Kjent-negativ: når ingen av de nye feltene finnes, er sløyfa en no-op og headeren er BYTE-IDENTISK med før P3 (test_a_p1_form_payload_renders_the_header_exactly_as_before,test_a_p1_form_payload_render_seed_also_unchanged) — pinnet LITERALT, ikke med en delstreng-assert, fordi en lekkende tom-klausul (f.eks. en etterlatt,) ikke ville vist seg i et substring-søk.
render_seed deler _data_blocks med render_context (ko-(p)); en fiks som bare traff den ene
armen ville latt utforsknings-døra ligge stille bak debatt-døra —
test_render_seed_also_carries_the_new_fields gater begge.
10.4 Rødt → grønt → mutasjon rød
Ny fil: tests/test_prepass_excerpt_fields_loadbearing.py, 10 arm. FØR fiksen: 8 røde, 2
grønne (de to kjent-negative armene er trivielt grønne før fiksen òg — de er kontroller, ikke
mål). ETTER fiksen: 10 av 10 grønne.
Mutasjon (revert _excerpt_header/_data_blocks til § 4s form, midlertidig, aldri committet):
3 av 10 røde — nøyaktig de tre rendrings-armene
(test_the_data_block_renders_req_number_title_and_the_address,
test_the_data_block_renders_a_future_locator_too, test_render_seed_also_carries_the_new_fields)
— parsing-armene forblir grønne (mutasjonen rørte ikke PrepassExcerpt), som beviser at de to
halvdelene av fiksen har HVER SIN uavhengige gate. Fiksen restaurert fra en kopi (shasum -a 1
verifisert identisk før/etter), aldri git checkout.
10.5 Suite, golden, lint
1521 passed, 5 skipped (var 1511 — 10 nye), pytest -q, 272 s. ruff check src tests og
ruff format --check src tests: rene (94 funn i scratchpad/ er FØR-eksisterende, utracket,
utenfor scope — samme avgrensning som K3-ordrenes ruff check src tests tools). mypy src: 0
funn, 37 filer. Golden demo-transcript.stdout UENDRET: shasum -a 1 = ea8c534… — forventet,
simulation.py importerer ikke prepass i det hele tatt.
10.6 Én betalt N100-kjøring med --require-cost-baseline — og (b′) er STRUKTURELT ikke dekket
Samme oppsett som § 3 (live_nbundler_p2.py n100 --require-cost-baseline), med den FIKSEDE koden.
KJENT-POSITIV n100: navigate_bundle=446 (fasit 446) OK
run refused: this run was required to be anchored, but the knowledge base offers no cost baseline: …
===== ARM n100 [req] (rc=1) =====
MODELLKALL: 0 (gaten MAA fyre foer foerste kall)
rc=1, 0 modellkall, NOK 0,00. Dette REPRODUSERER § 2s funn ordrett — --require-cost-baseline
nekter N100 FØR første modellkall, fordi en vegnormal ikke bærer kostlinjer (strukturelt, uendret
av denne fiksen). Konsekvens: (b′) kan IKKE måles i denne armen — det oppstår aldri en
hypotese å navngi et konsept for, uansett hvor godt utdraget bærer req_number/title. Dette er
IKKE en regresjon fra fiksen; det er § 2s "en N-bundle kan ikke samtidig være forankret og
produsere en hypotese" gjentatt på den fiksede koden.
(b′) er derfor "ikke dekket" i DENNE armen — strukturelt, ikke som en feil ved fiksen.
Fiksens EGEN korrekthet er verifisert der den kan verifiseres gratis: offline, mot payloadens
faktiske felt (§ 10.1–10.4). En live gjenmåling av (b′) på den FRIE armen (uten flagget, slik § 3
kjørte N100) ville kostet et nytt betalt kall utenfor denne ordrens scope (ordren navngir
eksplisitt --require-cost-baseline-armen som den ENE betalte kjøringen); det er ikke gjort her.
10.7 Funn — rapportert, ikke fikset
- (b′) er umålbar under
--require-cost-baselinefor enhver N-bundle (§ 10.6). Samme struktur som funn 2 i § 7, nå bekreftet på den fiksede koden. Ingen handling — F4 gjør nøyaktig det den ble bygget for. - En live gjenmåling av (b′) på den frie N100-armen (uten flagget) er ikke gjort her — ordren
navngir
--require-cost-baselinesom den ene betalte kjøringen, og en fri kjøring ville vært en ny, ubedt betalt handling.