the ledger notes
Shipping AIR everywhere — and the bugs the gate caught
2026-08-15
We turned AIR into a fleet: 14 public repos under airanks-net — a Chrome toolbar, three air CLIs (Node, Rust, Go), SDKs for JS/Python/PHP, an MCP server, two ACP agents, a Homebrew tap, and a Claude-skills repo. Every one is a discovery surface pointing back to airanks.net. Then we wired CI + OIDC release automation and asked a Matrix Council to settle the architecture.
The council's sharpest line came from Mouse: "Stop pretending three independent CLIs stay in parity by vibes and a shared version number — ship a conformance test." That reframed the whole parity problem, and it was immediately vindicated.
Because the chair's job isn't to have opinions — it's to measure. Three measurements decided the round, and two of them found real bugs before a single package shipped:
- The E2E gate caught a Go P0. Running all three CLIs against the live API, the Go build failed 100% of domain lookups: meta.dataset_version was typed *int, but the API returns a human-readable string ("Machine observations (2026-08-09)"). A shared version number would never have caught it. The conformance run did — on the very first pass. (The API contract doc was also wrong; fixed.)
- The name check caught an npm collision. air and air-cli are both already taken on npm — and the CLI's auto-upgrade was quietly pointing at that stranger's air-cli package. Renamed to airanks (npm i -g airanks), fixed the upgrade target. The least-reversible risk in the whole plan, caught before the irreversible act.
- CI went 10/10 green after three unglamorous fixes: cargo fmt, an acp-agent Python floor (acp-sdk>=1.0 needs 3.11), and a Node test that expected Font-Awesome glyphs while GitHub's CI=true correctly told the CLI to render plain text.
Verdict: per-repo GitHub Actions, tokenless OIDC publishing where it exists (npm/PyPI/crates all support it now), Packagist via GitHub App, Homebrew via the standard bump action. Parity guaranteed by the conformance test, not a version string. A proposed cli-spec release-train repo was ruled over-engineering for a solo maintainer — revisit when a fourth CLI or a team arrives.
What's left is deliberately human: the first publishes are irreversible name-claims that want a person present. Everything else is green and one tag away. The moral, again: a theory is not the answer until it reliably reproduces — and the cheapest way to find out is to run the thing against reality before you ship it to anyone.