What to build
Declare this repo's runtimes as text so a fleet box installs them instead of relying on what it
happens to have. Add mise.toml with [tools] bun = "1.4.0" and node = "24" (the values
developerz-ai/wurk pinned in wurk#533 and the fleet proved green on 2026-09-17), and pin CI to the
same values: .github/workflows/ci.yml currently uses oven-sh/setup-bun@v2 with
bun-version: latest and sets up no node at all — it passes on ubuntu-latest by accident of
what that image ships. Add a comment in mise.toml naming ci.yml as the other copy so the next
bump moves both. bin/setup already mise-guards (if command -v mise); do not change it.
Evidence this is the cause: fleet task tsk_f2d3b5466fda46da8c6c436193e2f707 for #80 failed on box
fleet-2 with ./bin/setup: line 73: node: command not found immediately after mise all tools are installed, while the same script passed on sebastian-3, which happened to have a node. 13 of the
fleet's 14 exit-127 gate events in 7 days are this repo. Boxes carry no per-language runtime by design
(developerz.ai scripts/attach-vm.sh: "a box is a system and a bun, and nothing per-language; a
repo's toolchain is text (mise.toml) the runner user installs itself").
Acceptance criteria
AFK / HITL
AFK.
Live test
set -euo pipefail
command -v gh >/dev/null || { echo "LIVE_TEST_INCONCLUSIVE: gh is missing on this runner"; exit 1; }
# The merged file must carry both pins. Contents-API read, with a same-scope control (CLAUDE.md pre-exists the merge).
out="$(gh api repos/developerz-ai/ui-debugger-mcp/contents/mise.toml -H 'Accept: application/vnd.github.raw' 2>&1)" || {
ctl="$(gh api repos/developerz-ai/ui-debugger-mcp/contents/CLAUDE.md -H 'Accept: application/vnd.github.raw' 2>&1)" || {
printf '%s\n' "$ctl" | tail -c 300; echo "LIVE_TEST_INCONCLUSIVE: this runner cannot read the repo's CONTENTS (control read failed)"; exit 1; }
printf '%s\n' "$out" | tail -c 300; echo "FAIL: mise.toml is absent on the default branch after merge"; exit 1; }
printf '%s' "$out" | grep -E '^bun *= *"1\.4\.0"' >/dev/null || { echo "FAIL: mise.toml does not pin bun = \"1.4.0\""; exit 1; }
printf '%s' "$out" | grep -E '^node *= *"24"' >/dev/null || { echo "FAIL: mise.toml does not pin node = \"24\""; exit 1; }
echo "PASS: mise.toml pins bun 1.4.0 and node 24 on the default branch"
Affected paths
mise.toml, .github/workflows/ci.yml
Blocked by
None, can start immediately.
Parent
developerz-ai/developerz.ai#4277
Verified against
83903bc
What to build
Declare this repo's runtimes as text so a fleet box installs them instead of relying on what it
happens to have. Add
mise.tomlwith[tools] bun = "1.4.0"andnode = "24"(the valuesdeveloperz-ai/wurkpinned in wurk#533 and the fleet proved green on 2026-09-17), and pin CI to thesame values:
.github/workflows/ci.ymlcurrently usesoven-sh/setup-bun@v2withbun-version: latestand sets up no node at all — it passes onubuntu-latestby accident ofwhat that image ships. Add a comment in
mise.tomlnamingci.ymlas the other copy so the nextbump moves both.
bin/setupalready mise-guards (if command -v mise); do not change it.Evidence this is the cause: fleet task
tsk_f2d3b5466fda46da8c6c436193e2f707for #80 failed on boxfleet-2with./bin/setup: line 73: node: command not foundimmediately aftermise all tools are installed, while the same script passed onsebastian-3, which happened to have a node. 13 of thefleet's 14 exit-127 gate events in 7 days are this repo. Boxes carry no per-language runtime by design
(developerz.ai
scripts/attach-vm.sh: "a box is a system and a bun, and nothing per-language; arepo's toolchain is text (mise.toml) the runner user installs itself").
Acceptance criteria
mise.tomldeclaresbun = "1.4.0"andnode = "24", with a comment namingci.ymlas the paired copyci.ymlpinsbun-version: "1.4.0"and addsactions/setup-nodewithnode-version: "24"before the install stepbun run lint,bun run typecheck,bun test(CI)bin/setup,bin/check,package.jsonorsrc/team_verifyverdict (green or red) rather thangate_unrunnable/ exit 127AFK / HITL
AFK.
Live test
Affected paths
mise.toml, .github/workflows/ci.yml
Blocked by
None, can start immediately.
Parent
developerz-ai/developerz.ai#4277
Verified against
83903bc