docs(s7a2): re-maalt mot ekte K2 - adjudication innfridd, read_bundle ble 90 % av kjoeringen
Maaling, ingen produksjonskode. Kontroll 1230/5 uendret, ruff ren, golden byte-uendret
(shasum -a 1 = ea8c534..., som CLAUDE.md-radene foerer).
Fem punkter re-maalt mot K2-bundle-20260903 (629 konsepter, 478 nestede indekser):
1. NYTT KRAV 4: basen kan ikke aapnes slik den er levert. Rot-index erklaerer
bundle_id 'k2-trinn1-20260903', katalogen heter 'K2-bundle-20260903' -> D6/B1
nekter med BundleIdMismatch. Foerste gang en declared-gren fyrer i naturen
(619 filer erklaerer noekkelen; CLAUDE.md foerer begge grener som defensive).
Botemiddelet er et staaende MANUELT steg per leveranse, og hvilket repo som
skal endre seg er en kryss-repo-beslutning.
2. adjudication INNFRIDD: 618 proposed / 0 adjudicated / 11 unknown av 629 -
produsentens tall bekreftet eksakt. Nevnerne sammenfaller fordi log.md er
foreldreloes (paa disk, aldri lenket, derfor heller ikke en ufulgt lenke);
skipped=0 betyr altsaa ikke "alt ble naadd".
3. Falsifiseringen er UENDRET: verified/sources finnes ingen steder, saa
admits_falsification er False 629/629 og dommen undecided. Kjent-positiv
kontroll paa patchet kopi flipper til True - gaten diskriminerer.
4. read_bundle er blitt kostnaden: 2 312 -> 42 761 tok, og resultatet rir i
7 av 12 prompter = 307 496 tok = 90 % av alle prompt-tokens. MAJOR-3s
asymptotiske paastand holder, men konstanten er naa hele regningen.
S7a-rapportens 40 320/13 var revise-kjeden; like-for-like baseline er
maalt paa nytt (39 500/11 -> 343 437/12), og 96 % av differansen er
read_bundle alene, ikke manus-forskjellen. Stigen mangler et trinn: 478
nestede indekser konsumeres av navigasjonen og forkastes av context_files.
5. Produsentens token-derivasjon for stoerste konsept var 18 % for lav
(~98 700 derivert vs 119 763 maalt); tegn-tellingene stemmer til +/-1.
S7b: krav 3 innfridd, krav 1 (validator-input.json) og 2 (utfylt prisskjema)
UENDRET og begge kryss-repo, krav 4 er nytt. derive_cost_baseline nekter
fortsatt; kjent-positiv fixture gir 3 kostlinjer.
Paragraf 8 baerer en RETTELSE av min egen feil, beholdt synlig: rapporten paasto
foerst at CLAUDE.md-ens golden-fasit ea8c534 var en fantomhash. Den er
shasum -a 1 av INNHOLDET; jeg maalte git hash-object (55bdea3, hashes over
blob<len>NUL+innhold og dermed ulik av konstruksjon), fikk ikke treff, og leste
et negativt resultat fra feil spoerring som et faktum. De ni invariant-radene er
RIKTIGE. Verifiseringsloven ansikt 4 mot mitt eget instrument.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
98e648310c
commit
1c540e63f1
1 changed files with 484 additions and 0 deletions
484
docs/2026-09-03-syretest-s7a2-k2.md
Normal file
484
docs/2026-09-03-syretest-s7a2-k2.md
Normal file
|
|
@ -0,0 +1,484 @@
|
||||||
|
# Syretest S7a-2 — re-måling mot den EKTE K2-bundelen (629 konsepter)
|
||||||
|
|
||||||
|
**Dato:** 2026-09-03 · **Ordre:** `20260903T031843Z-5600416337-from-.claude` ·
|
||||||
|
**Baseline:** `docs/2026-09-03-syretest-s7a-k2.md` (S7a, 39 konsepter) ·
|
||||||
|
**Kunnskapsbase:** `~/corpora/okf-telling-20260829/K2-bundle-20260903/`, bygd av
|
||||||
|
`llm-ingestion-okf` 03.09 (ordre `…72037075`)
|
||||||
|
|
||||||
|
Dette er en **måling**. Ingen produksjonskode er endret — `git status` på `src/`, `tests/`,
|
||||||
|
`shared/` og `pyproject.toml` er tom, hele måleoppsettet ligger i `scratchpad/s7a2/` (utracket),
|
||||||
|
og hvert tall under er produsert av en kommando som står i teksten.
|
||||||
|
**Kontroll: 1230 passed / 5 skipped**, `ruff check src tests` ren.
|
||||||
|
|
||||||
|
**Ingen validert besparelse er funnet, og ingen var mulig.** To av S7as tre S7b-krav står
|
||||||
|
uendret; det tredje er innfridd. Se § 7.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 0. Instrumentet, validert mot en kjent positiv FØR bruk
|
||||||
|
|
||||||
|
Samme protokoll som S7a: `tiktoken` `o200k_base` over den fulle prompt-blobben
|
||||||
|
(tekst + `function_call` + `function_result`), kjørt med `uv run --with tiktoken`.
|
||||||
|
|
||||||
|
| Kjent-positiv sjekk | Publisert fasit | Målt nå |
|
||||||
|
|---|---|---|
|
||||||
|
| `read_bundle` over `tunnel-hauglia` | 259 tok | **259 tok** |
|
||||||
|
| `bundle_context` over `tunnel-hauglia` | 12 595 tok | **12 595 tok** |
|
||||||
|
|
||||||
|
Begge reproduseres eksakt. Først etter det er K2-tallene lest som tall.
|
||||||
|
|
||||||
|
**S7as to instrumentfeller er arvet som rettelser, ikke gjenoppdaget:** sonden henter
|
||||||
|
`text`/`result`/`arguments` ut av hvert `Content` (aldri `repr`), og `Message.text` telles **ikke**
|
||||||
|
i tillegg til `Content.text`. Multiplikator-sonden (§ 5) bruker en **ASCII**-sentinel
|
||||||
|
(`inbox-del-ii-bilag-6-teknisk-oppsett.md`), fordi S7a målte 0 kopier med en sentinel som inneholdt
|
||||||
|
norske tegn prompten serialiserer escaped.
|
||||||
|
|
||||||
|
**Én kontroll er ny, og den er advisor-foranlediget:** hvert verktøyresultat asserteres
|
||||||
|
**ikke-tomt**. Et manus som åpner en sti som ikke finnes gir like mange kall i samme rekkefølge, og
|
||||||
|
dialogen ser identisk ut med en som virket. Alle fire resultater i § 3 er ikke-tomme (§ 5).
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 1. BLOKKERENDE FUNN: basen kan ikke åpnes slik den er levert
|
||||||
|
|
||||||
|
```
|
||||||
|
$ uv run python -c "from portfolio_optimiser import okf; \
|
||||||
|
okf.reconcile_bundle_id('/Users/ktg/corpora/okf-telling-20260829/K2-bundle-20260903')"
|
||||||
|
BundleIdMismatch: knowledge base '…/K2-bundle-20260903' declares bundle_id
|
||||||
|
'k2-trinn1-20260903' but is mounted as 'K2-bundle-20260903'; an approach names a base by
|
||||||
|
that id, so a run would evaluate against one and report the other (source: declared-index)
|
||||||
|
```
|
||||||
|
|
||||||
|
Rot-`index.md` erklærer `bundle_id: k2-trinn1-20260903`; katalogen heter `K2-bundle-20260903`.
|
||||||
|
D6/B1-gaten fyrer og **nekter**. Det rammer hvert kallsted som avstemmer: `explore.read_bundle`,
|
||||||
|
`run_project`s bundle-arm og dispatcheren.
|
||||||
|
|
||||||
|
**Dette er første gang en `declared`-gren fyrer i naturen.** CLAUDE.md fører begge som
|
||||||
|
DEFENSIVE («null `^bundle_id`-treff noe sted under `shared/`, `src/`, `tests/`»). Målt nå:
|
||||||
|
**619 filer** erklærer nøkkelen (rot-`index.md` + 618 konsepter, alle samme verdi), så også
|
||||||
|
`declared-concept` ville fyrt, med samme mismatch.
|
||||||
|
|
||||||
|
**Nekten er riktig, og den er ikke en defekt i noen av repoene** — den er en ekte
|
||||||
|
grensesnittfriksjon: produsenten navngir `bundle_id` etter *kjøringen*, operatøren navngir
|
||||||
|
katalogen etter *korpuset*. Måling fortsetter mot en kopi montert under det erklærte navnet
|
||||||
|
(`scratchpad/s7a2/k2-trinn1-20260903`), som er nøyaktig det botemiddelet en operatør har.
|
||||||
|
**Etter monteringen: `origin = declared-index`** — første naturlige forekomst.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 2. Navigasjon: tre tall, og stigen eksponerer bare det siste
|
||||||
|
|
||||||
|
Ordren spør hva «dokument» betyr når indeksene er hierarkiske. Det finnes **tre** tall, og de
|
||||||
|
er ulike:
|
||||||
|
|
||||||
|
| Telling | Antall |
|
||||||
|
|---|---|
|
||||||
|
| `.md` på disk totalt | **1 108** |
|
||||||
|
| — herav `index.md` (navigasjon) | **478** |
|
||||||
|
| — herav ikke-index | **630** |
|
||||||
|
| Nådd av navigasjonen (`bundle.files`) | **1 107** |
|
||||||
|
| Konseptfiler (`context_files`) | **629** |
|
||||||
|
| Foreldreløse (på disk, aldri lenket) | **1** (`log.md`) |
|
||||||
|
| Ufulgte kryss-lenker (`skipped`) | **0** |
|
||||||
|
|
||||||
|
`log.md` (OKF § 7) finnes nå — S7a målte at den manglet — men **ingen index lenker den**
|
||||||
|
(`grep -rl 'log\.md' --include='index.md'` → 0), så navigasjonen når den aldri. Den blir derfor
|
||||||
|
verken konsept eller ufulgt lenke: den er **usynlig**. Det er grunnen til at `skipped = 0` ikke
|
||||||
|
kan leses som «alt ble nådd»; nevneren mot disk er det eneste som avslører den.
|
||||||
|
|
||||||
|
**Konsekvens for `adjudication`-nevneren (§ 4):** produsentens 629 og leserens `context_files`
|
||||||
|
= 629 er **samme tall** — nettopp fordi `log.md` er foreldreløs. Hadde den vært lenket, ville
|
||||||
|
leseren talt 630 og de to nevnerne divergert.
|
||||||
|
|
||||||
|
**Dybde og synlighet fra rot:**
|
||||||
|
|
||||||
|
| | Antall |
|
||||||
|
|---|---|
|
||||||
|
| Lenker i rot-`index.md` | 39 (11 konsepter + 28 underindekser) |
|
||||||
|
| Konsepter på dybde 0 / 1 / 2 | 11 / 54 / **564** |
|
||||||
|
|
||||||
|
**Stigen har ingen trinn for hierarkiet.** `list_bundles` sier hvilke baser som finnes,
|
||||||
|
`read_bundle` gir **alle 629 konseptene flatt**, `read_file` gir ett dokument. De 478 indeksene
|
||||||
|
er *konsumert* av navigasjonen og *forkastet* av `context_files` (basenavn-regelen). En agent kan
|
||||||
|
lese en nestet `index.md` med `read_file` (målt: `del-ii-bilag-7-prisskjema/index.md` = 41 tok),
|
||||||
|
men **ingenting i `read_bundle`s svar forteller den at de 478 finnes**. Hierarkiet er lesbart,
|
||||||
|
ikke oppdagbart.
|
||||||
|
|
||||||
|
### Kostnad per kall
|
||||||
|
|
||||||
|
| Kall | S7a (39) | S7a-2 (629) |
|
||||||
|
|---|---|---|
|
||||||
|
| `list_bundles` (1 base) | 127 | **112** |
|
||||||
|
| `read_bundle` | 2 312 | **42 761** |
|
||||||
|
| `read_file`, sum over alle konsepter | 684 236 | **726 848** |
|
||||||
|
| `read_file`, median | 6 709 | **290** |
|
||||||
|
| `read_file`, maks | 121 462 | **119 909** |
|
||||||
|
| `bundle_context` (formen før MAJOR-3) | 682 303 | **648 787** |
|
||||||
|
|
||||||
|
**Katalogtaket holder.** 112 tokens for én base, uendret i form, og `index_excerpt` er avkortet.
|
||||||
|
S2c/katalog-invariantens O(BASER) står.
|
||||||
|
|
||||||
|
**`read_bundle` er O(dokumenter), og det er nå hele kostnaden.** 2 312 → 42 761 tokens er
|
||||||
|
**18,5×** for 16× flere dokumenter — asymptotisk nøyaktig som MAJOR-3 lovet. Men konstanten er
|
||||||
|
ikke lenger neglisjerbar: se § 5, der dette ene resultatet er 90 % av kjøringen.
|
||||||
|
|
||||||
|
**MAJOR-3 gjør K2 navigerbar.** `bundle_context` ville vært 648 787 tokens — mer enn noe
|
||||||
|
kontekstvindu — og ville ridd med i hver senere prompt.
|
||||||
|
|
||||||
|
### Største konsept, MÅLT (produsenten ba om re-måling)
|
||||||
|
|
||||||
|
| | Tegn | o200k-tokens |
|
||||||
|
|---|---|---|
|
||||||
|
| Produsentens tall (body) | 217 472 | ~98 700 (**derivert**) |
|
||||||
|
| Målt (body) | **217 471** | **119 763** |
|
||||||
|
| Målt (`read_file`-output, m/frontmatter) | 217 850 | **119 909** |
|
||||||
|
|
||||||
|
Produsentens tegn-tellinger reproduseres til ±1 (median: oppgitt 441, målt **440** — differansen
|
||||||
|
er avsluttende linjeskift). **Token-derivasjonen var 18 % for lav**: den hviler på ~2,2 tegn/token,
|
||||||
|
mens norsk juridisk-teknisk tekst her måler **1,82** tegn/token.
|
||||||
|
|
||||||
|
**Konsepter over § 5s 100k-tak: 1 av 629** (`inbox-del-ii-bilag-9-1-avtale-som-tiltransporteres-norconsult-as.md`,
|
||||||
|
119 909 tok). S7a hadde 2 av 39. Segmenteringen har flyttet massen: median falt fra 6 709 til
|
||||||
|
**290** tokens.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 3. Dialog: fire verktøykall, tre runder, `speaker_known` gjennomgående
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run python -m portfolio_optimiser.run K2-STANGE \
|
||||||
|
--docs-dir scratchpad/s7a2/k2-trinn1-20260903 \
|
||||||
|
--bundle-dir scratchpad/s7a2/k2-trinn1-20260903 \
|
||||||
|
--explore "Finn kostnadsbesparelser i Stange skole-anbudet" \
|
||||||
|
--explore-config scratchpad/s7a2/explore-config.json \
|
||||||
|
--scripted-replies scratchpad/s7a2/scripted-replies.json \
|
||||||
|
--outbox-dir scratchpad/s7a2/outbox --run-id s7a2
|
||||||
|
```
|
||||||
|
|
||||||
|
**`--docs-dir` peker på bundelen, og det er inert.** Flagget finnes kun for å tilfredsstille
|
||||||
|
enkeltprosjekt-modusens argument-sjekk (`run refused: single-project mode requires PROJECT_ID and
|
||||||
|
--docs-dir`); på bundle-stien setter `run.py` selv `docs_dir=bundle_dir` (`run.py:463`) og avleder
|
||||||
|
prosjektet fra `validator-input.json`. Katalogen bidrar altså ingen kontekst — og det er nettopp
|
||||||
|
derfor kjøringen likevel nekter.
|
||||||
|
|
||||||
|
`Exploration: concluded after 3 round(s); 1 approach(es) to evaluate`, deretter
|
||||||
|
**rc=1 `run refused: IR projection not found in bundle: 'validator-input.json'`** — samme utfall
|
||||||
|
som S7a, og artefaktet skrives fra `finally`.
|
||||||
|
|
||||||
|
Fra `s7a2-exploration.json`:
|
||||||
|
|
||||||
|
| Felt | Målt |
|
||||||
|
|---|---|
|
||||||
|
| `completed` | `true` |
|
||||||
|
| `tool_calls` | `list_bundles` → `read_bundle` → `read_file` → `read_file` |
|
||||||
|
| runder | 3, alle `speaker_known: true`, siste `is_request_satisfied: true` |
|
||||||
|
| `tokens_spent` | 96 |
|
||||||
|
| `stop` | `null` |
|
||||||
|
|
||||||
|
**§ 5s dialog-rad er oppfylt**, som i S7a.
|
||||||
|
|
||||||
|
**De to `read_file`-målene er valgt, og valget står her fordi det bestemmer § 5:**
|
||||||
|
1. `del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1.md` — direkte analog til S7as ene
|
||||||
|
`read_file` (prisskjemaet), og **nestet**, så hierarkisk sti-oppløsning blir øvet.
|
||||||
|
2. `inbox-del-ii-bilag-2-3-riggplan.md` — flatt rot-konsept **uten** `adjudication`, så sporet
|
||||||
|
dekker begge proveniens-tilstandene. Beskjedent (1 180 tok), så det ikke dominerer profilen.
|
||||||
|
|
||||||
|
### Funn: artefaktet sier IKKE hvilke konsepter navigatøren åpnet
|
||||||
|
|
||||||
|
`tool_calls` registrerer **navn + `bundle_id`**, aldri `path`:
|
||||||
|
|
||||||
|
```json
|
||||||
|
{"bundle_id": "k2-trinn1-20260903", "name": "read_file"}
|
||||||
|
{"bundle_id": "k2-trinn1-20260903", "name": "read_file"}
|
||||||
|
```
|
||||||
|
|
||||||
|
På 39 konsepter var det knapt et tap. På **629** er «basen ble lest» og «hvilke to av 629 ble
|
||||||
|
lest» to helt ulike opplysninger, og bare den første overlever til artefaktet. Ordrens punkt 3 ber
|
||||||
|
om «hvilke konsepter navigatøren faktisk åpnet» — **det kan ikke leses ut av leveransen**; det er
|
||||||
|
målt her via prompt-sonden (§ 5), altså med et instrument, ikke med produktet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 4. Adjudication slik konsumenten leser den
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run --with tiktoken python scratchpad/s7a2/m1_navigation.py
|
||||||
|
```
|
||||||
|
|
||||||
|
| | Målt over `context_files` |
|
||||||
|
|---|---|
|
||||||
|
| **Nevner** | **629** |
|
||||||
|
| `proposed` | **618** |
|
||||||
|
| `adjudicated` | **0** |
|
||||||
|
| `unknown` (nøkkelen fraværende) | **11** |
|
||||||
|
|
||||||
|
**Produsentens tall er bekreftet, eksakt.** Rå kontroll: `grep -rl '^adjudication:'` → 618,
|
||||||
|
alle `proposed`; kjent-positiv `grep -rl '^type:'` → 630/630. De 11 uten nøkkel er de flate
|
||||||
|
`inbox-*.md`-dokumentene som foreslo null segmenter — fravær som ærlig tredje tilstand, akkurat
|
||||||
|
som produsenten skriver.
|
||||||
|
|
||||||
|
**Ingen uenighet mellom produsent og leser.** Nevnerne sammenfaller fordi `log.md` er foreldreløs
|
||||||
|
(§ 2) og fordi den uansett ville vært `type: Log`, ikke et konsept.
|
||||||
|
|
||||||
|
**Dette er S7as største endring.** S7a målte `adjudication` i **0 av 39** og konkluderte at
|
||||||
|
ordrens «ny profil med adjudication» ikke holdt. Den holder nå.
|
||||||
|
|
||||||
|
**Uendret:** `verified` og `sources` finnes **ingen steder** (0 forekomster), så
|
||||||
|
`evidence_state = absent` for alle 629 og `trust_tier = None` for alle 629.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 5. Falsifisering mot proveniens
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run python scratchpad/s7a2/m4_provenance_control.py
|
||||||
|
uv run python scratchpad/s7a2/m4b_falsification.py
|
||||||
|
```
|
||||||
|
|
||||||
|
| | Levert base | Kjent-positiv kontroll (patchet **kopi**) |
|
||||||
|
|---|---|---|
|
||||||
|
| `adjudication_for` | `proposed` | `adjudicated` |
|
||||||
|
| `evidence.state` | `absent` | `present` |
|
||||||
|
| `evidence.tier` | `None` | `human-reviewed` |
|
||||||
|
| `evidence.items_seen` | 0 | 1 |
|
||||||
|
| **`admits_falsification`** | **False** | **True** |
|
||||||
|
|
||||||
|
**`admits_falsification` = False for 629 av 629.** Alt er `proposed` eller `unknown`, og ingenting
|
||||||
|
bærer `verified`. Forventningen i ordren er bekreftet.
|
||||||
|
|
||||||
|
Kontrollen kjøres på en **patchet kopi** (`scratchpad/s7a2/k2-control`), aldri på korpuset, og
|
||||||
|
flipper til `True` — altså **diskriminerer gaten**, og «629 diskontert» kan skilles fra «funksjonen
|
||||||
|
diskonterer alltid».
|
||||||
|
|
||||||
|
**Persona-dom på et `proposed`-konsept:** påstanden «kontraktssummen eksk. mva i Prissammenstilling
|
||||||
|
sheet-1 er 6 647 500 NOK og er derfor en kandidat for kostnadskutt» ender **`undecided`**, aldri
|
||||||
|
`survived`, med den påkrevde diskonterings-linja:
|
||||||
|
|
||||||
|
```
|
||||||
|
provenance absent in …/del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1.md; items_seen=0
|
||||||
|
```
|
||||||
|
|
||||||
|
**`adjudication: proposed` alene flytter ikke terskelen** — K5 krever `present` **og** en tier over
|
||||||
|
`unverified`, og begge konjunktene faller på fraværende `verified`. At 618 dokumenter nå erklærer
|
||||||
|
seg som *foreslått* endrer hva systemet kan **si om** dem, ikke hva en dom kan **hvile på**.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 6. Tokenprofil for kjøringen i § 3
|
||||||
|
|
||||||
|
```
|
||||||
|
uv run --with tiktoken python scratchpad/s7a2/m5_prompt_composition.py
|
||||||
|
uv run --with tiktoken python scratchpad/s7a2/m5b_multiplier.py
|
||||||
|
```
|
||||||
|
|
||||||
|
**12 prompter, 343 437 o200k-tokens.**
|
||||||
|
|
||||||
|
| Rolle | Prompter | Tokens | Andel |
|
||||||
|
|---|---|---|---|
|
||||||
|
| manager | 6 | 152 170 | 44 % |
|
||||||
|
| navigator | 5 | 141 842 | 41 % |
|
||||||
|
| hypothesiser | 1 | 49 425 | 14 % |
|
||||||
|
|
||||||
|
De tre største postene — 150 445 tokens, **44 %** — er hver **98–99 % verktøyRESULTATER**:
|
||||||
|
|
||||||
|
| Post | Tokens | Herav `result` |
|
||||||
|
|---|---|---|
|
||||||
|
| manager #4 | 50 331 | 49 306 (98 %) |
|
||||||
|
| manager #3 | 50 278 | 49 306 (98 %) |
|
||||||
|
| manager #5 | 49 836 | 49 306 (99 %) |
|
||||||
|
|
||||||
|
### De fire verktøyresultatene, enkeltvis (ikke-tom-kontrollen)
|
||||||
|
|
||||||
|
| Kall | Tokens | Ikke-tomt |
|
||||||
|
|---|---|---|
|
||||||
|
| `list_bundles` | 123 | ✅ |
|
||||||
|
| `read_bundle` | **43 928** | ✅ |
|
||||||
|
| `read_file` (prissammenstilling, nestet) | 4 075 | ✅ |
|
||||||
|
| `read_file` (riggplan, flat) | 1 180 | ✅ |
|
||||||
|
|
||||||
|
### Multiplikatoren — hovedfunnet
|
||||||
|
|
||||||
|
`read_bundle`-resultatet rir i **7 av 12 prompter** (navigatør 3, manager 3, hypotesiser 1):
|
||||||
|
|
||||||
|
**43 928 × 7 = 307 496 tokens = 90 % av alle prompt-tokens i kjøringen.**
|
||||||
|
|
||||||
|
Til sammenligning rir prisskjemaet — det navigatøren faktisk **valgte** å åpne — 7 ganger for
|
||||||
|
28 525 tokens, altså **8 %**.
|
||||||
|
|
||||||
|
**MAJOR-3s asymptotiske påstand holder; konstanten er nå hele kostnaden.** Sømmen flyttet
|
||||||
|
kostnaden fra `bundle_context` (O(bytes)) til `read_bundle` (O(dokumenter)). På 39 dokumenter var
|
||||||
|
det 2 312 tokens og usynlig. På 629 er det ett ubestilt katalogsvar som utgjør ni tideler av alt
|
||||||
|
en utforskning betaler for.
|
||||||
|
|
||||||
|
### Like-for-like mot S7a
|
||||||
|
|
||||||
|
S7a-rapportens profil (**40 320 tok / 13 prompter**) ble målt på **revise-kjeden**, ikke på det
|
||||||
|
enkle manuset — den er derfor ikke sammenlignbar. Baselinen er målt på nytt her, med S7as egen
|
||||||
|
base og S7as eget enkle manus:
|
||||||
|
|
||||||
|
| | S7a-base, enkelt manus | S7a-2-base, enkelt manus |
|
||||||
|
|---|---|---|
|
||||||
|
| Prompter | 11 | 12 |
|
||||||
|
| Tokens | **39 500** | **343 437** |
|
||||||
|
| `read_bundle`-resultat | 2 354 | **43 928** |
|
||||||
|
| Sum verktøyresultater | 6 527 | 49 306 |
|
||||||
|
| Tre største | 21 934 (56 %) | 150 445 (44 %) |
|
||||||
|
|
||||||
|
**8,7× flere tokens for 16× flere dokumenter.** Ærlighets-grense: manusene er ikke identiske —
|
||||||
|
S7a-2 gjør ett `read_file` mer (4 kall mot 3), verdt 1 180 tokens × 7 ≈ 8 260. Trekkes det fra,
|
||||||
|
er forholdet 8,5×.
|
||||||
|
|
||||||
|
**Manus-forskjellen er ikke det som driver tallet, og det er verdt å si presist.** Veksten er
|
||||||
|
`read_bundle` alene: resultatet vokste 2 354 → 43 928 tokens mens multiplikatoren sto stille på 7,
|
||||||
|
altså **+291 018 tokens** — **96 %** av differansen på 303 937. Det ekstra `read_file`-kallet er 2,7 %.
|
||||||
|
Innvendingen «manusene er ulike» kan derfor ikke forklare bort forholdet.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 7. De tre S7b-kravene, alle tre uttalt
|
||||||
|
|
||||||
|
| # | Krav | S7a | S7a-2 | Kommando |
|
||||||
|
|---|---|---|---|---|
|
||||||
|
| 1 | `validator-input.json` (IR-projeksjon) | mangler | **mangler** | `find … -name 'validator-input.json'` → tom |
|
||||||
|
| 2 | Utfylt prisskjema | uutfylt | **uutfylt** | `grep -c 'Enhetspris'` → **0** |
|
||||||
|
| 3 | `adjudication` | 0 av 39 | **618 av 629** ✅ | § 4 |
|
||||||
|
| **4** | **Basen kan åpnes slik den er levert** | ja | **NEI — `BundleIdMismatch`** | § 1 |
|
||||||
|
|
||||||
|
**Krav 3 er innfridd. Krav 1 og 2 står uendret, og begge er kryss-repo. Krav 4 er NYTT.**
|
||||||
|
|
||||||
|
**Krav 4 er kryss-repo, ikke en lokal ulempe.** Botemiddelet — montér katalogen under det erklærte
|
||||||
|
`bundle_id` — er et **stående manuelt steg i leveransestien**, som må utføres på nytt for hver
|
||||||
|
leverte bundle, av en operatør som må vite at det finnes. To utfall kan lukke det, og **ingen av
|
||||||
|
dem kan besluttes inne i ett repo**: produsenten navngir `bundle_id` etter monteringspunktet, eller
|
||||||
|
konsumenten slakker avstemmingen. Dette er en PM-beslutning, og den er derfor med i rapporten til
|
||||||
|
`.claude`.
|
||||||
|
|
||||||
|
MAJOR-4s deriver, kjørt mot den nye basen:
|
||||||
|
|
||||||
|
```
|
||||||
|
CostBaselineDerivationError: no cost table found in bundle
|
||||||
|
'scratchpad/s7a2/k2-trinn1-20260903': no concept file carries a markdown table whose
|
||||||
|
header names all three of ['code', 'quantity', 'unit_cost']
|
||||||
|
```
|
||||||
|
|
||||||
|
Kjent-positiv kontroll på `tests/fixtures/k2-prisskjema-SYNTETISK`: **3 kostlinjer**. Gaten
|
||||||
|
diskriminerer; basen mangler tallene.
|
||||||
|
|
||||||
|
Prissammenstillingen er **fortsatt pre-award**: de gule cellene totalentreprenøren fyller står
|
||||||
|
`0.0`, og de eneste tallene er beregningsgrunnlaget (`5647500`, `6647500`, `8309375`) — samme
|
||||||
|
bilde som S7a fant. **Ingen validert besparelse er mulig fra denne basen**, uavhengig av
|
||||||
|
`adjudication`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 8. Sidefunn — RETTET: golden-fasiten er en `sha1` av INNHOLDET, ikke en git-blob
|
||||||
|
|
||||||
|
**Denne seksjonen sto først med motsatt konklusjon, og den var feil. Feilen er min, og den er
|
||||||
|
verdt mer enn funnet den erstatter.**
|
||||||
|
|
||||||
|
Ved kontrollkjøringen sammenlignet jeg golden-hashen i CLAUDE.md med `git hash-object`:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ git hash-object tests/golden/demo-transcript.stdout
|
||||||
|
55bdea3ad20616480d81b9e7544604b248a541c9 # != ea8c534…
|
||||||
|
$ git cat-file -t ea8c534773acdbe41ae68f2c55724d69aaf8be4f
|
||||||
|
fatal: git cat-file: could not get object info
|
||||||
|
$ git log --all --format=%H | while read c; do \
|
||||||
|
git ls-tree -r "$c" | grep -q ea8c534773acdbe41ae68f2c55724d69aaf8be4f && echo "$c"; done
|
||||||
|
# ingen treff i noe tre i noen commit
|
||||||
|
```
|
||||||
|
|
||||||
|
Alt dette er **korrekt målt**, og jeg konkluderte at ni invariant-rader siterte en verdi som
|
||||||
|
aldri hadde eksistert. **Konklusjonen var usann.** PM stilte den ene sjekken jeg ikke hadde gjort:
|
||||||
|
|
||||||
|
```
|
||||||
|
$ shasum -a 1 tests/golden/demo-transcript.stdout
|
||||||
|
ea8c534773acdbe41ae68f2c55724d69aaf8be4f
|
||||||
|
```
|
||||||
|
|
||||||
|
**`ea8c534…` ER `sha1` av fila sitt innhold.** Git-blober hashes over `blob <len>\0` + innhold,
|
||||||
|
så de to verdiene er ulike av konstruksjon for én og samme fil. De ni radene er **RIKTIGE**:
|
||||||
|
de førte `sha1` av innhold, jeg leste dem som git-blober, og et negativt resultat fra feil
|
||||||
|
spørring ble konsumert som et positivt faktum om verden.
|
||||||
|
|
||||||
|
| | Verdi |
|
||||||
|
|---|---|
|
||||||
|
| `shasum -a 1` (det radene fører) | **`ea8c534773acdbe41ae68f2c55724d69aaf8be4f`** ✅ |
|
||||||
|
| `git hash-object` (det jeg målte) | `55bdea3ad20616480d81b9e7544604b248a541c9` |
|
||||||
|
| `git rev-parse HEAD:<fila>` | `55bdea3…` (arbeidsfil = HEAD) |
|
||||||
|
|
||||||
|
**Golden er byte-uendret av denne økten, og radene sa det korrekt hele veien.**
|
||||||
|
|
||||||
|
**Dette er Verifiseringsloven ansikt 4 mot mitt eget instrument.** Regelen krever at en spørring
|
||||||
|
valideres mot et **kjent-positivt tilfelle** før et negativt resultat leses som et faktum — nøyaktig
|
||||||
|
disiplinen § 0 anvender på tokenmåleren, og som jeg så hoppet over her. En `git hash-object` som
|
||||||
|
ikke finner en `sha1` beviser at verdien ikke er en git-blob; den beviser ingenting om hvorvidt
|
||||||
|
verdien er riktig. **Det eneste som gjenstår som forbedring er ordlyd:** radene bør si «`sha1` av
|
||||||
|
innhold», ikke bare «hash», så neste leser ikke gjentar feilen. Det er en operatørbeslutning og
|
||||||
|
gjøres ikke her.
|
||||||
|
|
||||||
|
## 9. Delta mot S7a i én tabell
|
||||||
|
|
||||||
|
| Egenskap | S7a (02.09-bundelen) | S7a-2 (03.09-bundelen) | Endring |
|
||||||
|
|---|---|---|---|
|
||||||
|
| Konseptfiler | 39 | **629** | 16× |
|
||||||
|
| `.md` på disk / `index.md` | 40 / 1 | **1 108 / 478** | hierarkisk |
|
||||||
|
| Nådd (`bundle.files`) | 40 | 1 107 | |
|
||||||
|
| Foreldreløse | 0 | **1** (`log.md`) | nytt |
|
||||||
|
| Ufulgte lenker | 0 | 0 | uendret |
|
||||||
|
| `bundle_id` / opphav | `k2-bundle` / `mount-derived` | `k2-trinn1-20260903` / **`declared-index`** | **første i naturen** |
|
||||||
|
| Åpnes slik den er levert | ja | **NEI — `BundleIdMismatch`** | **ny blokker** |
|
||||||
|
| `log.md` (OKF § 7) | mangler | finnes (men foreldreløs) | delvis |
|
||||||
|
| `list_bundles` | 127 tok | **112 tok** | −12 % |
|
||||||
|
| `read_bundle` | 2 312 tok | **42 761 tok** | **18,5×** |
|
||||||
|
| `read_file` median / maks | 6 709 / 121 462 | **290 / 119 909** | segmentert |
|
||||||
|
| Konsepter > 100k tok | 2 av 39 | **1 av 629** | |
|
||||||
|
| `bundle_context` (før MAJOR-3) | 682 303 | 648 787 | |
|
||||||
|
| `adjudication` | **0 av 39** | **618 `proposed` / 0 `adjudicated` / 11 `unknown`** av 629 | **innfridd** |
|
||||||
|
| `verified` / `sources` | 0 | **0** | uendret |
|
||||||
|
| `evidence_state` | `absent` 39/39 | `absent` **629/629** | uendret |
|
||||||
|
| `admits_falsification` | `False` 39/39 | **`False` 629/629** | uendret |
|
||||||
|
| Persona-dom | `undecided` | **`undecided`** | uendret |
|
||||||
|
| Kjent-positiv kontroll flipper | ja | **ja** | uendret |
|
||||||
|
| Dialog: runder / `speaker_known` | 3 / true | **3 / true** | uendret |
|
||||||
|
| `tool_calls` | 3 | **4** | manus |
|
||||||
|
| `path` i artefaktet | nei | **nei** | uendret (nå merkbart) |
|
||||||
|
| Tokenprofil (enkelt manus) | 39 500 / 11 prompter | **343 437 / 12 prompter** | **8,7×** |
|
||||||
|
| `read_bundle`-multiplikator | — | **7 av 12 = 90 %** | **hovedfunn** |
|
||||||
|
| `validator-input.json` | mangler | **mangler** | uendret |
|
||||||
|
| Utfylt prisskjema | nei | **nei** | uendret |
|
||||||
|
| `derive_cost_baseline` | nekter | **nekter** | uendret |
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## 10. Hva målingen sier
|
||||||
|
|
||||||
|
1. **Bundelen kan ikke åpnes slik den er levert.** `BundleIdMismatch` er en ekte, ny blokker
|
||||||
|
(krav 4, § 7). Botemiddelet er enkelt — monter under det erklærte navnet — men det er et
|
||||||
|
**stående manuelt steg per leveranse**, ikke en engangsopprydding, og hvilket repo som skal
|
||||||
|
endre seg er en **kryss-repo-beslutning**. Den fyrer i hvert kallsted som avstemmer, og det er
|
||||||
|
første gang en `declared`-gren fyrer utenfor en crafted base.
|
||||||
|
2. **`adjudication` er innfridd, og det flytter ikke falsifiseringen.** 618 av 629 er `proposed`,
|
||||||
|
nøyaktig som produsenten sier — men K5 krever `verified`, og den finnes ingen steder. Alle
|
||||||
|
629 er fortsatt diskontert, og dommen er fortsatt `undecided`.
|
||||||
|
3. **`read_bundle` er blitt kostnaden.** 90 % av en utforsknings prompt-tokens er ett ubestilt
|
||||||
|
katalogsvar. MAJOR-3 holder asymptotisk og gjør K2 navigerbar i det hele tatt, men på 629
|
||||||
|
dokumenter er konstanten ikke lenger liten. **Dette er et funn, ikke en fiks** — ingen
|
||||||
|
produksjonskode er rørt.
|
||||||
|
4. **Stigen mangler et trinn.** 478 nestede indekser bygges av produsenten, konsumeres av
|
||||||
|
navigasjonen og forkastes av `context_files`. En agent ser 629 flate dokumenter og får aldri
|
||||||
|
vite at hierarkiet finnes.
|
||||||
|
5. **S7b er fortsatt blokkert på to kryss-repo-krav.** Ingen bundle-egenskap kan lukke dem:
|
||||||
|
uten IR-projeksjon stopper kjøringen før validatoren, og uten priser har validatoren ingenting
|
||||||
|
å forankre seg i.
|
||||||
|
|
||||||
|
**Rettelse ført i teksten, ikke skjult.** § 8 sto først med motsatt konklusjon («fantomhash»,
|
||||||
|
ni feilaktige rader). Den var min feil, og den er beholdt synlig fordi feilmekanismen — et
|
||||||
|
negativt resultat fra en uvalidert spørring lest som et faktum — er den samme klassen § 0 og § 2
|
||||||
|
finnes for.
|
||||||
|
|
||||||
|
**Ærlighets-grenser, uttalt.** Ingen levende modell er kjørt — alle agentsvar er skriptet, så at
|
||||||
|
en modell ville *valgt* riktig konsept fra en 629-lang liste er ikke bevist (samme klasse som
|
||||||
|
structured-output-grensen). Multiplikatoren 7 gjelder dette manuset. Prefiks-caching er ikke målt.
|
||||||
|
Tokenprofilens 8,7× hviler på to manus som skiller seg med ett `read_file`; differansen er
|
||||||
|
tallfestet i § 6.
|
||||||
Loading…
Add table
Add a link
Reference in a new issue