✔ the host boots the broker, binds a launch in process, and the notifier DMs a blocking decision exactly once (904.392647ms)
✔ a notifier that dies takes the host down with exit 1, so the unit restarts the pair (195.161563ms)
✔ a second host for the same data root refuses with exit 3 while the first runs (112.904093ms)
✔ a notifier that refuses stops the broker and the host refuses with exit 3 (183.76143ms)
✔ a notifier that refuses after the broker died still refuses with exit 3, without a send to the dead broker (167.268086ms)
✔ a notifier that dies before it replies, after the broker died, still refuses, without a send to the dead broker (105.710329ms)
✔ a close send that fails with EPIPE after the notifier refuses still gives the notifier's refusal, exit 3 (170.287733ms)
✔ a close send that fails with EPIPE after the notifier dies unanswered still gives the notifier's error (126.009082ms)
✔ close() whose stop and close sends fail with EPIPE still finishes, with exit 1 (171.530803ms)
✔ watchChildren reports a child that died before it was called, and one that dies later (23.647599ms)
✔ bus stop refuses to signal a live pid that is not a bus host (202.494767ms)
✔ bus start refuses with exit 3 and the code when the broker refuses to boot; bus status names the lock (234.236466ms)
✔ bus start refuses with exit 3 without a notifier config (97.13829ms)
✔ bus start runs until bus stop; status reports it while it runs (674.314841ms)
✖ bus-service.sh renders the unit and installs it into a given directory (19.236597ms)
ℹ tests 15
ℹ suites 0
ℹ pass 14
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 3481.947593

✖ failing tests:

test at packages/cli/tests/host.test.mjs:396:1
✖ bus-service.sh renders the unit and installs it into a given directory (19.236597ms)
  AssertionError [ERR_ASSERTION]: The input did not match the regular expression /^ {2}mkdir -m 0700 -p <dataRoot>\/notify\/<business> +the notifier refuses a looser directory$/m. Input:
  
  'written: /home/jwoltje/darkwing-scratch/tmp/mosaic-cli-BJ6nOZ/mosaic-bus@.service\n' +
    'next, for one business (one per data root):\n' +
    '  write <dataRoot>/notify/<business>/notify.json, mode 0600:\n' +
    '    {"notifyVersion": 1, "binding": "<discord binding>"}   or "binding": null for no DMs\n' +
    '  systemctl --user enable --now mosaic-bus@<business>      start now and at login\n' +
    '  systemctl --user status mosaic-bus@<business>\n' +
    "  journalctl --user -u mosaic-bus@<business> -f             the host's log\n" +
    '  systemctl --user stop mosaic-bus@<business>               SIGTERM; restartable\n' +
    'survive logout and reboot only with lingering on: loginctl enable-linger jwoltje\n'
  
      at TestContext.<anonymous> (file:///home/jwoltje/darkwing-scratch/r45b/wt/packages/cli/tests/host.test.mjs:409:10)
      at Test.runInAsyncScope (node:async_hooks:226:14)
      at Test.run (node:internal/test_runner/test:1402:25)
      at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
      at Test.postRun (node:internal/test_runner/test:1542:19)
      at Test.run (node:internal/test_runner/test:1467:12)
      at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
      at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
    generatedMessage: true,
    code: 'ERR_ASSERTION',
    actual: `written: /home/jwoltje/darkwing-scratch/tmp/mosaic-cli-BJ6nOZ/mosaic-bus@.service\nnext, for one business (one per data root):\n  write <dataRoot>/notify/<business>/notify.json, mode 0600:\n    {"notifyVersion": 1, "binding": "<discord binding>"}   or "binding": null for no DMs\n  systemctl --user enable --now mosaic-bus@<business>      start now and at login\n  systemctl --user status mosaic-bus@<business>\n  journalctl --user -u mosaic-bus@<business> -f             the host's log\n  systemctl --user stop mosaic-bus@<business>               SIGTERM; restartable\nsurvive logout and reboot only with lingering on: loginctl enable-linger jwoltje\n`,
    expected: /^ {2}mkdir -m 0700 -p <dataRoot>\/notify\/<business> +the notifier refuses a looser directory$/m,
    operator: 'match',
    diff: 'simple'
  }
