Skip to content

chore(mise): 13 phantom tools, a no-op [alias] block, and no Elixir#646

Merged
hyperpolymath merged 1 commit into
mainfrom
chore/mise-toml-repair
Jul 21, 2026
Merged

chore(mise): 13 phantom tools, a no-op [alias] block, and no Elixir#646
hyperpolymath merged 1 commit into
mainfrom
chore/mise-toml-repair

Conversation

@hyperpolymath

Copy link
Copy Markdown
Owner

Context

mise.toml printed roughly 25 warning lines on every shell entry in this repo, while
installing none of the tools it warned about. It is developer-ergonomics only — CI does not
consume it — but it made every command in this repo, human or bot, arrive buried in noise.

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. Removed, grouped by reason in the file itself:

reason names
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 denojsdeno

go-task is dropped, not renamed. The bare name task does not work either:
mise registry lists it as aqua:go-task/task, but task@latest still fails to resolve.
That is a trap worth recording — appearing in mise registry output is not sufficient to
conclude a name resolves.
I initially "verified" all names against registry listing and it
passed task; only running mise caught it.

2. erlang and elixir were absent entirely — despite Elixir being the language of
lib/ and all 71 test files. Now pinned to erlang 27.0 / elixir 1.17, matching what
tests.yml passes to erlef/setup-beam, so local mix test and CI run the same toolchain.

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]). Deliberately
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.

Verification

Controlled comparison, one machine, one shell, both files read (the fixed copy in a
worktree, the unfixed copy in the parent checkout):

warnings citing the FIXED   file : 0
warnings citing the UNFIXED file : 14

Every retained name re-checked with mise ls-remote — resolution, not registry listing.

Expected remaining output

mise WARN  missing: erlang@27.0 elixir@1.17

until someone runs mise install. That warning is correct and actionable — it reports a
genuine local/CI toolchain gap, unlike the previous unfixable typos.

Acceptance criteria

  • mise.toml parses as valid TOML
  • Zero mise warnings attributable to this file
  • Every tool name resolves via mise ls-remote
  • No [alias] section
  • Reviewer confirms dropping go-task is acceptable (nothing in-repo invokes task)

Model tier

Haiku/Sonnet — a single config file, no code paths, fully mechanical once the registry
facts are established. Recorded here so the pattern can be reused: several other estate
repos carry the same copied mise.toml.

Related

`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 <noreply@anthropic.com>
@hyperpolymath
hyperpolymath marked this pull request as ready for review July 21, 2026 13:05
@hyperpolymath
hyperpolymath merged commit a437283 into main Jul 21, 2026
62 of 75 checks passed
@hyperpolymath
hyperpolymath deleted the chore/mise-toml-repair branch July 21, 2026 13:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant