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 (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.

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.

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.

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.

Conventions

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