Skip to main content

astria 1.0.11: the hardening release — safe migrations, an installer that can't wipe your configs

· 2 min read

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/graphify entries, a user's own astria hook-guard hook, and unmanaged ## astria markdown sections all survive, and ## astria-guide is 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.