release

Abbreviatory 0.4 Reads Git Diffs, HTTP Responses and Directory Listings

Test runs and logs aren’t the only big outputs a coding agent reads. It reads diffs all day, to review what it changed. It calls APIs with curl and gets back a wall of JSON. It runs find to see what’s in a repository, and gets ten thousand paths. Abbreviatory v0.4.0 reads all three.

Each one gets rules of its own, because each one has its own idea of what matters. In a diff it’s which files changed and how much. In an HTTP response it’s the status and the errors in the body. In a listing it’s the shape of the tree, not every name in it.

Three panels. A git diff of 5,286 lines becomes a report with 32 files and their added and removed lines, then the first changes. A curl response of 37,534 lines becomes the status, three error fields from the JSON body and an outline of the body. A find listing of 10,703 lines becomes counts by directory and extension.

Diffs

Run git diff | abbreviatory reduce and the report starts with one line: how many files changed, lines added and removed, how many files are new, renamed, binary. Then every file, with its own counts and a reference to its part of the diff. Then the changes themselves, a few lines each, shared out so every change shows something before any shows a lot.

Some changes repeat. Rename a function and the same two-line change lands in forty places. That’s one entry with a count of forty. Lock files and generated code (go.sum, package-lock.json, minified JavaScript, anything under vendor/) are listed with their counts but not spelled out, since nobody reviews them line by line. Conflict markers left in a file are errors and come first. So does trailing whitespace, as a warning.

It reads git diff, git show, git log -p, plain diff -u and diff -r, and the combined diffs Git shows for merges. On the diff between v0.2.0 and v0.3.0 of Abbreviatory itself, 5,286 lines and 190 kB, the report is 4,029 bytes: all 32 files and the first changes.

HTTP Responses

Pipe curl -i or curl -v into it. Each status line is a record, and 4xx and 5xx are errors. The headers that matter stay (content type and length, location, retry-after, auth challenges) and the rest fold into one line. curl’s own errors, like a refused connection, are errors too. A redirect chain reads as one: 301 Moved Permanently -> 200 OK.

A JSON body gets parsed. Error fields in it, keys like error or errors or a status of failed, are kept as errors. The rest of the body becomes an outline: the keys, the shape of long arrays, a sample element. Our test fixture is a 720 kB catalogue API response with three stale-price errors buried in 2,500 items. The report is 1,754 bytes, and the errors are at the top.

Run history works here too. Call the same endpoint every few minutes with a key and the report says which errors are new, which are gone, and which have been there for six runs.

Directory Listings

find, fd, ls -l, ls -R, tree, du. Files are grouped by directory and extension, so 563 Go files in src/runtime are one line, x563 src/runtime/*.go. The report opens with the totals: files, directories, total size when the listing has sizes, the most common extensions, the three largest files. “Permission denied” and “No such file” lines are errors.

On a find over Go’s own source tree, 10,703 paths, that’s 4,060 bytes.

Same Promises

All three go through the tests every other format goes through. Every fixture at every budget from 256 bytes to 16 kB: the report never goes over, every error is shown or counted with a reference that covers it, the same input gives the same bytes, and every reference expands back to the original byte for byte. The command line, the MCP server and the HTTP service give the same reports on all of them.

An independent review went over the new code twice before the release. It found real things. A diff report left out lines between files without counting them, like the “Only in” lines of diff -r. Two large changes that started the same were folded together as one. A redirect added in front of an error made history think the error was new. All fixed, each with its own test. In all, 105 Go tests pass.

The demo has the new formats too: a git diff, two curl responses and a find listing to try, or paste your own.

Get It

Download v0.4.0 for Linux, macOS or Windows. Same single binary, same Apache 2.0 licence, still no language model and no network. The reference has every format and what it can’t do yet.

This finishes the plan the project started with: the core, run history, the service and the agent tools, and now the formats coding agents hit most often after tests and logs.