Funnet i review foer lukking:
1. Rapporten baar rotnivaaets tall, men ikke ordrens andre klausul ("read_dir
over stoerste katalog bundet"). Sveipet med den SHIPPEDE okf.directory_listing
over alle 478 nivaaer: verste nivaa noe sted er 6 073 tegn / 2 094 o200k-tok
(65 underkataloger) = 4,9 % av den flate formens 42 761. Det er dyrere enn
rota fordi hver sti er bundle-relativ - den maalte prisen paa at en sti er
brukbar ORDRETT i neste kall.
2. okf-konsum-kontrakter.md § 3.1 listet verktoeyene uten read_dir - samme
Fase-3-klasse som verktoeybeskrivelsene pkt. 2 flyttet.
3. CLAUDE.md-raden tidde om at bundle_id_notice har TO kallsteder mens
cost_baseline_notice har tre. Portefoelje-armen er BEVISST ikke wiret
(bundle_id_source er None der ved konstruksjon), og det staar naa uttalt i
stedet for aa vaere en asymmetri en leser maa gjette paa.
Sjekket ogsaa for annen prosa som beskriver den gamle to-trinns-stigen: eneste
gjenvaerende treff er docs/plan/2026-08-23-magentic-utforskningssloeyfe.md, et
DATERT plandokument som allerede beskriver read_bundle -> bundle_context (sant
til MAJOR-4 i oekt 77). Planer er historiske artefakter, ikke levende paastander
om flaten - ikke roert. Ingen treff under shared/ (pull-only subtree).
Ingen kodeendring.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
123 lines
7.1 KiB
Markdown
123 lines
7.1 KiB
Markdown
# Hierarkisk navigasjon — målt på den ekte K2-bundelen
|
||
|
||
**Dato:** 2026-09-03 · **Ordre:** `20260903T034323Z-7704222791` punkt 2 (S7a-3) · **Økt 81**
|
||
**Base:** `~/corpora/okf-telling-20260829/K2-bundle-20260903` — 629 konsepter, 478 nestede
|
||
indekser, 1 108 filer på disk. Åpnet **slik den er levert** (mulig først etter punkt 1 i samme
|
||
ordre; før det nektet `BundleIdMismatch` fordi katalogen heter noe annet enn den erklærte id-en).
|
||
|
||
## 1. Hva som ble målt, og med hvilket instrument
|
||
|
||
Instrumentet er S7a-2s rettede sonde: hver prompt telles som **tekst + `function_call` +
|
||
`function_result`**, aldri `Message.text` alene (som måler en kontekstbærende prompt til noen få
|
||
tegn). Tokenisering: `o200k_base` (`tiktoken`), som er en utviklingsavhengighet i målingen og
|
||
**ikke** i pakka.
|
||
|
||
**Instrumentfeil funnet og rettet under målingen** (samme klasse som S7a-2s midtskive-sonde):
|
||
verktøyresultatet bærer `name=None` på transporten, så en sonde som nøkler på
|
||
`result:read_bundle` rapporterer **0 kopier** — som er umulig å skille fra en ekte null.
|
||
Sonden nøkler nå på resultatets eget INNHOLD (`"directories"`), og BEFORE-kjøringen reproduserer
|
||
S7a-2s publiserte tall (307 573 mot 307 496 tokens, 0,03 % avvik), som er den kjent-positive
|
||
kontrollen på at instrumentet kan finne det det leter etter.
|
||
|
||
BEFORE og AFTER er kjørt **i samme økt med samme kode**, der BEFORE er en mutasjon som gir
|
||
`read_bundle` den flate MAJOR-3-formen tilbake (mutasjons-harness-idiomet), ikke en historisk
|
||
kjøring hentet fra en rapport.
|
||
|
||
## 2. Resultat
|
||
|
||
| | BEFORE (flat listing) | AFTER (ett nivå) |
|
||
|---|---|---|
|
||
| `read_bundle`-nyttelast alene | **110 581 tegn / 42 761 tok** (629 oppføringer) | **3 954 tegn / 1 495 tok** (28 kataloger + 11 dokumenter) |
|
||
| Kopier i prompter | 7 | 8 (rot) + 7 (én `read_dir`) |
|
||
| Listing-tokens totalt | **307 573** | **12 595** |
|
||
| Andel av alle prompt-tokens | **89 %** | **26 %** |
|
||
| Prompt-tokens i hele kjøringen | **343 826** | **49 225** |
|
||
| Antall prompter | 12 | 13 |
|
||
|
||
### `read_dir` over den største katalogen — ordrens andre binding
|
||
|
||
Sveipet med den SHIPPEDE `okf.directory_listing` over **alle 478 nivåer** (1 rot + 477 kataloger):
|
||
|
||
| Nivå | tegn | tokens | oppføringer |
|
||
|---|---|---|---|
|
||
| **Verste nivå noe sted** (`del-i-konkurransebeskrivelsen-…`) | **6 073** | **2 094** | 65 kataloger, 0 dokumenter |
|
||
| Nest verste (`del-ii-bilag-3-7-milj-kartlegging-…`) | 4 064 | — | 25 kataloger, 12 dokumenter |
|
||
| Rota | 3 954 | 1 495 | 28 kataloger, 11 dokumenter |
|
||
|
||
**Verste nivå i hele korpuset koster 2 094 tokens — 4,9 % av den flate formens 42 761.** Den er
|
||
dyrere enn rota fordi den har størst forgrening (65 underkataloger), og fordi hver sti er
|
||
**bundle-relativ**: en katalog dypt nede betaler prefikset sitt én gang per oppføring. Det er den
|
||
målte prisen på at en sti er brukbar ORDRETT i neste kall, og alternativet — nivå-relative navn en
|
||
modell må komponere — er den ene feilen som gir en sti som aldri fantes.
|
||
|
||
**Utforskningens prompt-tokens faller 86 %** (343 826 → 49 225). `read_bundle`-nyttelasten alene
|
||
faller **96,5 %** (42 761 → 1 495 tokens).
|
||
|
||
**Den 13. prompten er en ærlig kostnad, ikke støy:** navigatøren tar nå ett steg til (`read_dir`
|
||
ned i prisskjema-katalogen) før den leser et dokument. Stigen har fått et trinn, og et trinn
|
||
koster en tur.
|
||
|
||
## 3. Premisset som ble felt før noe ble bygget på det
|
||
|
||
Ordren sier at `context_files` «ikke lenger skal forkaste hierarkiet». **Den har aldri holdt det
|
||
tilbake.** Hver `BundleFile.name` er allerede den fulle bundle-relative posix-stien
|
||
(`del-ii-bilag-7-prisskjema/prissammenstilling-sheet-1.md`), så treet var alltid utledbart fra
|
||
navnene alene. Det som flatet det ut var **renderingen**.
|
||
|
||
Det er ikke pedanteri — det er grunnen til at `okf.bundle_context` og begge nav-goldenene er
|
||
**byte-identiske** etter endringen, som ordren krever eksplisitt. Egenskapen kom gratis, ikke av
|
||
forsiktighet.
|
||
|
||
Kataloger utledes derfor av STIER, aldri av `index.md`-filer: en nestet indeks er navigasjon, ikke
|
||
innhold (`context_files` dropper den på hvert nivå, og må fortsette med det, ellers følger
|
||
dom-laget med). Utledning fra navn betyr også at en katalog nådd via en lenke som hoppet over
|
||
indeksen fortsatt er synlig.
|
||
|
||
## 4. Avvik fra ordrens ordlyd, målt
|
||
|
||
Ordren formulerer taket som «`read_bundle` over K2-bundelen < 1 500 tegn». **Begge halvdeler av den
|
||
setningen holder ikke, og begge er målt:**
|
||
|
||
1. **K2 kan ikke være en testavhengighet.** Basen ligger utenfor repoet (`~/corpora/`). MAJOR-3-gaten
|
||
hadde samme begrensning og løste den likt: gaten binder den største basen som faktisk shippes,
|
||
og K2-tallene bor i en rapport. Gaten her binder derfor `shared/examples/tunnel-hauglia` (flat),
|
||
`shared/examples/nav-golden-hierarchy/bundle` (nestet) og en syntetisk base på 242 konsepter bak
|
||
20 kataloger — der den FLATE formen er over 5× taket den nivå-formen ligger godt innenfor.
|
||
2. **1 500 tegn er ikke oppnåelig for K2s rotnivå, og skal ikke være det.** Rota bærer **39
|
||
identifiserbare oppføringer** (28 kataloger + 11 toppdokumenter) og måler **3 954 tegn ≈ 1 366
|
||
o200k-tokens** (2,89 tegn/token), og det verste nivået noe sted i korpuset **6 073 tegn / 2 094
|
||
tokens**. Å presse dem under 1 500 tegn ville krevd at titler eller oppføringer ble droppet —
|
||
repoets vakuøs-gate-klasse. Taket i testen er 1 500 TEGN per listing over de basene gaten kan
|
||
se, og egenskapen som produserte fallet er gatet direkte (kostnaden følger oppføringer på ETT
|
||
nivå, ikke dokumenter i basen). Ordrens kriterium er altså **ikke** oppfylt bokstavelig for K2;
|
||
det som ER oppfylt er bindingen: intet nivå i K2 koster mer enn **4,9 %** av den flate formen.
|
||
|
||
## 5. Ærlighets-grenser
|
||
|
||
- **Dette er ikke «−86 % kostnad» for enhver kjøring.** En navigatør som stiger ned *k* nivåer
|
||
betaler *k* listinger; gevinsten er at den betaler for det den VALGTE, og at hver listing rir fra
|
||
SITT kall og framover.
|
||
- **At en LEVENDE modell navigerer BEDRE med en katalogstruktur enn med 629 flate dokumenter er
|
||
IKKE bevist** (samme klasse som structured-output-grensen). Manuset er skriptet.
|
||
- **Multiplikatoren gjelder dette manuset.** 8 og 7 kopier er hva denne kontrakten og dette
|
||
manuset ga; en annen kontrakt gir andre tall.
|
||
- **`navigate_bundle` kalles fortsatt per verktøykall** — I/O og veggklokke, ikke tokens; ikke målt
|
||
her (samme grense som katalogmålingen i økt 65).
|
||
- **Debatten er urørt.** `okf.bundle_context` er byte-identisk, og demo-transkriptet er
|
||
byte-uendret (`shasum -a 1` = `ea8c534773acdbe41ae68f2c55724d69aaf8be4f`).
|
||
|
||
## 6. Kommandoer
|
||
|
||
```sh
|
||
# AFTER
|
||
uv run --with tiktoken python scratchpad/s7a3/k2_profile.py after
|
||
# BEFORE (patcher kilden, kjører, gjenoppretter)
|
||
uv run python scratchpad/s7a3/k2_before.py
|
||
# gatens egne tall
|
||
uv run python scratchpad/s7a3/measure_sizes.py
|
||
# ordrens andre binding: alle 478 nivaaer med den shippede funksjonen
|
||
uv run --with tiktoken python scratchpad/s7a3/k2_read_dir_sweep.py
|
||
```
|
||
|
||
Kontroll ved slutten av punkt 2: **1 252 passed / 5 skipped**, `ruff` og `mypy` rene, golden
|
||
byte-uendret. Ni mutasjoner, alle røde mot HELE suiten (N1–N9).
|