Skip to content

chore(mise): declare bun 1.4.0 and node 24 as text, and pin CI to the same values #85

Description

@ivndev001

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

  • mise.toml declares bun = "1.4.0" and node = "24", with a comment naming ci.yml as the paired copy
  • ci.yml pins bun-version: "1.4.0" and adds actions/setup-node with node-version: "24" before the install step
  • gates green: bun run lint, bun run typecheck, bun test (CI)
  • no change to bin/setup, bin/check, package.json or src/
  • live test: post-merge, the next fleet coding run on this repo records a team_verify verdict (green or red) rather than gate_unrunnable / exit 127

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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions