From fbfd25ad317d0be60ce5025671354b40e3432f8b Mon Sep 17 00:00:00 2001 From: "Jonathan D.A. Jewell" <6759885+hyperpolymath@users.noreply.github.com> Date: Tue, 21 Jul 2026 13:43:42 +0100 Subject: [PATCH] chore(mise): 13 phantom tools, a no-op [alias] block, and no Elixir MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `mise.toml` emitted ~25 warning lines on every shell entry in this repo while installing none of the tools it warned about. Three faults. ## 1. Thirteen tool names that do not exist in the mise registry denojs, pip, cargo, go-task, gofmt, isort, git, gnu-sed, gnu-grep, gnu-tar, vitest, pytest, jest — every one failed to resolve, so every one was pure noise. Grouped by why: - already provided by a listed tool: cargo (rust), gofmt (go), pip (python) - project deps, not system tools: vitest, jest, pytest, isort - base system binaries: git, gnu-sed, gnu-grep, gnu-tar - simply misnamed: denojs -> deno go-task is dropped rather than renamed. NB the bare name `task` does not work either: `mise registry` LISTS it as `aqua:go-task/task`, but resolving `task@latest` still fails — appearing in registry output is not sufficient to conclude a name resolves. `just` is listed instead, which is what this repo actually drives everything through. ## 2. erlang and elixir were missing entirely Elixir is the language of lib/ and all 71 test files, and it was not in the toolchain manifest at all. Now pinned to erlang 27.0 / elixir 1.17 — the same versions .github/workflows/tests.yml passes to erlef/setup-beam, so a local `mix test` runs on the same toolchain as CI. ## 3. The [alias] block never did anything [alias] build = "cargo build --release || npm run build || go build" test = "cargo test || npm test || go test ./..." mise's `[alias]` maps an alias to a TOOL PLUGIN; it does not define tasks, so none of these ever ran (mise also warns it is deprecated in favour of `[tool_alias]`). Not re-added as `[tasks]`: the Justfile already defines build, test, fmt, fmt-check, lint, doctor and heal properly, for the languages this repo actually uses. Two task runners sharing verb names — one of which silently falls through `||` chains into a different language's build — is worse than one. ## Verified, not asserted Controlled comparison on one machine, one shell, both files read (this fixed copy in a worktree, the unfixed copy in the parent): warnings citing the FIXED file : 0 warnings citing the UNFIXED file : 14 Every retained name checked with `mise ls-remote` — resolution, not mere presence in `mise registry` output, which is what missed `task`. Remaining expected output is `mise WARN missing: erlang@27.0 elixir@1.17` until someone runs `mise install`. That one is correct and actionable — it reports a real local/CI toolchain gap rather than an unfixable typo. Co-Authored-By: Claude Opus 4.8 --- mise.toml | 109 +++++++++++++++++++++++++++++++++++++++--------------- 1 file changed, 80 insertions(+), 29 deletions(-) diff --git a/mise.toml b/mise.toml index 6dd983f6..ac982c7f 100644 --- a/mise.toml +++ b/mise.toml @@ -1,57 +1,108 @@ +# SPDX-License-Identifier: CC-BY-SA-4.0 +# +# Every entry below was checked against `mise registry` before being written. +# The previous version named 13 tools that do not exist in the registry, so +# mise emitted ~25 lines of warnings on EVERY shell entry in this repo while +# installing none of them. + [tools] -# Language runtimes +# --------------------------------------------------------------------------- +# Primary languages for this repo. +# +# erlang + elixir were MISSING entirely, despite Elixir being the language of +# lib/ and the 71 test files. Pinned to the same versions .github/workflows/ +# tests.yml gives erlef/setup-beam, so a local `mix test` runs on the same +# toolchain as CI rather than on whatever the developer happens to have. +# --------------------------------------------------------------------------- +erlang = "27.0" +elixir = "1.17" +rust = "latest" +zig = "latest" + +# --------------------------------------------------------------------------- +# Secondary runtimes retained from the previous file. +# --------------------------------------------------------------------------- node = "latest" python = "latest" -rust = "latest" go = "latest" -zig = "latest" java = "latest" bun = "latest" -denojs = "latest" +deno = "latest" # was `denojs` — not a registry name -# Package managers +# --------------------------------------------------------------------------- +# Package managers / task runner +# --------------------------------------------------------------------------- npm = "latest" yarn = "latest" pnpm = "latest" -pip = "latest" -cargo = "latest" -go-task = "latest" +just = "latest" # the actual task runner for this repo (see Justfile) -# Formatting & Linting -gofmt = "latest" +# --------------------------------------------------------------------------- +# Formatting & linting +# --------------------------------------------------------------------------- black = "latest" -isort = "latest" ruff = "latest" prettier = "latest" shfmt = "latest" stylua = "latest" +# --------------------------------------------------------------------------- # Build tools +# --------------------------------------------------------------------------- cmake = "latest" make = "latest" ninja = "latest" -# Shell tools -git = "latest" -gnu-sed = "latest" -gnu-tar = "latest" -gnu-grep = "latest" - -# Testing -vitest = "latest" -pytest = "latest" -jest = "latest" +# --------------------------------------------------------------------------- +# REMOVED — none of these resolve in the mise registry, so they installed +# nothing and only produced warnings. Grouped by why they were wrong: +# +# Already provided by a tool that IS listed above: +# cargo -> ships with `rust` +# gofmt -> ships with `go` +# pip -> ships with `python` +# +# Project-level dependencies, not system tools. These belong in +# package.json / pyproject.toml / mix.exs, not in a toolchain manager: +# vitest, jest, pytest, isort +# +# Task runner that never installed: +# go-task -> not a registry name. NB the bare name `task` does not work +# either: `mise registry` LISTS it as `aqua:go-task/task`, but resolving +# `task@latest` still fails. Appearing in `mise registry` output is not +# sufficient to conclude a name resolves — check with `mise ls-remote`. +# Dropped entirely; this repo drives everything through the Justfile, so +# `just` is listed above instead. +# +# Base system binaries that mise should not be shadowing on Linux: +# git, gnu-sed, gnu-grep, gnu-tar +# +# If a GNU-vs-BSD coreutils difference ever actually bites on macOS, add +# `coreutils` (which does exist in the registry) rather than these names. +# --------------------------------------------------------------------------- [env] -# Common environment variables NODE_ENV = "development" PYTHONDONTWRITEBYTECODE = "1" PYTHONUNBUFFERED = "1" -# Task runner alias -[alias] -task = "go-task" -build = "cargo build --release || npm run build || go build" -test = "cargo test || npm test || go test ./..." -lint = "ruff check . || prettier --check . || black --check ." -fmt = "ruff format . || prettier --write . || black ." +# --------------------------------------------------------------------------- +# REMOVED — an `[alias]` section holding what were clearly meant to be tasks: +# +# [alias] +# task = "go-task" +# build = "cargo build --release || npm run build || go build" +# test = "cargo test || npm test || go test ./..." +# lint = "ruff check . || prettier --check . || black --check ." +# fmt = "ruff format . || prettier --write . || black ." +# +# mise's `[alias]` maps an alias to a TOOL PLUGIN — it does not define tasks, +# so none of these ever ran. mise also warns that `[alias]` is deprecated in +# favour of `[tool_alias]`. +# +# They are not re-added as `[tasks]`, because the Justfile already defines +# `build`, `test`, `fmt`, `fmt-check`, `lint`, `doctor` and `heal` properly and +# for the languages this repo actually uses. Two competing task runners with +# the same verb names — one of which silently falls through `||` chains to a +# different language's build — is worse than one. Use `just `. +# ---------------------------------------------------------------------------