Candidate manifest 616f953fe09bfc198645886bc4c7228a0fdeafa8c89b1729f2be8a5222689607 on dda7e31b0.
Owner's gate 23:11:36Z-23:15:46Z exit 0; mutants 17 of 17 killed.
Co-Authored-By: Claude Opus 5.5 <[email protected]>
60 lines
3.4 KiB
Markdown
60 lines
3.4 KiB
Markdown
# Row 146 (#1640) mutants
|
|
|
|
There is one mutant per new check: 12 in packages/bus/src/broker.mjs (`#waiting`, `#notice` and
|
|
message.send's result) and 5 in packages/cli/src/cli.mjs (`waitingLines` and its print).
|
|
mutants.py applies each one to ~/dewey-scratch/r146/wt, then runs these files, with each
|
|
package as the working directory:
|
|
|
|
- bus: tests/launch-notice.test.mjs
|
|
- harness: tests/runner.test.mjs
|
|
- cli: tests/verbs.test.mjs and tests/tester.test.mjs
|
|
|
|
It restores the source after each mutant and again in `finally`. The run ended with
|
|
`restored True`, and the candidate manifest checked DIGESTS_OK afterwards.
|
|
|
|
No control step runs inside the harness. The control is the single-file runs on the unmutated
|
|
candidate at 23:05:29Z, all 0 fail: launch-notice 7, runner 24, verbs 7, tester 7.
|
|
|
|
The run went from 2026-10-15T23:06:30Z to 23:11:24Z, in the slot (sage-0417). The logs are in
|
|
mutants/ and the console output is in mutants-run.log.
|
|
|
|
**Result: 17 of 17 killed.**
|
|
|
|
| Mutant | Fault | Killed by |
|
|
|---|---|---|
|
|
| B1-recipient | drop the holder check, so a running role gets a notice too | bus "a message to a running role sends no notice…", bus "no notice for a message to launch.by…", cli verbs |
|
|
| B2-to-human | drop `to === 'human'` | bus "no notice for…" |
|
|
| B3-to-tester | drop `to === 'tester'` | bus "no notice for…" |
|
|
| B4-thread-instance | drop the thread-instance exception | bus "no notice for…" |
|
|
| B5-to-launcher | drop `to !== by` | bus "no notice for…", cli verbs |
|
|
| B6-from-launcher | drop `sender !== by` | bus "no notice for…"; 7 harness tests |
|
|
| B7-from-tester | drop `sender !== 'tester'` | bus "no notice for…", cli tester |
|
|
| B8-no-launcher | drop `by !== null` from `told` | bus "a business with no launch block…", cli verbs |
|
|
| B9-notice-sent | never call `#notice` | bus tests 1, 3, 4 and 7; harness launch-notice test; cli verbs |
|
|
| B10-class-result | notice class INFO, not RESULT | bus test 1 (class assert); harness "the bus's launch notice is one turn with no reply…" |
|
|
| B11-launcher-running | `launcherRunning` always false | bus tests 1 and 5, cli verbs |
|
|
| B12-result-waiting | message.send never returns `waiting` | bus tests 1, 4, 5 and 6; harness launch-notice test; cli verbs and tester |
|
|
| C1-printed | talk never prints the waiting lines | cli verbs, cli tester |
|
|
| C2-no-launch-by | drop the no-launch.by line | cli verbs |
|
|
| C3-launcher-down-self | drop the line for a message to launch.by itself | cli verbs |
|
|
| C4-tester-line | drop the tester line | cli tester |
|
|
| C5-launcher-down-either | drop the "either" restart line when launch.by is stopped too | cli verbs |
|
|
|
|
## B6 and the harness tests
|
|
|
|
The harness fixture's launch block has `by: pm`. Under B6, pm's own message to a stopped coder
|
|
sends pm a notice. The runner then takes that notice as a turn ahead of the message the test
|
|
sent. For example, "a task closed on the tracker…" got the notice body where it expected its
|
|
open-task block.
|
|
|
|
That is the self-wake that call 4 excludes. Without the exception, launch.by's own traffic
|
|
wakes it.
|
|
|
|
## B10 in the runner
|
|
|
|
With class INFO, the runner's auto-reply to `_bus` is refused and the read is skipped. The
|
|
harness test fails at its first wait, for the notice's `read` row: `Error: timed out waiting`
|
|
(mutants/B10-class-result.log, line 76). The read never comes, so the notice stays unread. That
|
|
is the outcome BUILD.md describes, and it is not a loop. The bus test fails on its class assert,
|
|
`'INFO'` against `'RESULT'`.
|