# P11 — po på okf 0.8.1 Ordre `20260910T225652Z-5329131326-from-.claude`, 2026-09-11. Ingen betalt kjøring. **NOK 0.** Ingen push. okf på PATH: **0.8.1** (tagg `v0.8.1` = `3daf983`). Basen: `~/repos/portfolio-optimiser/scratchpad/s7c/k2-bundle-s7c` ved ref `sha256-tree:f14872a01104e47474093611b1960c6c541e4701dc40147a00c8e1b337c8a92a`. Spørsmålet ordrett: «Finn kostnadsbesparelser i Stange skole-anbudet». ## § 0 Hva som ER målt og hva som IKKE er det **Målt:** * At PATH-okf er 0.8.1, målt på tre uavhengige måter (§ 2). * At P10s premiss (ix), PMs forutsagte nevnere 629/623/6 og 629/620/9, **holder på 0.8.1**. P10s avvik skyldtes versjonen, og det er nå en måling i stedet for en forklaring (§ 3). * Hvilken regel som bærer flyttet: `--no-source-quota` ALENE gir 0.7.0-nevnerne tilbake i begge armer. De eksakte 0.8.1-tallene er et samspill med `--tie-shared-rank` (begge armer) og `--stem-prefix` (åpen arm). `--title-covered` fyrer aldri på denne basen (byte-identisk payload). * At 0.8.1 med de tre nye reglene av reproduserer 0.7.0-payloadene: samme leverte liste og samme budsjett. * **Diagnosen P10 § 6 manglet:** prisskjemaet ble rangert ut av ÉN produsent-konstant, nemlig dokument-prioren `DOCUMENT_PRIOR_EXPONENT` 1.0 → 0.5 i okf `38104b7`. Funnet ved bisect over okf sin historikk og bevist med en én-variabel-test. `--tie-shared-rank` er utelukket, og flyttet i `known_positive` er en versjonsmarkør og ikke mekanismen. På 0.8.1 er prisskjemaet ikke lenger rangert ut. Det kuttes av budsjettet (§ 4). * Tilbudsradene over fire korpus: identifikator-tallene står uendret på 0.8.1, mens `chars` flytter seg fordi payloaden er en annen (§ 5). * At `okf check` på 0.8.1 har **15 regler, ikke 16**, og at K3-15-paret er et ekte avvik mellom to korpus. Det siste er målt med 16-regel-checkeren fra okf `main` (§ 6). **IKKE målt:** * Ingenting her er bekreftet mot en levende modell. Ingen betalt kjøring er gjort. * Hva et budsjett-kuttet prisskjema koster et forslag. * Om eksponent 0.5 er riktig for K2 generelt. okf sveipet den over 18 rader, og dette er ÉTT spørsmål. * Hva `scratchpad/nbundler-p2/skill-n100/SKILL.md` inneholdt da N-dokumentet 2026-09-08 målte «exit 0 × 3» (§ 6). ## § 1 Premisser, med utfall per rad | # | premiss (ordrens) | utfall | kommando | |---|---|---|---| | (i) | HEAD `d8dadbf`, to utrackede. po sin `ls-remote` er umålt av PM | ✅ HEAD og de to utrackede stemmer eksakt. **`git ls-remote origin main` = `d8dadbf…` = HEAD, altså upushet = 0.** STATE sa 4 (`455d611`, målt 10.09); operatøren har pushet siden | `git rev-parse --short HEAD` · `git status --porcelain` · `git ls-remote origin main` | | (ii) | STATE er 119 linjer | ✅ 119 | `wc -l STATE.md` | | (iii) | arbeidstre 1 577/5, frossen eksport 1 566/5 + 11, ruff, format 199, mypy, golden | ✅ alle. Frossen eksport: 1 566 passed / 5 skipped, 1 failed + 10 errors, altså de 11 navngitte, med 18 linjer `not a git repository`. mypy: 37 filer. Golden `ea8c534…` | `uv run pytest -q` · `git archive d8dadbf` til `/tmp` + `uv run --frozen pytest -q` · `uv run ruff check src tests` · `uv run ruff format --check src tests` · `uv run mypy src` · `shasum -a 1 tests/golden/demo-transcript.stdout` | | (iv) | PATH-okf er 0.8.1 | ✅ på tre måter, se § 2 | § 2 | | (v) | flaggene ordrett fra `--help` | ✅ ordrett. `--source-quota` har default 2, `--stem-prefix` er PÅ siden 2026-09-09 | `okf consume --help` | | (vi) | (ix) = P10 l. 39, considered/withheld/delivered | ✅ brukt som FØR-rader | — | | (vii) | basen ved ref `f14872a0…` | ✅ assertert med `--ref` i HVER re-kutting (okf nekter ved avvik): 14 + 1 + 14 sonder, alle rc 0 | `okf consume … --ref sha256-tree:f14872a0…` | | (viii) | spørsmålet ordrett | ✅ | — | | (ix) | P9 § 4 sine seks tilbudsrader | ✅ reprodusert eksakt på dagens kode | `scratchpad/p11/measure_p11.py` | | (x) | § 6-diagnosen (PM-premiss) | ⚠️ **DELVIS.** «Rangert ut, ikke filtrert» ✅ på 0.7.0. «Tie-breaking utelukket» ✅. «Produsent-versjonsforskjell» ✅, nå navngitt som `38104b7`. **«`known_positive` 10 349 → 12 563» er IKKE mekanismen** ❌: det tallet flytter seg ved `17c49fc` og `c95d189` mens den leverte lista står byte-identisk. **På 0.8.1 er koden heller ikke `below_k`**, men `over_budget_after_knapsack` | § 4 | | (xi) | innboksen har 3 meldinger | ✅ 3, og alle er ført til terminaltilstand | `find ~/.claude/coord/portfolio-optimiser/inbox -type f \| wc -l` → 3, deretter 0 | | (xii) | K3-15-paret går fra rc 0 til rc 1 | ❌ **AVVIK på PATH-0.8.1: fortsatt rc 0 / 15 regler.** Flippen holder bare på okf `main` `7cca9e0`, som ingen tagg inneholder | § 6 | | (xiii) | foreldede «15 regler»-sitater | ✅ funnet der premisset sa (test-docstring l. 3, STATE l. 25/30). **Men 15 er fortsatt riktig tall på 0.8.1.** Docstringen fikk en presisering, se § 7 | `git grep -n -E '15 (regler\|rules)'` | | (xiv) | måleteknikk | ✅ fulgt: rc fanget direkte, `--out` rett til fil, `--k` og ikke `-k` | — | | — | «`okf check` med 16 regler» | ❌ **15 på PATH-0.8.1**. 16 finnes bare på `7cca9e0` | § 6 | | — | `grep -rn 'okf check' src tests scripts` gir ett treff | ✅ 1 treff, en docstring. grep rc 0 | — | ## § 2 Versjonsmålingen ``` uv tool list # llm-ingestion-okf v0.8.1 # - okf which okf # ~/.local/bin/okf ~/.local/share/uv/tools/llm-ingestion-okf/bin/python -c "import llm_ingestion_okf as p; print(p.__version__)" # 0.8.1 okf --version # usage: okf [-h] {consume,check,skill,project,build} ... (rc 2: flagget finnes ikke) git -C ~/repos/llm-ingestion-okf ls-remote origin main # 7cca9e079edc… refs/heads/main git -C ~/repos/llm-ingestion-okf ls-remote --tags origin 'v0.8*' # v0.8.0^{} = 4d1f9d3… v0.8.1^{} = 3daf983… ``` Flagglista fra `okf consume --help` på 0.8.1, ordrett, ved siden av 0.7.0-lista som P10 § 3 målte: ``` 0.7.0: --cost-vocabulary --k --limit --no-tie-shared-rank --out --question --rarity-weight --ref --reserve-top-rank --tie-shared-rank --withheld-titles 0.8.1: --question --k --limit --cost-vocabulary --reserve-top-rank --rarity-weight --tie-shared-rank --no-tie-shared-rank --stem-prefix --no-stem-prefix --title-covered --no-title-covered --source-quota N --no-source-quota --withheld-titles --out --ref ``` Seks flagg er nye: `--stem-prefix`/`--no-stem-prefix` («ON since 2026-09-09»), `--title-covered`/`--no-title-covered` («ON since 2026-09-10») og `--source-quota N`/`--no-source-quota` («Default 2 since 2026-09-10»). `--tie-shared-rank` er PÅ («ON since 2026-09-10»). `--help` er primærkilden for flagg, ikke okf sin CHANGELOG. ## § 3 (ix)-tabellen — 0.7.0 og 0.8.1 side om side Alle 0.8.1-rader er kjørt med okf 0.8.1. De fire lesesidereglene `--source-quota 2`, `--stem-prefix`, `--title-covered` og `--tie-shared-rank` er PÅ som default, og hver rad slår av det som står i navnet. «pris» sier hvor `del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1` (67 245 tegn) havnet. po sin egen `prepass.admit_payload` mot den monterte basen gir **ADMITTED på alle 18.** **Default-armen** (flaggløs: `--k 8`, `--limit 120000`): | payload | okf | considered / withheld / delivered | budsjett brukt av limit | `title` | pris | levert tekst (tegn) | |---|---|---|---|---|---|---| | s7c GAMMEL | `6776c37` | 629 / 621 / 8 | 79 440 av 120 000 | 0 av 8 | withheld `below_k` | 72 535 | | p10 v2 | 0.7.0 | 629 / 621 / 8 | 54 931 av 120 000 | 8 av 8 | withheld `below_k` | 47 679 | | **r1 shipped** | 0.8.1 | **629 / 623 / 6** | 67 011 av 120 000 | 6 av 6 | withheld `below_k` | 60 646 | | r2 `--no-source-quota` | 0.8.1 | 629 / 621 / 8 | 54 931 av 120 000 | 8 av 8 | withheld `below_k` | 47 679 | | r3 `--no-stem-prefix` | 0.8.1 | 629 / 623 / 6 | 67 011 av 120 000 | 6 av 6 | withheld `below_k` | 60 646 | | r4 `--no-title-covered` | 0.8.1 | 629 / 623 / 6 | 67 011 av 120 000 | 6 av 6 | withheld `below_k` | 60 646 | | r5 `--no-tie-shared-rank` | 0.8.1 | 629 / 621 / 8 | 73 211 av 120 000 | 8 av 8 | withheld `below_k` | 64 756 | | r6 de tre nye av | 0.8.1 | 629 / 621 / 8 | 54 931 av 120 000 | 8 av 8 | withheld `below_k` | 47 679 | | r7 alle fire av | 0.8.1 | 629 / 621 / 8 | 71 999 av 120 000 | 8 av 8 | withheld `below_k` | 63 644 | **Den åpne armen** (`--cost-vocabulary --k 12 --limit 160000`): | payload | okf | considered / withheld / delivered | budsjett brukt av limit | `title` | pris | levert tekst (tegn) | |---|---|---|---|---|---|---| | s7c GAMMEL | `6776c37` | 629 / 617 / 12 | 150 249 av 160 000 | 0 av 12 | **LEVERT pos. 10** | 141 470 | | p10 v2 | 0.7.0 | 629 / 617 / 12 | 88 297 av 160 000 | 12 av 12 | withheld `below_k` | 76 824 | | **r1 shipped** | 0.8.1 | **629 / 620 / 9** | 108 219 av 160 000 | 9 av 9 | withheld `over_budget_after_knapsack` | 97 772 | | r2 `--no-source-quota` | 0.8.1 | 629 / 617 / 12 | 85 873 av 160 000 | 12 av 12 | withheld `below_k` | 74 510 | | r3 `--no-stem-prefix` | 0.8.1 | 629 / 619 / 10 | 147 593 av 160 000 | 10 av 10 | withheld `over_budget_after_knapsack` | 135 343 | | r4 `--no-title-covered` | 0.8.1 | 629 / 620 / 9 | 108 219 av 160 000 | 9 av 9 | withheld `over_budget_after_knapsack` | 97 772 | | r5 `--no-tie-shared-rank` | 0.8.1 | 629 / 619 / 10 | 143 733 av 160 000 | 10 av 10 | **LEVERT pos. 8** | 133 844 | | r6 de tre nye av | 0.8.1 | 629 / 617 / 12 | 88 297 av 160 000 | 12 av 12 | withheld `below_k` | 76 824 | | r7 alle fire av | 0.8.1 | 629 / 617 / 12 | 77 645 av 160 000 | 12 av 12 | withheld `below_k` | 66 696 | **Hva tabellen sier, én påstand om gangen:** 1. **PMs forutsigelse holder på 0.8.1.** Shipped gir 629/623/6 og 629/620/9. P10s avvik skyldtes altså versjonen, og det er nå målt og ikke bare forklart. 2. **`--source-quota` er den ene regelen som er NØDVENDIG i begge armer.** r2 alene gir 629/621/8 og 629/617/12 tilbake. Mekanismen står i `withheld`-kodene. På r1 er 209 (default) og 219 (åpen) konsepter `source_quota_exceeded`, fordi kvoten 2 skyver ut de mange små utdragene fra SHA-planen og romlisten (v2 har opptil 5 fra én kilde, r1 høyst 2). Plassene fylles av de neste kandidatene, som er større, og knapsacken dropper 2 og 3 av dem over budsjett. Resultatet er færre utdrag med mer tekst: budsjettet øker med 22,0 % og 22,6 %, levert tekst med 27,2 % og 27,3 %. 3. **De eksakte tallene er et SAMSPILL, ikke én regel.** I default-armen krever fallet fra 8 til 6 at også `--tie-shared-rank` er på: r5, med kvote på og tie av, gir 8. I den åpne armen krever fallet fra 12 til 9 at også `--stem-prefix` og `--tie-shared-rank` er på: r3 og r5 gir 10. Ingen enkeltregel kan få æren alene. 4. **`--title-covered` fyrer aldri på denne basen.** r4 er byte-identisk med r1 i begge armer (`shasum -a 1` gir `0ec7157e…` og `f9346cbf…` for begge par), som okf sin egen melding sa for K2. 5. **0.8.1 med 0.7.0s regler ER 0.7.0.** r6 har samme leverte `(concept_id, text_sha256)`-liste, samme budsjett og samme tekst som v2 i begge armer. Det eneste som skiller dem er `budget.known_positive` (12 563 → 13 238), altså kontraktsdokumentet instrumentet måler seg selv mot. 6. Hvert utdrag i alle 14 nye payloads bærer `title`. ## § 4 Prisskjemaet — diagnosen P10 § 6 manglet **Rang uten kutt.** Sonden bruker samme flagg per rad, men `--k 200 --limit 50000000`, så knapsack-kuttet aldri fyrer: | arm | r1 | r2 | r3 | r4 | r5 | r6 | r7 | |---|---|---|---|---|---|---|---| | default | 193 | 193 | 192 | 193 | 194 | 193 | over 200 (`below_k`) | | åpen | 20 | 20 | 21 | 20 | 20 | 21 | 20 | `rank` i et utdrag er LEVERINGSPOSISJON (`len(delivered) + 1` i okf `consume.py`), ikke fusjonsrang. Med k = 200 leverer alle radene 200, så posisjonen blir rangen. I den åpne armen står prisskjemaet på 20–21 under hver rad. Ingen av de fire flaggene bringer det tilbake til topp 12. I den gamle payloaden sto det på 10. **Bisect over produsentens egen historikk**, åpen arm. Hver commit er kjørt fra `git archive src tools docs` under `scratchpad/p11/bisect/`, med okf-verktøyets egen python og commitens egne defaults. okf-repoet er bare lest, og PATH-okf er urørt. Kjent-positiv på BEGGE ender: `6776c37` gir den gamle payloaden og `v0.7.0` gir v2, begge med identisk levert liste (`concept_id` + `text_sha256`). | okf-commit | åpen: considered / withheld / delivered | budsjett | `known_positive` | pris | = s7c GAMMEL | = v2 | |---|---|---|---|---|---|---| | `6776c37` | 629 / 617 / 12 | 150 249 | 10 349 | LEVERT pos. 10 | **ja** | nei | | `56ae274` · `56c1205` · `116d3e1` · `a37d5ce` | 629 / 617 / 12 | 150 249 | 10 349 | LEVERT pos. 10 | ja | nei | | `17c49fc` | 629 / 617 / 12 | 151 131 | **12 049** | LEVERT pos. 10 | **ja** | nei | | `c95d189` · `c3b645b` · `f6fea13` | 629 / 617 / 12 | 153 011 | **12 563** | LEVERT pos. 10 | **ja** | nei | | **`38104b7`** | 629 / 617 / 12 | 77 645 | 12 563 | **withheld `below_k`** | nei | nei | | `a364ef4` | 629 / 617 / 12 | 88 297 | 12 563 | withheld `below_k` | nei | **ja** | | `v0.7.0` | 629 / 617 / 12 | 88 297 | 12 563 | withheld `below_k` | nei | **ja** | Budsjettet og `known_positive` flytter seg ved `17c49fc` og `c95d189` mens lista står. `38104b7` (2026-09-09, «recovery yields to declaration, and 9 % of the corpus that was in no segment») endrer tre hunks i `consume.py`. Den eneste kodelinja som verken er kommentar eller docstring er dokument-prioren: `totals[document] / units[document]` blir `totals[document] / units[document] ** DOCUMENT_PRIOR_EXPONENT`, med konstanten satt til 0.5. En tetthet blir sublineær, så et dokument delt i mange enheter får prioren sin tilbake. Ved `38104b7` tar `romliste-teknisk` 8 av 12 plasser. **Én-variabel-testen.** Eksportene ligger under `scratchpad/p11/exponent/`, og KUN den ene linja er endret i kopien (`sed`, 1 treff av 1): | produsent | eksponent | åpen, k 12 | pris (k 12) | pris uten kutt | = s7c GAMMEL | = PATH-0.8.1 shipped | |---|---|---|---|---|---|---| | `38104b7` | 0.5 (som levert) | 629 / 617 / 12 | withheld `below_k` | pos. 20 | nei | — | | `38104b7` | **1.0** | 629 / 617 / 12 | **LEVERT pos. 10** | pos. 10 | **ja, byte-lik liste** | — | | `v0.8.1` | 0.5 (som levert) | 629 / 620 / 9 | withheld `over_budget_after_knapsack` | pos. 20 | nei | **ja** (kontroll) | | `v0.8.1` | **1.0** | 629 / 620 / 9 | withheld `over_budget_after_knapsack` | **pos. 10** | nei | nei | Default-armen går samme vei (bisect, flaggløs). Lista er lik den gamle til og med `f6fea13` (72 535 tegn). Den faller ved `38104b7` til 63 644 tegn; med eksponent 1.0 i kopien er det 72 535 og byte-lik liste igjen. Den faller en gang til ved `a364ef4`, til 47 679, som er lik v2. Det andre fallet er nøyaktig det `--no-tie-shared-rank` reverserer på 0.8.1: r7 (alle fire av) har samme leverte liste som `38104b7`, og r6 (tie PÅ) samme liste som `a364ef4`. Det er målt i begge armer. **Konklusjon, med tall:** * **Prisskjemaet ble RANGERT UT, ikke filtrert, og av én produsent-konstant:** `DOCUMENT_PRIOR_EXPONENT` 1.0 → 0.5 i okf `38104b7`. Satt tilbake i en kopi av den commiten gir konstanten den gamle payloaden byte-identisk tilbake, med prisskjemaet på posisjon 10. * **`--tie-shared-rank` er utelukket som årsak.** Prisskjemaet var alt `below_k` ved `38104b7`, før tie-effekten kom (`a364ef4`), og r7 på 0.8.1 (tie av) gir `below_k`. Tie-regelen bærer derimot den ANDRE halvdelen av tekstfallet i default-armen (63 644 → 47 679). * **`known_positive` 10 349 → 12 563 er en versjonsmarkør, ikke mekanismen.** Tallet flyttet seg ved `17c49fc` og `c95d189` mens den leverte lista sto byte-identisk. * **Det finnes intet flagg for prioren.** okf 0.8.1 med alle fire lesesideregler av er byte-lik `38104b7`. * **På 0.8.1 er diagnosen en ANNEN.** Prisskjemaet er ikke lenger `below_k`, fordi kvoten løfter det inn i kortlista. Det er `over_budget_after_knapsack`: 67 366 byte tekst mot en rest knapsacken ikke har. Med `--limit 240000` leveres det på posisjon 7 (11 levert). Med `--no-tie-shared-rank` alene leveres det på posisjon 8. Eksponent 1.0 alene på 0.8.1 gir det rang 10 uten kutt, men kuttet står. ## § 5 Tilbudsradene — fire korpus, samme instrument Instrumentet er `scratchpad/p9/measure_v070.py`, kopiert til `scratchpad/p11/measure_p11.py` med to endringer: absolutte stier, og id-dumpene lagt i `scratchpad/p11/`, så P9s egne filer ikke skrives over. Komposisjonen er uendret: den SHIPPEDE `generate.grounding_offer` over `render_context(payload)` pluss basens tekst, slik `run_project` komponerer `_grounding_text`. **Kjent-positiv-kontroll FØR bruk.** P8s tre K2-rader, byte-identisk: | rad | konsepter | tegn | identifikatorer | = P8 | |---|---|---|---|---| | K2 s7c + `payload-open` | 630 | 1 991 597 | 50 | ✅ | | K2 s7c + `payload-default` | 630 | 1 970 415 | 50 | ✅ | | K2 s7a2 (peker-armen) | 629 | 1 894 500 | 50 | ✅ | **Tilbudet, P9 og 0.8.1 side om side.** Alle radene har 0 kostlinjer og `derive` REFUSED: | Korpus | Bygg | Konsepter | P9-payload: tegn / id | 0.8.1-payload: tegn / id | |---|---|---|---|---| | K2 (uten payload) | v0.7.0-pinnen | 453 | 1 940 723 / **65** | — (ingen payload) | | K2 + åpen | v0.7.0-pinnen | 453 | 2 037 246 / **65** | 2 043 690 / **65** | | K2 + default | v0.7.0-pinnen | 453 | 2 016 064 / **65** | 2 005 070 / **65** | | K2 + åpen | s7c (payloadens egen base) | 630 | 1 991 597 / 50 | 1 998 041 / **50** | | K2 + default | s7c (payloadens egen base) | 630 | 1 970 415 / 50 | 1 959 421 / **50** | | N100 `n100-2023` | v0.7.0 (V3) | 446 | 462 041 / **435** | 461 939 / **435** | | N200 `n200-2024` | v0.7.0 (V3) | 1 133 | 1 500 962 / **982** | 1 497 743 / **982** | | N500 `n500-2024` | v0.7.0 (V3) | 270 | 408 220 / **272** | 411 188 / **272** | P9-kolonnen er reprodusert eksakt på dagens kode. «P9-payload» er de samme filene P9 brukte (`scratchpad/s7c/payload-*.json` og `scratchpad/nbundler-p2/payload-n*.json`). «0.8.1-payload» er re-kuttet i denne økta (`scratchpad/p11/payload-{open,default}-r1-shipped.json` og `scratchpad/p11/payload-n*-081.json`). N-payloadene er kuttet med P2s egen default-kommando, og spørsmålet er LEST ut av den gamle payloaden. **Hypotesen holdt for identifikatorene, men ikke for tegnene.** Ingen N-rad flytter seg i identifikatorer, fordi hver identifikator i kuttet også står i basens tekst. `chars` flytter seg på alle radene, fordi `grounding_offer` leser kuttet PLUSS basen, og kuttet er et annet. Rang 1 er fortsatt det spurte kravet på alle tre (`Krav 3.3.1—13`, `Krav 2.9.2—12`, `Krav 10.2—2`), men rang 2–8 er andre dokumenter. **N-ablasjonen** (`scratchpad/p11/n-ablation/`, samme seks rader som for K2). r7 (alle fire av) er byte-lik P2-payloaden på alle tre. r2 (`--no-source-quota`) gir SAMME leverte liste som shipped. r3 og r5 flytter hver for seg rang 2–8. Rangflyttet bæres altså av `--stem-prefix` og `--tie-shared-rank`, ikke av kvoten, slik `--help` sier («a bundle with no alternatives is unaffected»). **En observasjon, ikke et funn mot okf.** Kvoten endrer likevel payloaden på en base med én kilde: ikke utdragene, men `withheld`-kodene. Alle 438, 1 125 og 262 withheld-oppføringene er `source_quota_exceeded` på 0.8.1, mot `below_k` på P2 og på r2. «Rangert ut» og «kappet av kvoten» er to ulike fakta, og på en base med én kilde viser payloaden bare det andre. Ingen FYI er sendt, fordi dette er et valg av kodeprioritet og ingen målt verdi er gal. ## § 6 `okf check` — regelantall, nevnere og kjent-negativ **På PATH-okf 0.8.1** (`scratchpad/p11/check_matrix.sh`, rc fanget direkte), 24 rader: | skill | payload | rc | rapportlinje | funn | |---|---|---|---|---| | `SKILL-k2-s7c` (0.8.1, samme base) | 14 P11-payloads, r1–r7 × 2 armer | **0** × 14 | conformant: **15 rules** over 6–12 excerpts og 617–623 withheld | 0 | | `SKILL-k2-s7c` | `p10/payload-default-v2.json` | **0** | conformant: 15 rules over 8 excerpts and 621 withheld entries | 0 | | `SKILL-k2-s7c` | `p10/payload-open-v2.json` | **0** | conformant: 15 rules over 12 excerpts and 617 withheld entries | 0 | | `SKILL-k2-s7c` | `s7c/payload-default.json` (GAMMEL) | **1** | NOT conformant: 15 rules over 8 excerpts and 621 withheld entries | 8 × `excerpt_unnamed` | | `SKILL-k2-s7c` | `s7c/payload-open.json` (GAMMEL) | **1** | NOT conformant: 15 rules over 12 excerpts and 617 withheld entries | 12 × `excerpt_unnamed` | | `SKILL-k2-s7c` | kjent-negativ `{}` | **1** | NOT conformant: 15 rules over 0 excerpts and 0 withheld entries | **9** | | P10s SKILL (0.7.0, samme base) | `p10/payload-default-v2.json` | 0 | conformant: 15 rules … | 0 | | **K3-15:** P9s SKILL (pinnen, `18ae18ab…`) | `nbundler-p2/payload-n100.json` (`da6b8204…`) | **0** | conformant: 15 rules over 8 excerpts and 438 withheld entries | 0 | | `SKILL-n100` (0.8.1, generert her) | `nbundler-p2/payload-n100.json` | 0 | conformant: 15 rules … | 0 | | `SKILL-n100` | `p11/payload-n100-081.json` | 0 | conformant: 15 rules … | 0 | | P2s `skill-n100/SKILL.md` | `nbundler-p2/payload-n100.json` | 0 | conformant: 15 rules … | 0 | **Regelantallet på PATH-0.8.1 er 15, ikke 16**, i hver av de 24 radene. Grunnen er målt i okf-repoet, som bare er lest. `rule_bundle_identity` (`bundle_mismatch`) kom i `7cca9e0`. **Ingen tagg inneholder den commiten** (`git tag --contains 7cca9e0` er tom), og den er ikke forfar til v0.8.1 (`git merge-base --is-ancestor 7cca9e0 v0.8.1` → rc 1). Installert `contract_check.RULES` = 15. Antall `rule_`-definisjoner: 15 i v0.8.1 og 16 i `7cca9e0`. **Med 16 regler.** `7cca9e0` er kjørt fra `git archive` under `scratchpad/p11/okf-7cca9e0/`, med dens `src` først på `PYTHONPATH` til okf-verktøyets python (versjonsstreng 0.8.1, `RULES` 16). PATH-okf er urørt. | skill | payload | rc | rapportlinje | funn | |---|---|---|---|---| | **K3-15:** P9s SKILL (pinnen `18ae18ab…`) | `nbundler-p2/payload-n100.json` (`da6b8204…`) | **1** | NOT conformant: 16 rules over 8 excerpts and 438 withheld entries | **1 × `bundle_mismatch`**, på både `bundle_id` og `ref` | | **riktig par:** `SKILL-n100` (generert for `n100-2023`) | `nbundler-p2/payload-n100.json` | **0** | conformant: **16 rules** over 8 excerpts and 438 withheld entries | 0 | | riktig par | `p11/payload-n100-081.json` | 0 | conformant: 16 rules … | 0 | | `SKILL-k2-s7c` | P11 r1 default / åpen · P10 v2 default / åpen | 0 × 4 | conformant: 16 rules … | 0 | | **samme id, annen build:** P9s SKILL (pinnen `18ae18ab…`) | `p10/payload-default-v2.json` (`f14872a0…`) | **1** | NOT conformant: 16 rules … | 1 × `bundle_mismatch`, på `ref` ALENE | | P2s `skill-n100/SKILL.md` | `nbundler-p2/payload-n100.json` | **1** | NOT conformant: 16 rules … | 1 × `bundle_mismatch`: skill-en deklarerer `vegnormal-n500-2024` | | `SKILL-k2-s7c` | kjent-negativ `{}` | **1** | NOT conformant: 16 rules over 0 excerpts … | **9** | **Avgjørelsen om K3-15-paret: et EKTE avvik, ikke en okf-defekt.** SKILL-en og payloaden er fra to ulike korpus: `k2-trinn1-20260903` ved `18ae18ab…` mot `vegnormal-n100-2023` ved `da6b8204…`. En SKILL generert for N100-bundelen går rc 0 med 16 regler mot samme payload. Derfor er det ikke sendt noen FYI om en defekt. Svaret på okf sin melding gir disse tallene. **FUNN i po sin egen scratchpad.** `scratchpad/nbundler-p2/skill-n100/SKILL.md` deklarerer `vegnormal-n500-2024` ved `673a0c2c…` (270 konsepter), altså N500. `skill-n500` deklarerer det samme, mens `skill-n200` er riktig. Under 16 regler går N100-paret fra rc 0 til rc 1. N-dokumentet 2026-09-08 (§ 1, rad 6) rapporterer «exit 0 × 3» med `--skill skill-n100/SKILL.md`. Filene har mtime 2026-09-09 16:55, så hva fila inneholdt da den målingen ble gjort er **ikke målt** og kan ikke gjenskapes herfra. Det daterte dokumentet er urørt. **Nevneren for påstanden om at ingen po-kjøring tolker en `okf check`-exit som byggefeil:** `grep -rn 'okf check' src tests scripts` gir **1 treff** (grep rc 0): docstringen i `tests/test_unnamed_excerpt_observation_loadbearing.py`. Ingen skript og ingen test kaller `okf check`. ## § 7 Hva som ble endret i sporede filer * **`src/`: 0 filer.** Dette er en måle- og dokumentasjonsordre, og ingen måling tvang fram en kodeendring. `_ground_against_input` er urørt. * `tests/test_unnamed_excerpt_observation_loadbearing.py`: **docstring, +2 linjer**, ingen endret atferd. Setningen om P9 (0.7.0, 15 regler) står. Tilføyelsen sier at P11 målte 15 igjen på 0.8.1, og hvor den 16. regelen er. * `docs/2026-09-10-p10-konform-k2-payload.md`: datert **tilføyelse** i § 4 og § 6. Den gamle setningen står. * `docs/okf-konsum-kontrakter.md`: **urørt.** Den bærer ingen okf-versjon, ingen regeltelling og ingen konsumkommando: `grep -n -E 'okf (consume|check)|regler|rules|--stem|--source-quota' docs/okf-konsum-kontrakter.md` gir 0 treff. 0.8.1 har altså ikke gjort noe tall der galt, og et flagg uten en kommando å stå i ville vært støy. * `STATE.md` (local-only). ## § 8 Honesty limits * **Ingen betalt kjøring er gjort. NOK 0.** Ingenting her er bekreftet levende. At en modell bruker et navngitt, kvote-spredt kutt bedre er ikke vist. * **En re-spilt payload er en NY måling, ikke en reparert gammel.** `scratchpad/s7c/payload-{default,open}.json` og `scratchpad/p10/payload-{default,open}-v2.json` er urørt: `shasum -a 1` gir `1ea1c389…`, `c3779de9…`, `af113bf9…` og `ff7f264e…`, både før og etter. Alle nye filer ligger i `scratchpad/p11/`. * **Nevneren for konformans er ÉN bundle i ÉN build.** `bundle_id` identifiserer ikke bytene: tre K2-builds bærer `k2-trinn1-20260903` ved tre ulike refs, og 16-regel-checkeren flagger nettopp det paret som bare skiller seg på `ref`. Sammenlign alltid `ref`. * **`okf check` er GULVET, aldri beviset.** Alle 14 nye K2-payloads er konforme, og den åpne armen leverer likevel ikke prisskjemaet. Formen holder; innholdet er et annet. * **K2-tilbudsraden sammenligner ULIKE builds**: v0.7.0-pinnen (`18ae18ab…`, 453 konsepter) rendret med payloads kuttet fra s7c-basen (`f14872a0…`, 629). Raden er gjentatt fordi P9 hadde den. De to «egen base»-radene i § 5 er den ærlige sammenligningen. * **16-regel-tallene er målt fra en `git archive`-eksport av okf `main`, ikke fra en installert release.** Det er en utagget commit, og en fremtidig tagg kan avvike. * **Bisect og én-variabel-test er kjørt med okf-verktøyets python mot eksporterte trær.** Kjent-positiv på begge ender, og kontrollen der v0.8.1-eksporten er lik PATH-payloaden, gjør det til en måling av produsenten. Det er likevel ikke produsentens egen test. * Diagnosen i § 4 gjelder ÉTT spørsmål på ÉN base. Om eksponent 0.5 er riktigere enn 1.0 for K2 er verken bekreftet eller avkreftet. okf målte sine 18 rader, og dette er én rad til. * **(A) prosa-skanningen, (B) blindsone-VALGET og (C) sporing av leverte kutt som fixturer forblir OPERATØRENS** og ble ikke flyttet av denne økta. ## § 9 Reproduksjon Skriptene ligger under `scratchpad/p11/`. De er utracket og følger ikke med i `git archive HEAD`, så kjernekommandoene er gjengitt her. ```bash # (ix), én rad (åpen arm, shipped) okf consume ~/repos/portfolio-optimiser/scratchpad/s7c/k2-bundle-s7c \ --question "Finn kostnadsbesparelser i Stange skole-anbudet" \ --ref sha256-tree:f14872a01104e47474093611b1960c6c541e4701dc40147a00c8e1b337c8a92a \ --cost-vocabulary --k 12 --limit 160000 --out scratchpad/p11/payload-open-r1-shipped.json # ablasjonen: legg til --no-source-quota | --no-stem-prefix | --no-title-covered | --no-tie-shared-rank bash scratchpad/p11/gen_k2.sh # 14 payloads uv run python scratchpad/p11/analyze.py # § 3 python3 scratchpad/p11/gen_n.py # tre N-payloads på 0.8.1 uv run python scratchpad/p11/measure_p11.py # § 5 bash scratchpad/p11/check_matrix.sh # § 6, 15 regler # 16 regler, uten å røre PATH-okf: git -C ~/repos/llm-ingestion-okf archive 7cca9e0 src | tar -x -C scratchpad/p11/okf-7cca9e0 PYTHONPATH=scratchpad/p11/okf-7cca9e0/src ~/.local/share/uv/tools/llm-ingestion-okf/bin/python \ -c 'import sys, llm_ingestion_okf.cli as c; sys.argv=["okf"]+sys.argv[1:]; sys.exit(c.main())' \ check --skill --payload # bisect: for hver commit i 6776c37, git log --reverse 6776c37..v0.7.0 -- consume-stiene, og v0.7.0: git -C ~/repos/llm-ingestion-okf archive src tools docs | tar -x -C scratchpad/p11/bisect/tree- PYTHONPATH=scratchpad/p11/bisect/tree-/src scratchpad/p11/bisect/tree-/tools/okf_consume.py \ --question "" --cost-vocabulary --k 12 --limit 160000 --out # én-variabel: det samme, med DOCUMENT_PRIOR_EXPONENT = 0.5 -> 1.0 i kopiens consume.py (sed, 1 treff) ```