release · · 4 min

Mitts 0.3.29: -q, Cargo's message formats and a workspace E0463 fix

mitts test --quiet and mitts check --message-format=short were rejected on 0.3.28 and are accepted now; check --workspace --all-targets no longer fails with E0463 on test targets; macOS binaries no longer keep a symlinked checkout path.

On this page · 7 sections
  1. -q / --quiet (#63)
  2. --message-format (#64)
  3. E0463 on check --workspace --all-targets (#65)
  4. macOS: the dependency path in its physical form
  5. CI on macos-15
  6. Getting it
  7. Still pre-release

Mitts v0.3.29 was published on 2026-11-07 from commit ce189652 (the merge of PR #68), together with mitts 0.3.29 on crates.io under MIT OR Apache-2.0. The version is archived on Zenodo as 10.5281/zenodo.24030068; the concept DOI for all versions is 10.5281/zenodo.24030067. It closes three issues opened after 0.3.28: two Cargo flags that Mitts refused, and an E0463 failure on test targets. It also fixes how macOS binaries record the path of a symlinked checkout. This post follows the release notes, PR #66, PR #67 and the issues they close. It reports no new measurements.

-q / --quiet (#63)

On 0.3.28 mitts test --quiet stopped at argument parsing:

error: unexpected argument '--quiet' found

The issue came from a tool that generates test commands for its users and could not switch them from cargo to mitts while --quiet was refused. In 0.3.29 test, check, clippy, bench and coverage accept -q and --quiet. The flag drops the Mitts header, progress bars, [mitts::stats], stage footers and the per-binary Running ... and Doc-tests ... lines. Mitts also passes -q on to standard libtest harnesses, unless -q, --quiet or --format already follows --, the target sets harness = false, or the command is bench. With -c, PASS lines are dropped while FAIL details and the Summary line stay. Failure diagnostics, coverage reports and exit codes do not change.

--message-format (#64)

0.3.28 accepted only human and json. A consumer whose parser was written for cargo check --message-format=short got invalid value 'short'. Now --message-format accepts human, short, json, json-diagnostic-short, json-diagnostic-rendered-ansi, json-render-diagnostics and Cargo’s comma-separated combinations of the json modifiers, on build, check, clippy, test, bench and run. A conflicting or unknown combination exits with code 2 and prints nothing on stdout. With json-render-diagnostics, rendered messages go to stderr and stdout stays NDJSON. Mitts drops its internal artifact notifications from that stream.

E0463 on check --workspace --all-targets (#65)

In a multi-crate workspace (the report used a rust-analyzer checkout), mitts check --workspace --all-targets failed on unit-test targets with error[E0463]: can't find crate for ..., while the same command without --all-targets finished. Until this release rustc looked for dependencies in the shared metadata directory of the artifact store, where stale or unrelated variants of a crate could make the lookup ambiguous.

Now each build stages the dependency outputs it needs into its own session directory, under the exact file names rustc expects, and passes that directory as -L dependency=. The directory stays locked until the process exits, so doctests can still find it, and a later build or mitts gc removes it. Check-only binary, test, example and benchmark units no longer publish lib<target>-*.rmeta files into the shared dependency directories. The short metadata key of a unit is now a hash of the whole composite key. It used to be the first 16 characters, which left out build-script and environment suffixes. The compiler remap protocol key moves to canonical-v4-hermetic-deps. PR #66 adds a regression test that failed with exit code 101 before the fix, plus tests for #63 and #64; its isolated run passed 953 of 953 tests.

macOS: the dependency path in its physical form

Found while moving CI to macOS 15 (PR #67, commit 84e89b4). The macOS 15 linker (ld-1167.5, Xcode 16.4) writes the debug-map path of a transitive rlib exactly as the -L dependency= directory is spelled. Mitts strips the physical checkout root with -oso_prefix. A checkout reached through a symlink, such as /var for /private/var (every TempDir and many CI workspaces), therefore kept its path in the binary, and that binary was keyed per checkout. Mitts now passes the directory in its physical form.

CI on macos-15

GitHub no longer starts jobs on the macos-14 label. They are cancelled within a second with The configuration 'macos-14-arm64-us-default' is not supported. Every workflow that used it (ci, release, release-binaries, installer-smoke, apple-credentials-check) now uses macos-15. In the release run for this version, the macOS packaging, signing and install jobs ran on macos-15 and passed.

Getting it

The release has archives for aarch64-apple-darwin, aarch64-unknown-linux-gnu and x86_64-unknown-linux-gnu. Each comes with its own .sha256 file, and there is a SHA256SUMS for all three. Each archive holds mitts, BUILD.txt and both licence files. On an Apple silicon Mac:

base=https://github.com/alex09x/mitts/releases/download/v0.3.29
curl -fLO "$base/mitts-v0.3.29-aarch64-apple-darwin.tar.gz"
curl -fLO "$base/mitts-v0.3.29-aarch64-apple-darwin.tar.gz.sha256"
shasum -a 256 -c mitts-v0.3.29-aarch64-apple-darwin.tar.gz.sha256
tar xzf mitts-v0.3.29-aarch64-apple-darwin.tar.gz
install -m 755 mitts "$HOME/.cargo/bin/mitts"

On Linux, take the archive for your architecture and check it with sha256sum -c.

Still pre-release

The limitations are unchanged:

  • Linux and macOS only;
  • host target only, with no cross-compilation;
  • no remote cache: the store belongs to one machine;
  • sparse registries only, so git-index and local-registry sources are refused with advice.

Unsupported Cargo features fail with an error rather than a guess. Where you need Windows, cross-compilation, a team cache or a stable release, the README’s advice stands: use Cargo, optionally with sccache.

Cite this article
Citation
Alexander Panasenko (2026-11-07). Mitts 0.3.29: -q, Cargo's message formats and a workspace E0463 fix. https://prod.codes/blog/mitts-0-3-29-quiet-message-formats-and-e0463/