Abbreviatory Now Reads Cargo, TypeScript, ESLint, Gradle, Maven and npm Output
After tests, the thing a coding agent reads most is a build failing. cargo build, tsc, npm install, mvn test. Until now Abbreviatory read those as logs. It found the lines with “error” in them and folded the repeats, which helped, but it didn’t know that a Rust error is six lines long and the useful part is the file and line in the middle. v0.5.0 does.
It reads cargo (build, check, clippy and test), tsc in both its styles, ESLint, Gradle, Maven, npm and pnpm. Each one gets its own rules, and they all aim at the same thing: every error is one item, named by its file and line, with its code snippet and notes underneath. The tool’s own count, like Found 8 errors or Tests run: 46, Failures: 2, goes in the header.

What It Looks Like
Here’s a Rust project with five errors and four warnings, 119 lines, at a 1 kB budget:
[abbreviatory] cargo / rustc output, 119 lines (5.2 kB)
lines: 82 error, 24 warn, 13 other; 15 distinct messages
runner: warning: `ledger` (bin "ledger") generated 4 warnings
ERRORS (6 kinds, 82 lines):
- error[E0425]: cannot find value `currency` in this scope at src/main.rs:12:27
- error[E0308]: mismatched types at src/parse.rs:12:26
- error[E0308]: mismatched types at src/parse.rs:13:70
- error[E0277]: a value of type `u64` cannot be made by summing an iterator over elements of type `i64` at src/report.rs:5:37
- error[E0277]: cannot add `&str` to `u64` at src/main.rs:9:24
...
rustc puts the location on the line after the error. Abbreviatory moves it into the error’s head, so even when the budget only has room for heads, every error still says where it is. With more room, each one gets its snippet back.
Maven is the other extreme: 203 lines for four failing tests, most of it stack frames and plugin banners. The report leads with the four tests, each with its exception: shop.MoneyTest.roundsHalfUp - java.lang.AssertionError: expected:<20> but was:<10>. Maven repeats every compiler error under “Failed to execute goal” at the end. Those repeats stay inside that one error instead of showing up twice. Its closing advice (“Re-run Maven using the -X switch”) is information, not an error.
Run History Knows Tests by Name
Failing tests from cargo, Gradle and Maven are known by their names in run history, the same way go test and pytest tests are. Change the assertion message and it’s the same test, still failing. In a workspace or a multi-module build, the name carries its crate, Gradle task or Maven module. Two modules that both have a tests::it_works stay apart.
Gradle and Maven only name the tests that fail. A test that was failing and then disappears from the output counts as fixed only if its module ran its tests this time. If the build broke before the tests ran, the report says “not run”. It doesn’t claim fixed.
Found by the Review
Two independent reviews went over the new code before the release. They found 17 defects, and each one now has its own test. A few were the kind you’d hit in your first week:
- Coloured output wasn’t recognised. GitHub’s own starter workflow for Rust sets
CARGO_TERM_COLOR: always, andeslint --colorcame out as a log with no errors in it. - Any log with enough
[INFO]lines was taken for Maven. - In a cargo workspace, a failure in one crate was pinned on a passing test of the same name in another.
- A compile error after a run with failing tests made those tests look fixed.
The full test suite now runs on Windows as well as Linux and macOS. 124 Go tests pass, with 185 subtests.
What It Can’t Do Yet
It reads cargo’s human format, not --message-format=json, and ESLint’s stylish, compact and unix formats, not JSON or SARIF. A tool run inside another (tsc through npm run build) is read as whichever one shows first. Yarn’s output is still read as a log. In tsc’s watch mode, errors from earlier compilations stay in the report. The reference has the rest.
Small builds don’t shrink much. 68 lines of ESLint output is already short, and the report keeps most of it. What changes is the order and the names: errors first, each one addressable by file and line. The gains show up when output gets long.
Get It
Download v0.5.0 for Linux, macOS or Windows and pipe your build into it. Detection is automatic; -format build picks among the build tools only. Same single binary, Apache 2.0, no language model, no network.