astria 1.0.11: the hardening release — safe migrations, an installer that can't wipe your configs
1.0.11 lands everything from a full-repo audit: crash-proof database migrations, an installer that refuses to touch configs it can't parse, ownership rules for everything install writes, a native loader that fails cleanly, and bounded protocol decoding. It also carries the 1.0.10 distribution follow-ups (working Homebrew binary, plugin-bundled MCP server, registry name gates). Install or upgrade with npm install -g @nodesify/astria.
A crash can no longer brick your graph
Every schema migration now commits its DDL and its version stamp in one transaction, and each column change checks what already exists first. Before, a crash in the narrow window between the two left a database whose next open re-ran the migration and failed with duplicate column name — taking every later command against that repo down with it. Databases the old code had already stranded repair themselves on first open.
The installer protects what it didn't write
- A config file the installer can't parse is left alone — an abort with the path, not the silent reset-to-
{}that used to destroy the rest of the file..vscode/mcp.json(officially JSONC) parses with comments intact. - Every rewrite — JSON configs, the Codex TOML, markdown sections, git hooks — goes through temp-file + rename, so a crash mid-write can't leave a truncated file behind.
- Uninstall removes only what install wrote: user-written
astria/graphifyentries, a user's ownastria hook-guardhook, and unmanaged## astriamarkdown sections all survive, and## astria-guideis never mistaken for ours. - The JS updater hook is never appended to shell-script hooks (it used to break them with syntax errors on every commit).
Loading and protocol hardening
The CLI now starts even when the native binary is missing — astria install, uninstall, and --version always work, with a diagnostic that names the exact platform target when a native command needs the binary. Bolt decoding clamps server-supplied sizes to what the buffer can hold and caps deframed messages, so a hostile Neo4j endpoint can't trigger an uncatchable allocator abort.
Also in this release
Copilot's skill installs to the repo-scoped .github/skills/ it actually reads; --platform typos exit non-zero; the benchmark workflow serializes its pushes and pins its tooling; and the docs site catches up — 25-language stat, a fresh docs version, and release notes for 1.0.9 and 1.0.10.