docs(s7a): SS 5s "deler aarsak" var en paastand, ikke en maaling - og maalingen felte tallet

Rapporten paasto at de tre stoerste postene "deler aarsak: alle tre baerer
navigatoerens read_file". Det var aldri maalt. Ved aa maale det kom TO ting fram.

1. Aarsaken stemmer, og er naa dekomponert: verktoeyRESULTATENE utgjoer 87-93 % av
   hver av de tre stoerste promptene (6 527 tok), og enkeltvis er det read_file
   4 043 (62 %), read_bundle 2 354 (36 %), list_bundles 130 (2 %). read_file er
   4 043 baade i prompten og maalt isolert, saa det som rir med er hele
   returverdien - ikke en forkortet form.

2. MITT EGET INSTRUMENT VAR FEIL. Sonden summerte Message.text OG hvert
   Content.text, men Message.text ER sammenkjedingen av tekst-innholdet - altsaa
   ble tekstdelen talt to ganger. Totalen 45 643 er forkastet; riktig tall er
   40 320 over 13 prompter (manager 61 %, navigator 23 %, hypotesiser 16 %), og
   de tre stoerste er 7 532 / 7 468 / 7 037 = 55 %, ikke 8 572 / 8 444 / 7 582.
   Feilen var IKKE synlig i totalen. Den ble synlig foerst da sammensetningen ble
   brutt ned - som er hele grunnen til at en total ingen har dekomponert er en
   total ingen har kontrollert. Begge instrumentfeilene staar naa i SS 0.

Ogsaa: SS 1c skilte ikke maalt faktum fra min tolkning av hva 1 500-tegns-taket
"er". Faktumet staar (K2s read_bundle er 6 244 tegn mot en gate skrevet for
3-dokuments baser); lesningen av hva taket er ment aa binde tilhoerer den som
eier gaten.

Ingen produksjonskode. Doc-gatene gronne (25 passed).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-03 03:42:18 +02:00
commit 98e648310c

View file

@ -24,10 +24,14 @@ prosjektavhengighet.
Instrumentet reproduserer begge eksakt. Først etter det er K2-tallene under lest som tall. Instrumentet reproduserer begge eksakt. Først etter det er K2-tallene under lest som tall.
En andre instrumentfeil ble fanget underveis og er verdt å skrive ned, fordi den er samme klasse **To instrumentfeil ble fanget underveis, og begge er skrevet ned fordi de er samme klasse som
som misjonsreview v2 rapporterte: første versjon av prompt-sonden leste `repr(Content)` og fikk misjonsreview v2 rapporterte.** (i) Første prompt-sonde leste `repr(Content)` og fikk
`<agent_framework._types.Content object at 0x…>` for **hver** melding, altså en prompt som så tom ut `<agent_framework._types.Content object at 0x…>` for **hver** melding en prompt som så tom ut
mens den bar 108 000 tegn. Sonden henter nå `text`/`result`/`arguments` ut av hvert `Content`. mens den bar 108 000 tegn. Sonden henter nå `text`/`result`/`arguments` ut av hvert `Content`.
(ii) Den rettede sonden summerte så `Message.text` **og** hvert `Content.text`, altså tekstdelen
to ganger. Den feilen ble ikke synlig i totalen — den ble synlig først da § 5s sammensetning ble
målt, og det er hele grunnen til at sammensetningen ble målt i det hele tatt: en total ingen har
brutt ned er en total ingen har kontrollert.
--- ---
@ -95,11 +99,11 @@ utdrag. Det bekrefter det `docs/2026-08-26-katalogkostnaden.md` forutså for mas
baser: utdraget er nesten innholdsløst (første lenkelinje), men det er *bundet*, og hele indeksen baser: utdraget er nesten innholdsløst (første lenkelinje), men det er *bundet*, og hele indeksen
er ett `read_file(id, "index.md")` unna. er ett `read_file(id, "index.md")` unna.
**(c) `read_bundle` er O(dokumenter), og på 39 dokumenter er det 2 312 tokens.** **(c) `read_bundle` er O(dokumenter), og på 39 dokumenter er det 2 312 tokens.** Det målte
`tests/test_read_bundle_cost_loadbearing.py` setter taket til 1 500 **tegn** mot 3-dokuments faktumet: `tests/test_read_bundle_cost_loadbearing.py` setter taket til 1 500 **tegn** mot
baser. K2 ligger på 6 244 tegn. Det er ikke et brudd på gaten — gaten måler sine egne baser — men 3-dokuments baser, og K2s `read_bundle` er 6 244 tegn. Det er ikke et brudd — gaten måler sine
det er den ærlige lesningen av hva taket er: en per-base-grense som skalerer med dokumentantallet, egne baser — men tallet er verdt å legge fram for den som eier gaten. Hva taket *er ment* å
ikke en absolutt grense. binde, er deres avgjørelse, ikke min lesning her.
**(d) To dokumenter sprenger § 5s tokenkriterium hvis de leses hele.** Kriteriet er «ingen **(d) To dokumenter sprenger § 5s tokenkriterium hvis de leses hele.** Kriteriet er «ingen
enkeltpost > 100 000 tok uten en navngitt grunn». To av 39 passerer det som `read_file`: enkeltpost > 100 000 tok uten en navngitt grunn». To av 39 passerer det som `read_file`:
@ -266,27 +270,52 @@ Ekte `usage` finnes ikke: `ScriptedChatClient` rapporterer 8 tokens per svar, s
`tokens_spent` (88 offline, 104 med review) er **syntetisk** og sier ingenting om kostnad. Profilen `tokens_spent` (88 offline, 104 med review) er **syntetisk** og sier ingenting om kostnad. Profilen
under er derfor instrument-målt over de faktiske prompt-blobbene i revise-kjøringen. under er derfor instrument-målt over de faktiske prompt-blobbene i revise-kjøringen.
**13 prompter, 45 643 o200k-tokens.** > **Instrumentfeil funnet og rettet før dette tallet ble stående.** Første sonde summerte
> `Message.text` **og** deretter hvert `Content.text` — men `Message.text` *er* sammenkjedingen av
> meldingens tekst-innhold, så tekstdelen ble talt to ganger. Feilen kom for dagen først da
> sammensetningen under ble målt, ikke da totalen ble lest. Tallene i denne seksjonen er fra den
> rettede sonden (`m5_prompt_composition.py`); det forkastede tallet var 45 643.
**13 prompter, 40 320 o200k-tokens.**
| Rolle | Prompter | Tokens | Andel | | Rolle | Prompter | Tokens | Andel |
|---|---|---|---| |---|---|---|---|
| manager | 8 | 29 568 | 65 % | | manager | 8 | 24 465 | 61 % |
| navigator | 4 | 9 392 | 21 % | | navigator | 4 | 9 251 | 23 % |
| hypothesiser | 1 | 6 683 | 15 % | | hypothesiser | 1 | 6 604 | 16 % |
De tre største postene — til sammen 24 598 tokens, **54 % av hele kjøringen**: De tre største postene — til sammen 22 037 tokens, **55 % av hele kjøringen**:
| # | Post | Tokens | | # | Post | Tokens |
|---|---|---| |---|---|---|
| 1 | manager-kall 6 (ledger etter at navigatøren hadde lest prisskjemaet) | 8 572 | | 1 | manager-kall 6 (ledger etter at navigatøren hadde lest prisskjemaet) | 7 532 |
| 2 | manager-kall 5 (samme, runden før) | 8 444 | | 2 | manager-kall 5 (samme, runden før) | 7 468 |
| 3 | manager-kall 7 (sluttsvar) | 7 582 | | 3 | manager-kall 7 (sluttsvar) | 7 037 |
**Det de tre har til felles er årsaken.** Alle tre bærer navigatørens `read_file`-resultat — **Hva de består av — målt, ikke antatt.** Hver av de tre er brutt ned per innholdstype:
Bilag 7 Prisskjema, 100 695 tegn / 4 043 tokens — fordi utforskningens deltakere deler **én**
samtalehistorikk. Ett `read_file` betales altså av hver senere prompt i kjøringen, som er nøyaktig | Del | manager #6 | manager #5 | manager #7 |
mekanismen `docs/2026-09-02-read-bundle-kontekstkostnad.md` beskrev for `bundle_context`, ett trinn |---|---|---|---|
ned på stigen. Ingen enkeltpost passerer § 5s 100 000-tak i denne kjøringen; de to dokumentene som | verktøy**resultater** | 6 527 (87 %) | 6 527 (87 %) | 6 527 (93 %) |
| tekst (fakta, plan, ledger-historikk) | 965 (13 %) | 901 (12 %) | 470 (7 %) |
| verktøy**argumenter** | 40 (0 %) | 40 (0 %) | 40 (0 %) |
Og de 6 527 tokenene enkeltvis, i den rekkefølgen navigatøren hentet dem:
| Verktøyresultat | Tokens i prompten | Andel av de 6 527 |
|---|---|---|
| `list_bundles` | 130 | 2 % |
| `read_bundle` | 2 354 | 36 % |
| **`read_file` (Bilag 7 Prisskjema)** | **4 043** | **62 %** |
`read_file`-resultatet er altså 4 043 tokens i prompten og 4 043 tokens målt isolert — samme tall,
så det som rir med er hele returverdien, ikke en forkortet form. (`read_bundle` er 2 354 i prompten
mot 2 312 isolert; differansen er JSON-innrammingen meldingen legger rundt.)
**Mekanismen er den samme som MAJOR-3 målte, ett trinn ned på stigen.** Utforskningens deltakere
deler **én** samtalehistorikk, så ett `read_file` betales av hver senere prompt i kjøringen. Her
utgjør de tre verktøyresultatene 8793 % av hver av de tre største postene, og prisskjemaet alene
er 62 % av dem. Ingen enkeltpost passerer § 5s 100 000-tak i denne kjøringen; de to dokumentene som
*ville* gjort det (§ 1d) ble ikke åpnet. *ville* gjort det (§ 1d) ble ikke åpnet.
--- ---
@ -348,7 +377,7 @@ krever en levende manager, ikke en endring i noe av dette.
| 10 | Kjeden, tre ledd | `uv run --with tiktoken python scratchpad/s7a/m3_revise_chain.py` → § 3-tabellen | | 10 | Kjeden, tre ledd | `uv run --with tiktoken python scratchpad/s7a/m3_revise_chain.py` → § 3-tabellen |
| 11 | K5 diskriminerer | `uv run python scratchpad/s7a/m4b_falsification.py``False` vs `True` | | 11 | K5 diskriminerer | `uv run python scratchpad/s7a/m4b_falsification.py``False` vs `True` |
| 12 | MAJOR-4 nekter mot ekte K2, godtar syntetisk | `uv run python scratchpad/s7a/m6_derive.py` → feilmelding vs 3 kostlinjer | | 12 | MAJOR-4 nekter mot ekte K2, godtar syntetisk | `uv run python scratchpad/s7a/m6_derive.py` → feilmelding vs 3 kostlinjer |
| 13 | Tokenprofil | samme skript som 10 → § 5-tabellene | | 13 | Tokenprofil + sammensetning | `uv run --with tiktoken python scratchpad/s7a/m5_prompt_composition.py` → § 5-tabellene |
**Ikke verifisert her:** at en levende modell kaller verktøyene eller velger godt (samme grense som **Ikke verifisert her:** at en levende modell kaller verktøyene eller velger godt (samme grense som
structured-output-raden); at `N=43` stemmer; at leverandørens caching treffer prefiksene; K2s structured-output-raden); at `N=43` stemmer; at leverandørens caching treffer prefiksene; K2s