The context sets, the packaged knowledge bases and the example bundles are replaced by one fictitious example set about IT operations in an invented organisation: three context sets (serverrom-2027, driftsavtale-2027 and the two-base drift-og-avtale-2027), two synthetic knowledge bases under src/portfolio_optimiser/data/kunnskapsbaser and two example bundles under src/portfolio_optimiser/data/bundles. Numbers, codes and structural values in tests and fixtures are kept; names, ids and wording change. Dated measurement documents that only recorded runs on the replaced material are deleted. Gate figures measured on the new set are not comparable with earlier ones. The exclusion gate from the previous commit is green: 0 tracked files hit outside the shared/ subtree. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
485 lines
23 KiB
Markdown
485 lines
23 KiB
Markdown
# 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 `energi-b` | 259 tok | **259 tok** |
|
||
| `bundle_context` over `energi-b` | 12 595 tok | **12 595 tok** |
|
||
|
||
`energi-b` er commons' daværende energi-eksempelbase (i dag erstattet av den fiktive
|
||
`driftssenter-kjoling`; tallene er målt på den gamle). 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('~/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.
|