portfolio-optimiser/docs/2026-09-03-hierarkisk-navigasjon-k2.md
Kjell Tore Guttormsen 2954216114 docs(s7a-3): ordrens ANDRE binding maalt paa alle 478 K2-nivaaer, og to prosa-hull lukket
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>
2026-09-03 08:09:53 +02:00

7.1 KiB
Raw Blame History

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

# 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 (N1N9).