astria 1.0.12: the trust release — proven graphs, gates that verify coverage, MCP over HTTP
1.0.12 is the largest release since 1.0: MCP over HTTP with multi-project serving, first-class Azure/Bedrock/Kimi backends, 42 registered languages, and Whisper transcription — then hardened by a 42-finding project review and a follow-up pass that makes every "your graph is fresh" claim provable instead of assumed. Install or upgrade with npm install -g @nodesify/astria.
One process, many graphs
astria mcp --http serves one or many project graphs over MCP Streamable HTTP from a single process: clients pick a project per request with the x-astria-project header, bearer auth is mandatory off-loopback, and GET /healthz keeps orchestrators honest. Reads got faster too — a publication-keyed snapshot cache serves repeated queries, repo map, and explain from memory, and this release grows it into a bounded multi-project LRU so alternating repositories stop evicting each other.
A gate that proves coverage
The merge gate used to accept a graph whose publish timestamp postdated the last commit — which only proved the build happened later, never that it saw the commit. Now every publication records the exact git HEAD it was built from, and the gate compares that against your current HEAD while re-hashing every manifest file against the graph's own content scheme. A graph built from a dirty tree, an older commit, or sources that drifted after publication each fail with a reason that names the difference. Query headers carry the cheap version of the same signal — modified, deleted, and timestamp-forged files — separated from plain graph age.
The review backlog
A source-backed review found 36 defects and 6 engineering gaps; all 42 shipped fixed, with statuses in docs/project-review-2026-10-03.md. The headlines:
- Security: HTML exports escape every
<(mixed-case</SCRIPT>breakout closed); MCP configs never reach LLM backends;bolt+s://really is TLS now — no silent plaintext downgrade; media downloads are vetted through the SSRF policy before a byte moves. - Identity: node ids are case-preserving (
Fooandfoostay distinct), duplicate ids rewire their edges to the surviving definition, and merges swap atomically with artifacts staged until the swap succeeds. - Honesty: the LLM budget is reserved before each call rather than audited after; truncated chunk sets fail loudly instead of caching as success; Bedrock
stopReasonis checked; health scores stop counting "the file contains the symbol" as reachability and only flag hubs whose degree is actually abnormal for your graph.
Also aboard
42 language configurations (17 new — SQL, Julia, R, Fortran, Solidity, and more), Office and Google Workspace ingestion, video/audio transcription through local whisper-cli, CJK query segmentation, --resolution/--exclude-hubs clustering controls, .astria/cost.json spend reports, a PR dashboard (astria prs), a git merge driver for .astria/graph.json, and an in-repo version-to-version A/B harness that already caught one shipping regression.