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
|
|
@ -4,8 +4,8 @@ opened and closed around the debate, and nothing is contacted that was not annou
|
|||
Krav 3 is only met if the external service is reachable *while the run works*. Three detach points,
|
||||
each RED on its own:
|
||||
|
||||
* drop the MCP tools from ``debate_tools`` -> the agents never get the tool (and on the bundle path
|
||||
they get NO tools at all, which is what that path had before);
|
||||
* drop the MCP tools from ``debate_tools`` -> the agents never get the tool (on the bundle path
|
||||
they are then left with the four navigator tools alone — before S2c that path had none);
|
||||
* skip the ``AsyncExitStack`` entry -> the tools are constructed but never connected, so they are
|
||||
present and useless — the failure mode that looks like success;
|
||||
* let a dry run enter them -> ``--live-dry-run`` would contact a third party while claiming to stop
|
||||
|
|
@ -115,7 +115,8 @@ async def _run(**kwargs: Any):
|
|||
|
||||
|
||||
async def test_configured_server_becomes_a_tool_the_agents_have(fake_tools, captured_tools) -> None:
|
||||
"""On the bundle path the agents had NO tools at all; a configured server is the first one."""
|
||||
"""On the bundle path a configured server is the first EXTERNAL tool; since S2c the four
|
||||
in-process navigator tools sit alongside it."""
|
||||
await _run(mcp_servers=(_SERVER,))
|
||||
assert captured_tools, "the debate was never built"
|
||||
assert any(isinstance(t, _FakeMcpTool) for t in captured_tools[0])
|
||||
|
|
@ -138,10 +139,21 @@ async def test_dry_run_never_contacts_a_configured_server(fake_tools) -> None:
|
|||
|
||||
|
||||
async def test_run_without_mcp_servers_keeps_the_tool_list_unchanged(captured_tools) -> None:
|
||||
"""CONTROL: with nothing configured the bundle path still hands the agents no tools — the
|
||||
pre-Trekk-B behaviour, so every assertion above rests on the configuration and not on the run."""
|
||||
"""CONTROL: with nothing configured the bundle path hands the agents no EXTERNAL tool, so every
|
||||
assertion above rests on the configuration and not on something the run does anyway.
|
||||
|
||||
Before S2c this read ``captured_tools[0] == []`` — the bundle path had no tools at all. It now
|
||||
navigates its knowledge base, so the control asserts what it always meant: nothing here reaches
|
||||
outside the process. Asserting the exact navigator set as well keeps it from degrading into
|
||||
"some tools, whatever they are"."""
|
||||
await _run()
|
||||
assert captured_tools[0] == []
|
||||
assert not any(isinstance(t, _FakeMcpTool) for t in captured_tools[0])
|
||||
assert {getattr(t, "name", "") for t in captured_tools[0]} == {
|
||||
"list_bundles",
|
||||
"read_bundle",
|
||||
"read_dir",
|
||||
"read_file",
|
||||
}
|
||||
|
||||
|
||||
async def test_portfolio_mode_gives_every_project_the_configured_tools(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue