Skip to content

Quality gate

CI runs pytest on every pull request (.github/workflows/ci.yml): Python 3.10 to 3.14 on Linux, and Python 3.13 on macOS and Windows. The crash tests below run on Linux and macOS; their harness needs SIGKILL, which Windows lacks.

Relationship property filters in MATCH (inline maps and WHERE) must be honored. Delete-by-filter (DELETE / DETACH DELETE scoped by node or relationship properties) must touch only the matching records. The regression tests are tests/test_rel_property_filter.py, collected by the normal pytest run. They cover two groups of edges, a missing group, anonymous maps, OPTIONAL MATCH, MERGE, relationship DELETE, and node DETACH DELETE / DELETE.

A crash loses at most the in-flight transaction: every committed transaction is fully present after reopen, and the in-flight one is entirely present or entirely absent. A one-record autocommit fsyncs that line and does not write a separate commit record. A torn final line in a shard or tombstone file is skipped (and repaired only in the writer's own files) and is not returned as a committed record. The tests are tests/test_crash_durability.py.

Several writers (per-writer layout)

scripts/bench_writers.py writes 20,000 nodes and edits each twice (60,000 versions), spread round-robin and at random over 1, 2 or 4 writers in one folder, then opens it from a fresh app-data directory. Single run on an 8-vCPU Linux VM (shared with other jobs, so expect some noise), Python 3.13; open is the best of 3, queries the best of 5.

Writers Open MATCH … WHERE n.i = … get_node Files Size
1 2.55 s 128 ms 2.8 ms 259 12.4 MB
2 2.91 s 115 ms 3.4 ms 516 12.4 MB
4 2.97 s 112 ms 3.7 ms 1,030 12.4 MB

Size depends on the number of versions, not on the number of writers. The file count grows with writers × shards (up to 256 per writer per directory), and open time grows with the number of files (+14% at 2 writers, +16% at 4). A device that only reads adds no files.