feat(prepass): one renderer and one artefact carry the declaration out of the run [skip-docs]
[skip-docs]: CLI-flagget og README-blokka kommer i neste commit.
`prepass_notice` er ENESTE renderer, tar den ALT OPPLOESTE deklarasjonen (aldri en
payload-sti -- en renderer som leste fila paa nytt ville vaert en andre oppløsning fri
til aa vaere uenig med kjoeringen den beskriver), og returnerer `None` uten payload.
Omisjonen er entydig her paa en maate `proposal_review_notice`s bevisst ikke er: en
kjoering sier ingenting om et kutt fordi operatoeren ikke ga noe, og det finnes
noeyaktig EN maate aa gi et paa. Golden-transkriptet er det uavhengige, eksisterende
vitnet for den halvdelen. To kallsteder: dry-run og full kjoering.
`outbox.write_prepass` skriver `{run_id}-prepass.json` IFF et payload ble gitt --
`write_proposal_reviews`-regelen, og her gjoer den en andre jobb: siden et payload
TREKKER navigatoerverktoeyene er `{run_id}-debate.json`s `tool_calls` tom ved
konstruksjon paa denne stien, og DEN fila skrives ubetinget nettopp fordi et tomt spor
ER S2c-regresjonen. Uten dette artefaktet ved siden av ville "trukket med vilje" og
"regrert" lest likt. TILSTEDEVAERELSEN er det som skiller dem, og en egen arm
observerer BEGGE filene paa SAMME kjoering.
Skrevet fra `finally` (`write_parse_failures`-presedensen) ved et DIREKTE kall, ikke
via `_write_or_report`: den helperens paakrevde `in_flight` bindes foerst inne i
genererings-blokka, og `None` der ville latt en `OSError` fortrenge en `BudgetExceeded`
i luften -- noeyaktig defekten helperen finnes for. En egen arm driver et budsjettstopp
midt i debatten og krever at deklarasjonen likevel ligger der.
Regel -> ANTALL i baade rendereren og artefaktet; en arm beviser at 20 tilbakeholdte
konsept-ider naar HVERKEN stdout eller artefaktet mens antallet gjoer det.
1446 passed / 5 skipped (fra 1440/5, +6, 0 fjernet). ruff + mypy rene. Golden
`shasum -a 1` av INNHOLDET = ea8c534773acdbe41ae68f2c55724d69aaf8be4f, BYTE-UENDRET.
Co-Authored-By: Claude <claude-opus-5>
This commit is contained in:
parent
7aa06d581f
commit
d3476d55ee
3 changed files with 154 additions and 0 deletions
|
|
@ -21,6 +21,7 @@ from typing import Any
|
|||
import pytest
|
||||
|
||||
import portfolio_optimiser.run as run_module
|
||||
from portfolio_optimiser.budget import BudgetExceeded
|
||||
from portfolio_optimiser import okf, prepass
|
||||
from portfolio_optimiser.run import RunResult, run_project
|
||||
from portfolio_optimiser.mcp_tools import McpServerConfig
|
||||
|
|
@ -378,3 +379,81 @@ async def test_the_dry_run_report_carries_the_declaration(tmp_path: Path) -> Non
|
|||
assert isinstance(report, run_module.DryRunReport)
|
||||
assert report.prepass is not None
|
||||
assert report.prepass.considered == payload.denominators.considered
|
||||
|
||||
|
||||
# --- the declaration leaves the run ---------------------------------------------------------
|
||||
|
||||
|
||||
def test_the_notice_is_omitted_without_a_payload() -> None:
|
||||
"""Omission, never an empty row. The golden transcript is the independent, pre-existing
|
||||
witness: a renderer that always returned a line would print in the demo and go red there."""
|
||||
assert run_module.prepass_notice(None) is None
|
||||
|
||||
|
||||
def test_the_notice_reports_the_cut_when_there_was_one() -> None:
|
||||
declaration = prepass.declaration_of(prepass.load_prepass_payload(str(FIXTURE)))
|
||||
line = run_module.prepass_notice(declaration)
|
||||
assert line is not None
|
||||
assert "4 of 5" in line
|
||||
assert "verdict_layer_excluded (1)" in line
|
||||
assert declaration.ref in line
|
||||
|
||||
|
||||
def test_a_withheld_rule_is_counted_and_the_concept_is_never_named() -> None:
|
||||
""" "We held 620 back under this rule" is the fact; naming them is 34 451 tokens of cost."""
|
||||
raw = json.loads(FIXTURE.read_text(encoding="utf-8"))
|
||||
raw["withheld"] = [
|
||||
{"concept_id": f"hemmelig-konsept-{n}", "rule": "no_lexical_match"} for n in range(20)
|
||||
] + raw["withheld"]
|
||||
raw["denominators"]["withheld"] = len(raw["withheld"])
|
||||
raw["denominators"]["considered"] = len(raw["withheld"]) + raw["denominators"]["delivered"]
|
||||
declaration = prepass.declaration_of(prepass.PrepassPayload.model_validate(raw))
|
||||
line = run_module.prepass_notice(declaration)
|
||||
assert line is not None and "no_lexical_match (20)" in line
|
||||
assert "hemmelig-konsept-0" not in line
|
||||
body = prepass.declaration_payload(declaration)
|
||||
assert "hemmelig-konsept-0" not in json.dumps(body)
|
||||
|
||||
|
||||
async def test_a_payload_run_writes_the_artefact_beside_the_debate_trace(tmp_path: Path) -> None:
|
||||
"""SC15's actual qualification, observed on ONE run: an empty ``tool_calls`` next to a
|
||||
prepass artefact is a withdrawal; an empty one alone is the S2c regression."""
|
||||
bundle_dir, payload = _base(tmp_path)
|
||||
outbox_dir = tmp_path / "outbox"
|
||||
result, _, _ = await _run(
|
||||
bundle_dir, prepass_payload=payload, outbox_dir=str(outbox_dir), run_id="r1"
|
||||
)
|
||||
debate = json.loads((outbox_dir / "r1-debate.json").read_text(encoding="utf-8"))
|
||||
cut = json.loads((outbox_dir / "r1-prepass.json").read_text(encoding="utf-8"))
|
||||
assert debate["tool_calls"] == []
|
||||
assert cut["prepass"]["ref"] == payload.bundle.ref
|
||||
assert cut["prepass"]["question"] == payload.question
|
||||
assert isinstance(result, RunResult) and result.prepass is not None
|
||||
assert cut["prepass"]["delivered"] == result.prepass.delivered
|
||||
|
||||
|
||||
async def test_a_run_without_a_payload_writes_no_prepass_artefact(tmp_path: Path) -> None:
|
||||
"""The write-iff-offered rule, with three pre-existing witnesses for the same shape."""
|
||||
bundle_dir, _ = _base(tmp_path)
|
||||
outbox_dir = tmp_path / "outbox"
|
||||
await _run(bundle_dir, outbox_dir=str(outbox_dir), run_id="r1")
|
||||
assert not (outbox_dir / "r1-prepass.json").exists()
|
||||
assert (outbox_dir / "r1-debate.json").exists()
|
||||
|
||||
|
||||
async def test_a_budget_stop_inside_the_debate_still_leaves_the_declaration(
|
||||
tmp_path: Path,
|
||||
) -> None:
|
||||
"""The ``finally`` is the point: the run that most needs the evidence is the one a cap cut."""
|
||||
bundle_dir, payload = _base(tmp_path)
|
||||
outbox_dir = tmp_path / "outbox"
|
||||
with pytest.raises(BudgetExceeded):
|
||||
await _run(
|
||||
bundle_dir,
|
||||
prepass_payload=payload,
|
||||
outbox_dir=str(outbox_dir),
|
||||
run_id="r1",
|
||||
max_tokens=1,
|
||||
)
|
||||
cut = json.loads((outbox_dir / "r1-prepass.json").read_text(encoding="utf-8"))
|
||||
assert cut["prepass"]["delivered"] == payload.denominators.delivered
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue