test(b-gate): the mutant's needle is the door's name BARE, not the door's name in a sentence

First attempt at M12 still passed 86 of 86 -- the arm planted a docstring that
MENTIONED the module in prose, and the gate compares whole strings, so prose never
reached the check either way. The arm proved something already true and left the
mutant alive.

The cheapest cheat is the bare name: a string that IS the dotted module, standing
alone. That is what the arm plants now, and the same for the step's symbol.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-19 22:08:14 +02:00
commit 6a8106a897
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q

View file

@ -1148,24 +1148,24 @@ def test_a_probe_that_drives_the_door_without_naming_the_step_proves_the_door_on
def test_a_probe_that_only_mentions_the_door_or_the_step_proves_neither(tmp_path: Path) -> None:
"""FUNN 19.09, mutant M12 overlevde: leses HELE probens kropp, holder det å NEVNE døren og
steget i docstringen. Da er «rører døren» en omtale igjen, ikke en atferd nøyaktig feilen
ett hakk lenger inne. Gaten leser derfor aldri en streng som står alene."""
"""FUNN 19.09, mutant M12 overlevde FØRSTE forsøk på å felle den: leses HELE probens kropp,
holder det å skrive dørens navn som en streng som står alene. Da er «rører døren» en omtale
igjen, ikke en atferd nøyaktig feilen ett hakk lenger inne.
Nålen er dørens navn NØYAKTIG, ikke som del av en setning: gaten sammenligner hele strenger,
en docstring som OMTALER modulen i prosa faller uansett. Den billigste måten å jukse er
derfor å skrive navnet bart, og det er den formen armen planter."""
src = _fake_src(tmp_path, chat_client=False)
_write_probe(tmp_path, docstring="en ekte probe, den kaller fakesrc.driver med gjoer_noe")
_write_probe(tmp_path, docstring="en ekte probe: den kjører døren og sjekker exit-koden")
row = gate.score_toolbox(_one_step(), src, _fake_run_path(), _FAKE_PASSED, tmp_path)
assert (row.k, row.n) == (1, 1), row.exceptions
_write_probe(
tmp_path,
door="fakesrc.enhelt_annen_modul",
docstring="denne proben kjører fakesrc.driver",
)
_write_probe(tmp_path, door="fakesrc.enhelt_annen_modul", docstring="fakesrc.driver")
row = gate.score_toolbox(_one_step(), src, _fake_run_path(), _FAKE_PASSED, tmp_path)
assert (row.k, row.n) == (0, 1), row.exceptions
assert any("rører ikke døren" in x for x in row.exceptions), row.exceptions
_write_probe(tmp_path, needle="et_annet_navn", docstring="beviser steget gjoer_noe")
_write_probe(tmp_path, needle="et_annet_navn", docstring="gjoer_noe")
row = gate.score_toolbox(_one_step(), src, _fake_run_path(), _FAKE_PASSED, tmp_path)
assert (row.k, row.n) == (0, 1), row.exceptions
assert any("navngir ikke steget" in x for x in row.exceptions), row.exceptions