feat(s2c): debatten navigerer basen i stedet for aa faa den utlevert [skip-docs]
MAJOR-3/S7a-3 gjorde utforskningen billig og lot pipelinen staa. Maalt paa K2
(630 konsepter, S7bs eget instrument, kjent-positiv-kontrollen reprodusert
eksakt FOER bruk): okf.bundle_context er 648 962 o200k-tokens og rir i TRE
kopier = 1 947 342 = 99,1 % av en kjoerings prompt-tokens.
Et premiss i maaledokumentet ble presisert foerst: de tre kopiene er tre
DEBATT-turer (proposer x2, checker x1), mens genererings-prompten er 156
tokens, fordi gen_context = debate_output or context. Det avgjorde formen -
generering trengte ingen egen soem, for aa binde `context` binder
siste-utvei-fallbacken ved konstruksjon.
run_project sender naa en PEKER (fast tekst + erklaert bundle_id + antall
konseptdokumenter i scope + stigen, O(1) i korpuset) og gir debatten de SAMME
fire verktoeyene utforskningen bruker - explore.navigator_tools gjenbrukt,
aldri en andre kopi av policyen.
Etter: 753 tokens like-for-like (samme manus, samme fire prompter, -99,96 %)
og 8 942 med en debatt som faktisk gaar stigen (-99,5 %), mot operatoerens
terskel 195 000 = 4,6 % av taket. Validert besparelse og validatorens dom er
UENDRET (850 000 NOK av 3 852 500, 2 av 5 felt paa stage 4 og 5, samme
dom-noekkel), og utforskningens 18 355 er uendret til tokenet.
§4.1a maatte flytte, ikke forsvinne: dimensjonsfilteret bodde i renderingen og
bor naa i VERKTOEYENE, paa begge trinn - en listing som skjuler et fremmed
dokument mens read_file serverer det paa sti er et filter i navnet alene.
okf.in_dimension er eneste predikat.
Sporet er kaller-eid (ExplorationToolRecorder -> RunResult.debate_tool_calls ->
{run_id}-debate.json fra en finally) og skrives ogsaa TOMT: en debatt som
navigerer ingenting ER S2c-regresjonen, saa den maa kunne leses.
Load-bearing MAALT: aatte mutasjoner roede mot HELE suiten, groenn kontroll
1306/5 (fra 1295/5), golden demo-transcript.stdout BYTE-UENDRET
(shasum -a 1 av innholdet = ea8c534773acdbe41ae68f2c55724d69aaf8be4f).
M7 falsifiserte seg selv, ikke gaten - staar som maalt.
Maaling: docs/2026-09-04-s2c-debatt-k2.md
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
5d8844fef5
commit
da5f10f140
13 changed files with 1044 additions and 98 deletions
233
docs/2026-09-04-s2c-debatt-k2.md
Normal file
233
docs/2026-09-04-s2c-debatt-k2.md
Normal file
|
|
@ -0,0 +1,233 @@
|
|||
# S2c — debatten får navigatør-drevet lesing, målt på K2
|
||||
|
||||
**Dato:** 2026-09-04 · **Ordre:** `20260904T135452Z-328127358-from-.claude`
|
||||
**Base:** `~/corpora/okf-telling-20260829/K2-bundle-20260903/` (erklært id `k2-trinn1-20260903`),
|
||||
kopiert til `scratchpad/s7b-syretest/K2-priset-SYNTETISK` med MAJOR-4s syntetisk prisede prisskjema
|
||||
montert — nøyaktig samme oppsett som S7b § 3.1.
|
||||
|
||||
> **⚠️ PRISENE ER SYNTETISKE, og ingen levende modell er kalt.** Hvert tall under er
|
||||
> prompt-tokens i en SKRIPTET kjøring. Det som måles er hva rammeverket sender, ikke hva en modell
|
||||
> ville svart.
|
||||
|
||||
---
|
||||
|
||||
## 0. Sammendrag
|
||||
|
||||
| ordrens spørsmål | svar |
|
||||
|---|---|
|
||||
| Ble premisset verifisert først? | Ja — § 1, reprodusert eksakt |
|
||||
| Debatt + generering på K2, FØR | **1 947 342** o200k-tokens |
|
||||
| … ETTER, samme manus | **753** (−99,96 %) |
|
||||
| … ETTER, med en debatt som faktisk NAVIGERER | **8 942** (−99,5 %) |
|
||||
| Ordrens terskel (< 195 000) | Holdt med margin: 4,6 % av terskelen |
|
||||
| Validert besparelse / validatorens dom | **UENDRET** — § 4 |
|
||||
| Golden `demo-transcript.stdout` | **BYTE-UENDRET** (`shasum -a 1` = `ea8c534773acdbe41ae68f2c55724d69aaf8be4f`, INNHOLD, ikke git-blob) |
|
||||
|
||||
---
|
||||
|
||||
## 1. Premisset, verifisert før noe ble bygget
|
||||
|
||||
Ordren ba om det, og instrumentet er S7bs eget (`scratchpad/s7b-syretest/profile_pipeline.py`,
|
||||
`o200k_base`, prompt lest som tekst + `function_call` + `function_result`). Den **kjent-positive
|
||||
kontrollen** kjøres først: rotnivå-listingen på LEVERT K2 måles til `3954 tegn / 1495 o200k-tokens
|
||||
over 629 konseptfiler`, som reproduserer S7a-3s publiserte tall eksakt. Deretter:
|
||||
|
||||
```
|
||||
=== FASE 2: debatt + generering (skriptet, null modellkall) ===
|
||||
checker 1 prompt(er) 649062 o200k-tokens
|
||||
proposer 3 prompt(er) 1298280 o200k-tokens
|
||||
SUM 4 prompt(er) 1947342 o200k-tokens
|
||||
```
|
||||
|
||||
Identisk med S7b § 3.4. **Én presisering mot måledokumentet:** S7b skriver «2 debatt-turer +
|
||||
genererings-prompten». Målt er fordelingen en annen — de tre kopiene er TRE DEBATT-TURER
|
||||
(proposer ×2, checker ×1 à 649 062), mens genererings-prompten er 156 tokens, fordi
|
||||
`gen_context = debate_output or context` tar debattens output når den finnes. Summen er den
|
||||
samme, og konklusjonen er den samme; det som flytter seg er hvor generering står i regnskapet, og
|
||||
det avgjorde formen på arbeidet (§ 2).
|
||||
|
||||
---
|
||||
|
||||
## 2. Grepet — én søm, ikke to policyer
|
||||
|
||||
`run_project`s bundle-arm sluttet å rendre basen inn i oppgavemeldingen. Den sender nå en
|
||||
**PEKER** og gir debatten de **SAMME fire navigatør-verktøyene** utforskningen bruker
|
||||
(`explore.navigator_tools` — gjenbrukt, ikke kopiert; ordrens eget krav).
|
||||
|
||||
* **Generering trengte ingen egen søm, og det er en MÅLING.** `gen_context = debate_output or
|
||||
context`: den ene grenen er debattens output (allerede liten), den andre er `context`. Ved å
|
||||
binde `context` blir siste-utvei-fallbacken bundet **ved konstruksjon** i stedet for å være hele
|
||||
korpuset. En verktøysløyfe inne i `generate_via_llm` ville vært en andre mekanisme for et
|
||||
problem som allerede var løst av den første.
|
||||
* **Pekeren er O(1) i korpuset:** fast tekst + basens id + antall konseptdokumenter (i scope) +
|
||||
stigen. Taket som vokter den bor i TESTEN (`_CEILING_CHARS = 1 500`), av `read_bundle`-takets
|
||||
grunn: et tak importert fra implementasjonen flytter seg med den.
|
||||
* **§4.1a-dimensjonen måtte FLYTTE, ikke forsvinne.** Løftet var at agentene leser KUN
|
||||
dimensjons-matchet kunnskap. Det ble holdt av `bundle_context`s filter; med navigasjon må det
|
||||
holdes av VERKTØYENE — og på **begge trinn**: en listing som skjuler et fremmed dokument mens
|
||||
`read_file` fortsatt serverer det på sti er et filter i navnet alene. Én predikat
|
||||
(`okf.in_dimension`) tjener begge renderere, så to kopier av «hva er i scope» ikke kan bli uenige
|
||||
om samme base.
|
||||
* **Sporet er KALLER-EID** (`ExplorationToolRecorder` på debattens middleware,
|
||||
`RunResult.debate_tool_calls`, `{run_id}-debate.json` skrevet fra en `finally`). En returverdi
|
||||
ville vært tapt på nøyaktig den kjøringen som trenger beviset: et budsjettstopp midt i debatten
|
||||
reiser ut av `debate.run` og konstruerer aldri et `RunResult`.
|
||||
**Artefaktet skrives også når det er TOMT** — ulikt `write_parse_failures`, hvis TILSTEDEVÆRELSE
|
||||
er signalet. Her er det tomme tilfellet selve S2c-regresjonen (en debatt som navigerer ingenting
|
||||
ser billig ut av feil grunn), så det må kunne LESES, ikke utledes av en fil som ikke er der.
|
||||
* **Én renderer for sporet** (`explore.tool_call_payload`), delt av utforskningens og debattens
|
||||
artefakt — målt, ikke påstått: M8 under gjør TO eksisterende tester i
|
||||
`test_tool_call_path_loadbearing` røde.
|
||||
|
||||
---
|
||||
|
||||
## 3. Tokens per fase, FØR og ETTER
|
||||
|
||||
Samme instrument, samme base, samme syntetiske prisfikstur.
|
||||
|
||||
### 3.1 Like-for-like — identisk manus, identiske fire prompter
|
||||
|
||||
| fase | prompter | FØR | ETTER | endring |
|
||||
|---|---|---|---|---|
|
||||
| 1 — utforskning (navigatør 5, manager 6, hypotesiser 1) | 12 | 18 355 | **18 355** | uendret |
|
||||
| 2 — debatt + generering (proposer 3, checker 1) | 4 | 1 947 342 | **753** | **−99,96 %** |
|
||||
| 3 — deterministisk dom | 0 | 0 | 0 | — |
|
||||
| **sum** | **16** | **1 965 697** | **19 108** | **−99,0 %** |
|
||||
|
||||
Utforskningens 18 355 er uendret til tokenet, med samme fire verktøykall i samme rekkefølge —
|
||||
`navigator_tools` fikk en `dimension`-parameter som defaulter til `None`, og det er dét som gjør
|
||||
den uendretheten til en måling og ikke en forhåpning.
|
||||
|
||||
### 3.2 Med en debatt som faktisk LESER — det ærlige tallet
|
||||
|
||||
753 tokens er billig delvis fordi det skriptede manuset fra S7b aldri kaller et verktøy. En
|
||||
gjenbrukt konstant-svar-rehearsal beviser at debatten KJØRER, aldri at den ÅPNER basen — nøyaktig
|
||||
vakuiteten MAJOR-1 lukket ett lag over. Manuset ble derfor utvidet slik at debatten går den samme
|
||||
stigen navigatøren gikk i S7b § 3.5:
|
||||
|
||||
```
|
||||
verktoykall debatten gjorde (RunResult.debate_tool_calls):
|
||||
read_bundle bundle_id=k2-trinn1-20260903 path=-
|
||||
read_dir bundle_id=k2-trinn1-20260903 path=del-ii-bilag-7-prisskjema
|
||||
read_file bundle_id=k2-trinn1-20260903 path=del-ii-bilag-7-prisskjema/prisskjema-SYNTETISK.md
|
||||
read_file bundle_id=k2-trinn1-20260903 path=del-ii-bilag-7-prisskjema/prisskjema-SYNTETISK.md
|
||||
checker 2 prompt(er) 633 o200k-tokens
|
||||
proposer 9 prompt(er) 8309 o200k-tokens
|
||||
SUM 11 prompt(er) 8942 o200k-tokens
|
||||
```
|
||||
|
||||
**8 942 tokens, −99,5 %**, mot ordrens terskel på 195 000: **4,6 % av taket**. Antall prompter
|
||||
STIGER (4 → 11), og det er handelen MAJOR-3-raden allerede beskriver: man betaler per kall, men
|
||||
hvert resultat rir kun fra SITT kall og framover, i stedet for at hele basen rir i hver prompt.
|
||||
|
||||
Tallet er dessuten et **øvre estimat**: proposer-manuset konsumeres på nytt av den ferske klienten
|
||||
`generate_via_llm` bygger, så tre genererings-forsøk brenner på et verktøykall før JSON-en
|
||||
kommer (§ 6, uttalt ærlighets-grense). En operatør som skriver manuset riktig betaler mindre.
|
||||
|
||||
---
|
||||
|
||||
## 4. Validert besparelse og validatorens dom — UENDRET
|
||||
|
||||
Ordren sier at en endring her er et funn, ikke støy. Målt med SAMME kommando og SAMME
|
||||
`scripted-replies.json` som S7b § 3.2:
|
||||
|
||||
```
|
||||
K2: ValidatedProposal (no expert verdict given; verdict key=be8535e204cdc4c6)
|
||||
hypothesis-1 VALIDATED 200000 NOK
|
||||
own-proposal VALIDATED 200000 NOK
|
||||
Validated: 2 of 2 approaches — best 200000 NOK
|
||||
```
|
||||
|
||||
Identisk med S7b, ned til dom-nøkkelen. Den deterministiske døra (§ 3.3 der) er også uendret:
|
||||
|
||||
| id | krav | utfall | stage |
|
||||
|---|---|---|---|
|
||||
| a1 | 200 000 | **VALIDERT** | — |
|
||||
| a2 | 900 000 | FELT | stage 4 — P90 feasible 612 000 |
|
||||
| a3 | 150 000 | **VALIDERT** | — |
|
||||
| a4 | 500 000 | **VALIDERT** | — |
|
||||
| a5 | 150 000 | FELT | stage 5 — `energy_efficiency`-cap 112 500 |
|
||||
|
||||
**850 000 NOK validert av 3 852 500. 2 av 5 felt, på to ulike stages.** Uendret.
|
||||
|
||||
Kontroll-kjøringen med det UENDREDE manuset etterlot `{"tool_calls": []}` — den skriptede
|
||||
konstanten åpnet ingenting, og artefaktet sier det i stedet for å mangle. Det er nettopp derfor
|
||||
det tomme tilfellet skrives.
|
||||
|
||||
---
|
||||
|
||||
## 5. Mutasjonsmålingen
|
||||
|
||||
Grønn kontroll **1306 passed / 5 skipped** (fra 1295/5), golden `demo-transcript.stdout`
|
||||
BYTE-UENDRET. Hver mutasjon kjørt mot HELE suiten, restaurert fra scratchpad og verifisert med
|
||||
`shasum -c`.
|
||||
|
||||
| # | detach | røde |
|
||||
|---|---|---|
|
||||
| M1 | `context` tilbake til `okf.bundle_context` | 3 |
|
||||
| M2 | navigatør-verktøyene ut av `debate_tools` | 7 |
|
||||
| M3 | `ExplorationToolRecorder` av debattens middleware | 2 |
|
||||
| M4 | `{run_id}-debate.json` skrives ikke | 5 |
|
||||
| M5 | `directory_listing` ignorerer dimensjonen | 2 |
|
||||
| M6 | `read_file`s dimensjonsgate detached | 2 |
|
||||
| M7 | pekeren dropper basens id i overskriftslinja | **0 — se under** |
|
||||
| M7b | pekeren navngir ingen base overhodet | 1 |
|
||||
| M8 | sporet dropper `path` | 3 |
|
||||
|
||||
**M7 FALSIFISERTE MUTASJONEN, ikke gaten.** Pekeren navngir basen FIRE ganger (overskriften pluss
|
||||
de tre stige-kallene), så å fjerne én omtale fjerner ikke egenskapen gaten påstår («en debatt som
|
||||
kan kalle verktøyene sine»). M7b er mutasjonen som faktisk løsner den, og den er rød alene. Dette
|
||||
står som målt, ikke som spådd — en mutasjon som ikke treffer egenskapen er en opplysning om
|
||||
mutasjonen.
|
||||
|
||||
**M8 er den sterkeste av dem:** to av de tre røde bor i `test_tool_call_path_loadbearing`, altså i
|
||||
tester som fantes FØR dette arbeidet. Det er det som gjør «én renderer, ikke to kopier» til en
|
||||
måling.
|
||||
|
||||
**M2s syv røde** spenner fire filer, hvorav tre er eldre gates — dimensjonens to armer,
|
||||
MCP-kontrollen og den skriptede døra. Sømmen er altså vitnet fra flere uavhengige hold.
|
||||
|
||||
---
|
||||
|
||||
## 6. Ærlighets-grenser, uttalt
|
||||
|
||||
* **Ingen levende modell.** At en modell NAVIGERER godt med en peker i stedet for hele basen er
|
||||
ikke bevist — samme klasse som structured-output-grensen. Det som er bevist er hva rammeverket
|
||||
sender.
|
||||
* **Dette er ikke «−99,5 % for enhver kjøring».** En debatt som åpner *k* dokumenter betaler *k*
|
||||
verktøyresultater; gevinsten er at den betaler for det den VALGTE, og at hvert resultat rir fra
|
||||
sitt eget kall og framover. Multiplikatoren gjelder dette manuset.
|
||||
* **Det skriptede proposer-manuset konsumeres to ganger.** Manus er per KLIENT, og
|
||||
`generate_via_llm` bygger en fersk proposer-klient som starter manuset på nytt. Et manus som
|
||||
åpner med et verktøykall svarer derfor også genererings-kallet med et `function_call`, som ikke
|
||||
parser. Det er uttalt i `_load_scripted_replies`' docstring og ikke reparert: å gjette hvilke
|
||||
steg som var «ment for» hvilket kallsted er reparasjon, og denne loaderen validerer.
|
||||
* **`read_file` er fortsatt sti-adresserbar til `type: verdict`-laget.** Ingen listing navngir det
|
||||
(`context_files` dropper det ved konstruksjon), men en modell som gjetter en sti kan lese en
|
||||
dom utenom den gatede ExpeL-folden. Egenskapen er ARVET fra utforskningen (S7a-3) og er derfor
|
||||
ikke ny her, men den er nå nåbar fra debatten også. **MÅLT, RAPPORTERT, IKKE FIKSET** — å lukke
|
||||
den er én regel ett sted (`read_file` nekter det ingen listing ville vist), og den endrer
|
||||
utforskningens oppførsel også, altså en egen beslutning.
|
||||
* **`--scripted-replies` tar nå steg-lister for debattens roller.** Nekten som forsvant hadde en
|
||||
begrunnelse som nå er målbart usann (proposer og checker ER agenter med verktøy). Arm
|
||||
`test_a_step_list_is_refused_for_a_debate_role` er SKREVET OM til sin positive, ikke slettet —
|
||||
node-ID-en er derfor omdøpt, og suiten er et supersett bortsett fra det ene navnet.
|
||||
* **Den hostede flaten er urørt.** Ingen nye felt i whitelisten; `{run_id}-debate.json` når kun
|
||||
CLI-ens/bibliotekets outbox, som `{run_id}-exploration.json` alt gjør.
|
||||
* **Prefiks-caching er fortsatt NOTERT, ikke bygget.** Med korpuset ute av prompten er den også
|
||||
langt mindre verdt enn den var.
|
||||
|
||||
---
|
||||
|
||||
## 7. Kommandoer
|
||||
|
||||
```bash
|
||||
# premiss + ETTER, like-for-like (samme manus)
|
||||
uv run --with tiktoken==0.12.0 python scratchpad/s7b-syretest/profile_pipeline.py
|
||||
# ETTER med en navigerende debatt
|
||||
uv run --with tiktoken==0.12.0 python scratchpad/s2c-debatt/profile_pipeline_after.py
|
||||
# fase 1 + 3 (uendret)
|
||||
uv run --with tiktoken==0.12.0 python scratchpad/s7b-syretest/profile_phases.py
|
||||
# mutasjon nr. N mot hele suiten
|
||||
uv run python scratchpad/s2c-debatt/mut.py M1
|
||||
```
|
||||
Loading…
Add table
Add a link
Reference in a new issue