toolchain: node v26.8.1 OK syntax: packages/discord/src/approvals.mjs OK syntax: packages/discord/src/authorize.mjs OK syntax: packages/discord/src/binding.mjs OK syntax: packages/discord/src/cli.mjs OK syntax: packages/discord/src/connector.mjs OK syntax: packages/discord/src/context.mjs OK syntax: packages/discord/src/engine-pi.mjs OK syntax: packages/discord/src/errors.mjs OK syntax: packages/discord/src/gateway.mjs OK syntax: packages/discord/src/git.mjs OK syntax: packages/discord/src/journal.mjs OK syntax: packages/discord/src/notify.mjs OK syntax: packages/discord/src/processing.mjs OK syntax: packages/discord/src/rest.mjs OK syntax: packages/discord/src/setspark.mjs OK syntax: packages/discord/src/tools.mjs OK syntax: packages/discord/src/web.mjs OK syntax: packages/discord/bin/git-credential.mjs OK syntax: packages/discord/extension/tools.mjs OK syntax: packages/discord/tests/approvals.test.mjs OK syntax: packages/discord/tests/authorize.test.mjs OK syntax: packages/discord/tests/binding.test.mjs OK syntax: packages/discord/tests/connector.test.mjs OK syntax: packages/discord/tests/context.test.mjs OK syntax: packages/discord/tests/copy-service.test.mjs OK syntax: packages/discord/tests/engine.test.mjs OK syntax: packages/discord/tests/fake-pi.mjs OK syntax: packages/discord/tests/gateway.test.mjs OK syntax: packages/discord/tests/git.test.mjs OK syntax: packages/discord/tests/helpers.mjs OK syntax: packages/discord/tests/journal.test.mjs OK syntax: packages/discord/tests/notify.test.mjs OK syntax: packages/discord/tests/offline-check.test.mjs OK syntax: packages/discord/tests/processing-stop.test.mjs OK syntax: packages/discord/tests/processing.test.mjs OK syntax: packages/discord/tests/recover.test.mjs OK syntax: packages/discord/tests/rest.test.mjs OK syntax: packages/discord/tests/setspark.test.mjs OK syntax: packages/discord/tests/tools.test.mjs OK syntax: packages/discord/tests/web.test.mjs OK syntax: packages/discord/fixtures/claim-worker.mjs OK syntax: packages/discord/fixtures/legacy-owner-worker.mjs OK syntax: scripts/discord.sh OK syntax: scripts/discord-service.sh OK packages/discord declares no dependencies OK no bot-token-shaped string in packages/discord OK fixture binding uses placeholder ids only OK fixture binding validates OK real pi with the extension exposes exactly list_dir, read_file, search and no built-in tool OK real pi with a writable root exposes exactly the three reads plus write_file and edit_file, and writes nothing at start OK real pi with a web key exposes the three reads plus web_fetch and web_search, and no write tool without a writable root OK real pi with a git root exposes the reads, writes and the four git verbs, commits nothing at start, and never shows the token OK real pi with protocol vault adds reserve_id to the git verbs OK real pi with a setspark key exposes the reads and the eight record verbs, no counters, and never shows the key OK real pi refuses a git key on a read-only root (fail closed) OK real pi with the pilot flags (--no-tools) exposes no tool at all OK real pi exits non-zero without MOSAIC_DISCORD_TOOLS: no session, no tools (fail closed) OK a failing nested test fails the run under a parent runner's NODE_TEST_CONTEXT OK node --test packages/discord/tests/ (ℹ pass 192) OK scripts/discord.sh --help exits 0 OK scripts/discord.sh check without a binding exits 4 OK scripts/discord.sh recover without a binding exits 4 OK scripts/discord.sh reload without a binding exits 4 OK scripts/discord-service.sh without a command exits 4 OK service unit renders with the repository path, a supervised run as the main process, exit 3 never retried, and reload as SIGHUP OK service install writes the rendered unit (0644) and leaves no temp file OK service install a second time reports unchanged OK systemd-analyze verify accepts the rendered unit OK service uninstall removes the unit file OK service install with an unknown flag exits 4 OK service install with USER unset finishes and names the account for lingering OK pinned render runs copy CLI with copy cwd/repo and no checkout executable OK pinned install writes the rendered unit in a temporary unit directory OK pinned install refuses short prerequisite and writes no unit OK pinned install refuses missing prerequisite and writes no unit OK pinned install refuses cli prerequisite and writes no unit OK pinned install refuses pi prerequisite and writes no unit OK status names the copy from fake systemctl effective cwd OK checkout install explicitly recommends --copy OK wrapper check --offline passes local fixture and makes no network call OK wrapper run --offline refuses usage discord suite: 81 passed, 0 failed