feat(simulation): P4 pkt. 3+4 — demo-transkriptet pinnet, frø-setningen avledet [skip-docs]

Kriterium 6 er selv-identitet: to kjøringer av en regredert demo er like enige som
to av en riktig. Fasiten forlater derfor prosessen. stdout pinnes ORDRETT (og er
dermed demoens abortsti); stderr normaliseres på nøyaktig to MÅLTE miljø-spann —
site-packages-prefikset og temp-katalogen — med po-sim- holdt synlig, fordi det er
en egenskap ved programmet og ikke ved miljøet. Pinnet stderr = fire linjer.
Kontrollen som forbyr at masken vokser er load-bearing: en droppende normaliserer
med fasiten regenerert under seg holder BEGGE likhets-testene grønne.

Pkt. 4: planens forhåndsskrevne frø-setning sa «én av de TO tidligere dommene».
Målt mot levert VEGLYS-bundle henter Kjøring B TRE — én fulgte med kunnskapsbasen,
to er demoens egne, én per tidsskala. Splitten avledes derfor fra kjøringen; en
håndskrevet «én av tre» ville vært den andre kopien som drifter.

Fem mutasjoner alle røde + grønn kontroll (hele suiten hver gang): ett byte i en
stdout-linje · detach dempingen · over-normaliser stderr · literal splitt · detach
frø-setningens print. Byte- og detach-mutasjonene ble fanget av KUN golden-testen;
den literale splitten av KUN skille-testen.

793 -> 801 passed / 4 skipped.
This commit is contained in:
Kjell Tore Guttormsen 2026-08-09 22:12:25 +02:00
commit 50232fb88d
7 changed files with 422 additions and 2 deletions

View file

@ -704,6 +704,28 @@ def _decision_line(result: RunResult) -> str:
return f"FORKASTET — {o.reason}"
def _verdict_origin_line(verdicts: Sequence[Verdict], *, marker: str, inbox_marker: str) -> str:
"""P4 pkt. 4, the seed sentence: of Run B's previous verdicts, how many came WITH the knowledge
base and how many the demo learned in this session.
Said out loud on stage, so it has to be true of the content actually being run and the split
is therefore DERIVED, never written down. The line above it already prints the retrieved count;
a hand-written "one of three" would be a second copy of that number, and would go on being said
unchanged after a bundle shipped a second seeded verdict.
The classifier is the two markers the demo has traced all along: a retrieved verdict carrying one
of them is one this session produced (the Step-8 promotion, the Step-7 inbox note). That rests on
the seeded verdict carrying NEITHER, which is measured on the delivered bundle in
``tests/test_p4_honesty_sentences_loadbearing.py`` rather than assumed here.
"""
learned = sum(1 for v in verdicts if marker in v.rationale or inbox_marker in v.rationale)
seeded = len(verdicts) - learned
return (
f" av disse fulgte {seeded} av {len(verdicts)} med kunnskapsbasen; "
f"de øvrige {learned} er dem demoen lærte i denne økten"
)
def _run_trace_lines(result: RunResult, *, marker: str, marker_in_prompt: bool) -> list[str]:
"""Steps 1-7 of one run, one labelled line per step (``method-spec`` §3), for the walkthrough.
@ -842,6 +864,11 @@ def main(argv: list[str] | None = None) -> int: # pragma: no cover - console tr
print("\nKJØRING B (re-seedet kunnskapsbase + innboksen lest)")
print(" samme åtte steg kjøres igjen; her vises kun det som ENDRET seg:")
print(f" tidligere dommer hentet for kandidaten: {len(result.run_b.retrieved)}")
print(
_verdict_origin_line(
result.run_b.retrieved, marker=result.marker, inbox_marker=result.inbox_marker
)
)
print(
f" markør '{result.marker}' (Steg 8, wiki) i hypotese-prompten: "
f"{result.marker_in_run_b_prompt} (forventet True)"