# Row 136 (#1630) mutants One mutant per new check, plus one for the role check that the run check used to back up. mutants.py applies each to packages/bus/src/broker.mjs in ~/dewey-scratch/r136/wt and runs approval-binding, single-use and broker tests (33 tests). It restores the file afterwards, and the run ended with `restored True`. There is no separate control step in the harness. The control is the single-file runs on the unmutated candidate before it, all 0 fail: approval-binding 5, single-use 12, broker 16. ## Round 1 Run 2026-10-15T22:23:02Z to 22:23:12Z, on e37d6e583. Its logs and console were in the round 1 packet, commit 8e2c5c2d0; round 2's run replaced them here. | Mutant | Fault | Result | Killed by | |---|---|---|---| | M1-authority-thread | #checkAuthority drops `#raisedThread(d) !== s.thread` | KILLED, 1 of 33 failed | approval-binding: a thread approval is consumed only by a run holding the same thread | | M2-supersede-role | supersede drops `old.raised_by_role !== s.role` | KILLED, 1 of 33 failed | approval-binding: a later run of the same instance supersedes an open decision; another instance cannot | | M3-supersede-thread | supersede drops `#raisedThread(old) !== s.thread` | KILLED, 1 of 33 failed | approval-binding: a thread decision is superseded only from the same thread | | M4-authority-role | #checkAuthority drops `d.raised_by_role !== s.role` | KILLED, 1 of 33 failed | approval-binding: another instance of the same definition cannot consume an approval | ## Round 2 On base 277d1fa21 with the round 2 candidate. The same harness runs the same three files, now 34 tests, with M5 and M6 added for Filbert's note 2. Each mutant's target string occurs exactly once in the rebased broker.mjs (the harness asserts it). **First run, 2026-10-15T23:44:24Z to 23:44:40Z (mutants-run-first.log): M6 survived.** The pre-121 test superseded the approved decision, and `#closed` refuses that before the thread matters. I changed the test to supersede an open pre-121 decision (BUILD.md, round 2). approval-binding then passed 6/6 unmutated. **Rerun, 2026-10-15T23:45:09Z to 23:45:24Z (mutants-run.log, logs in mutants/): 6 of 6 killed, `restored True`.** | Mutant | Fault | Killed by (approval-binding) | |---|---|---| | M1-authority-thread | #checkAuthority drops `#raisedThread(d) !== s.thread` | a thread approval is consumed only by a run holding the same thread; the pre-121 test | | M2-supersede-role | supersede drops `old.raised_by_role !== s.role` | a later run of the same instance supersedes an open decision; another instance cannot | | M3-supersede-thread | supersede drops `#raisedThread(old) !== s.thread` | a thread decision is superseded only from the same thread; the pre-121 test | | M4-authority-role | #checkAuthority drops `d.raised_by_role !== s.role` | another instance of the same definition cannot consume an approval | | M5-authority-null-any-thread | #checkAuthority reads a null raised thread as the run's thread | the pre-121 test | | M6-supersede-null-any-thread | supersede reads a null raised thread as the run's thread | the pre-121 test | ## Round 1 notes M4's check is not new. Before this row the run check also refused another instance, so the role check had no test of its own. Now it is the only thing between coder2 and coder's approval, so I added the mutant to show a test holds it. Single use needs no new check. #consumeAuthority already refuses `decision-consumed` once an `action.allowed` row exists for the decision, whichever run wrote it. The restart test and the single-use test cover it across runs.