Repository navigation
v0.3.0
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 ownstatusLinecommand; 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 MATCHquery bugs fixed —briefwas listing superseded decisions. grafeo's non-conformance had been hiding them.
Full detail in ADR 0006.