Skip to content

v0.3.0

Choose a tag to compare

@asm0dey asm0dey released this 11 Sep 11:42
· 114 commits to main since this release

graphdblite replaces grafeo, and the file lock is gone

Every command used to take an exclusive file lock, because grafeo lost concurrent writes in silence and let readers observe torn writes. graphdblite puts a graph-native layer over SQLite and holds both properties itself, so the lock and the filelock dependency are gone.

Measured unlocked, with grafeo as the control on the same machines:

grafeo graphdblite
6 processes × 20 writes, Linux 40/120 120/120
6 processes × 20 writes, macOS 60/120 120/120
8 processes × 200 writes 569/1600 1600/1600
readers vs a live writer, macOS 15 torn / 873 reads 0 torn / 11,956 reads

Both measurements are now selftest checks, so CI re-runs them on Linux, macOS and Windows on every push instead of trusting someone else's engine. The contention bound is 5s, measured rather than inherited: under 8 processes writing back-to-back, nothing waits past ~850 ms.

Upgrading

Nothing to do. A store written by 0.2.0 keeps graph.db as a directory the new engine cannot read, so the first command that records replays journal.jsonl into a new graph and deletes the old one — deleted because a 0.2.0 install would otherwise keep reading and writing it unseen, and safe because the journal it was rebuilt from is untouched. A replay that cannot read every entry keeps the old store and says so.

Do not leave a 0.2.0 install pointing at an upgraded store: it cannot read the new graph, and the SessionStart hook fails quietly by design, so sessions would simply stop being primed.

Breaking

export no longer writes a grafeo-server data directory, because there is no server to read it. It writes a complete store — graph plus journal — that --home can be pointed at directly. The read-only web UI on :7474 is gone.

Also in this release

  • Statusline badge. [PRECEDENT] renders while the graph is speaking in the current directory, off a marker the SessionStart hook drops. Chained into your own statusLine command; see the README.
  • The session brief no longer dies on a Mac. The hook hardcoded GNU timeout, which macOS does not ship, so the brief silently never ran there.
  • Four WHERE-after-OPTIONAL MATCH query bugs fixed — brief was listing superseded decisions. grafeo's non-conformance had been hiding them.

Full detail in ADR 0006.