---
title: "MGS3035: tool unprobeable"
description: A tool is installed and runs, but its version probe fails, so no cache key could tell one build of it from the next and magus stops before keying anything on it.
tags:
  [MGS3035, version, probe, tools, cache, errors]
---

# 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:

```text
[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](MGS3003.md));
- 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.
