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

MGS3006: tool too new

The binary exists, reports a version, and is usable, and that version is at or above the ceiling declared for it.

[MGS3006] node v25.9.0 is newer than the supported range for this
project (below 25)

Its other side is MGS3005, for a version below the minimum. See that page for how a window is declared and how the spell's and the project's bounds are intersected.

Why it is its own code

The remediation is the opposite one. MGS3005 says upgrade; this says the release you are on has not been qualified here, so either pin back or widen the window deliberately.

It is also the defect this pair replaced. The single-constraint form that came before had exactly one consumer, and that consumer reported every failure as MGS3005, so a too-new binary was told it was "older than this spell supports." Folding both directions into one code is what made that possible; two bounds are two comparisons, and which one failed is structural rather than something the caller reconstructs.

The ceiling is exclusive

below names the first version rejected, not the last one accepted:

supported = VersionBounds{below = "25"},

24.19.0 passes. 25.0.0 does not.

This is deliberate. An inclusive max invites the off-by-one everyone writes: max = "24" reads as <= 24.0.0 and rejects 24.19.0, when the author meant "not the 25 line."

Resolution

  • Pin back to a version under the ceiling, through whatever installs the tool for this repo. below = "25" accepts the 24 line and nothing above it.
  • Widen the window, once you have qualified the newer release, by raising below in the spell's Tool.supported or in tools in the project's own magus\project call.

The message does not say which of the two set the ceiling, because they are intersected before the comparison. magus describe tools prints both declarations and the effective window.

What it deliberately does not do

An unprobeable tool is not "too new." If the probe fails, the window passes, and the missing binary is reported as MGS3003 when a target forks it.

Output magus cannot parse is not "too new" either. A version line carrying no semver is left alone.

It never suggests a version to move to. magus reports where the installed version sits against a window someone declared; choosing what to run is not a build tool's decision.

MGS3006versionboundssupportedtoolserrorsmagusfile
Last updated (895d94e4)
Earlier changes on this page (3)

Full history ↗ · Blame source ↗

Glossary

Project

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

Magusfile

The magusfile.buzz that declares a project's targets (as export funs) and binds its spells. Magusfile in full.

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. Target in full.

Op

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

Spell

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

Buzz

The language magusfiles are written in (the .buzz engine). Buzz in full.

CI

An ordinary target you compose yourself with ctx.needs; magus does not hardcode its stages. It is the anchor magus affected ci keys off, and ci strips the rw charm. CI in full.

Tool

An action a model can call through its host: a name, a description, a typed input and a result. magus serves its tools over MCP, each a read of the workspace model or a run of the CLI it already has. Tool in full.

Window

The terminal a command runs in. It keys fire-once notices for a caller no host gave a session, and is never recorded as a session. Window in full.

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. Run in full.

Lease

The grant a holder takes on a job: the write and read paths that job declared, enforced in the checkout that took it with magus job exec. A job is the piece of work; a lease is permission over it. Lease in full.

Conventions

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