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:
Kjell Tore Guttormsen 2026-09-04 18:04:21 +02:00
commit da5f10f140
13 changed files with 1044 additions and 98 deletions

View file

@ -175,7 +175,8 @@ def scripted_proposer(
**Why the project id and not the cost code or the measure name** (measured, not assumed the
demo-week plan §6 flagged this as unverified): two prompt shapes reach this selector. The debate
prompt (``run.py``) carries the whole bundle context; the generation prompt
prompt (``run.py``) carries the task line plus a POINTER to the knowledge base since S2c it no
longer carries the base itself, which only sharpens the argument; the generation prompt
(``generate._build_messages``) carries ``Project: {id} - {name}`` plus, as its context, the
*debate output* which is this selector's own earlier reply. So the cost code and measure name
are present in the generation prompt only because the script put them there; keying on them
@ -186,8 +187,8 @@ def scripted_proposer(
Anything other than exactly one match raises ``ScriptedCandidateError``. Validation, never
repair: a default reply would let an unregistered project be answered with another project's
numbers, which on screen is indistinguishable from a correct run. An ambiguous blob (a bundle
context that names a sibling project) is a DATA problem, and it must surface at the rehearsal
numbers, which on screen is indistinguishable from a correct run. An ambiguous blob (a tool
result that names a sibling project) is a DATA problem, and it must surface at the rehearsal
rather than be silently decided by registry order.
"""
@ -806,9 +807,12 @@ async def simulate_exploration(
shutil.copytree(bundle_dir, copy)
copy_s = str(copy)
# The vacuity guard. A label the base already states would reach the hypothesis prompt as
# navigated context whether or not the exploration ran, so the scenario's own assertion would
# hold against an implementation that never wired the mandate at all.
# The vacuity guard. A label the base already states is a label the walkthrough cannot
# attribute to the exploration: since S2c the debate reads the base through its own tools, so
# such a label could reach the hypothesis prompt as an ordinary tool result whether or not the
# exploration ran, and the scenario's assertion would hold against an implementation that never
# wired the mandate at all. ``bundle_context`` is used here as "everything the base states",
# which is what it still renders — not as a claim about what any prompt carries.
context = okf.bundle_context(okf.navigate_bundle(copy_s))
if label in context:
raise ValueError(