magus v0.4.3 is out. See what's new
¶ View markdown source · ✎ Suggest an edit
2 min read

MGS3035: tool unprobeable

A spell declares a version probe for every tool its ops drive, and the answer is part of every cache key those ops write. This tool is present and runs, but the probe fails:

[MGS3035] go:golangci-lint runs in /repo/api but cannot say which build it is,
so no cache key could tell its upgrades apart: version probe golangci-lint
[--version] in /repo/api: exit status 3: panic: runtime error

The last part is the tool's own words, quoted from its output.

Why it is an error

The ops can still pass. A key recording a placeholder in place of the version would then replay those passes after the tool is upgraded, because nothing in the key moved. magus will not write a key that cannot tell two builds apart, so the run stops here, before any target runs.

An absent tool is not this

A tool that is not there gets a warning, not this error, and its key records UNPROBED:

  • the probe's binary is not on PATH (MGS3003);
  • mise is on PATH but selects no version of the tool for the directory;
  • a tool a package manager runs from its install (pnpm exec tsc) is missing from that install. The warning names the cause: no node_modules, an install that never finished, or an install that does not ship the tool, along with the command that fixes it, such as magus run install console.

UNPROBED is honest there because nothing that drives an absent tool can pass, so no result is ever recorded under it that a later run could wrongly replay. Installing the tool moves the key. The absence is cached like a version, so it costs one probe and one warning per change to the probe's inputs, not one per invocation.

Resolution

  • Run the probe yourself in the directory the message names. The quoted line is usually enough to say what broke.
  • Fix the tool: reinstall it, or repair the configuration it reads at startup.
  • Fix the probe: if the tool does not understand the argv its spell declares, correct the probe in the spell's mgs_getTools.

Graph reads

magus status, magus refs and the other graph reads do not fail over one project's tool, because a read runs no tool and writes no cache entry. The project's symbol index reports unvouched with this message, and the other projects answer as usual.

MGS3035versionprobetoolscacheerrors
Last updated (aba0c4fa)
Glossary

Project

A directory magus recognizes as a unit of work (it has a magusfile); the unit of caching, scheduling, and dependency tracking. See workspace.

Target

A named operation (build, test, ...) you invoke with magus run <target>; it may compose a spell's tool-native operations and depend on other targets. See targets.

Op

A single tool-native command a target composes (long form: operation); the middle of the work hierarchy (Spell to Op to Target). See operations.

Spell

A language/runtime adapter (e.g. go, md) that maps generic targets onto a toolchain's real commands. See spells.

Module

A magus stdlib namespace a magusfile imports for host capabilities: filesystem, exec, vcs, and more. See the module reference.

Cache

The content-addressed store magus consults before running a target, so unchanged work is skipped. See cache.

CI

An ordinary magusfile-defined target you compose yourself with magus\needs: magus does not hardcode its stages. Magus.RunCI treats it specially only in that it strips the rw charm, it is the anchor magus affected ci keys off, and a selected scope with no project declaring it is a load error rather than a silent no-op. See targets.

Invocation

One magus process's recorded facts (the targets it finished, their outcomes, the lease it acted as, and the session it ran in when a host delivered one), kept in a repo-scoped store every worktree shares. magus session lists them; the store prunes itself by last-fact age.

Run

One target executing under one magus invocation, such as magus run test web or magus affected ci. A run keeps its captured output behind an output reference. Every magus run is a run whether or not any job asked for it; see Job for how the two relate.

Conventions

This page uses none of the site's convention markers. The full set is on the conventions page.