magus v0.4.2 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 (d120b58e)
Earlier changes on this page (2)

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. See workspace.

Magusfile

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

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.

Buzz

The language magusfiles are written in (the .buzz engine). See engines.

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.

Lease

One row of the lease ledger: a piece of work an orchestrating agent handed out, with its goal, the checkpoint it was cut against, and the paths it owns or must not touch. The ledger records; the agent guard is what reads those facts back when grading a write. See doctrine.

Conventions

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