Updated 2026-10-04
Alpha status & evidence
Current Basic/Multilevel service contracts, failed qualification gates, historical evidence boundaries, and next steps.
Choose the right path
Service → Durable → Matcher is the local integration path. The only matching modes are paper-derived basic (default) and multilevel; their mode identity is persisted and recovery replays the recorded operation stream through that mode. Packed supplies compact graph storage only, not a third matching algorithm. Both modes maintain maximal, not maximum, matching. This is an alpha/research preview: neither mode is deployment-qualified.
Latest hard-resource gate
On hosted Linux with a 512 MiB address-space limit and dedicated 192 MiB ext4 volume, the Basic run completed 1,000,000 durable updates in 110.443 seconds (~9,054/s), 14,971 partner queries, backup, and memory-pressure recovery. It then failed during disk-pressure recovery: replay ran out of memory building System indexes. The Multilevel run failed earlier, during initial matching refresh. The 10k/s goal is not achieved, and neither result passes the full gate. Inspect the CI run.
Executable first use
Install from the repository on GIL-enabled CPython 3.10+ with a C++17 compiler/development headers for Packed. The storage build is platform-specific; there are no third-party runtime Python libraries. Use a private local POSIX directory. New Service stores start with a degree-four ring.
from pathlib import Path
from tempfile import TemporaryDirectory
from axiom.durable import Request
from axiom.service import Service
with TemporaryDirectory() as directory:
path = Path(directory) / "graph.db"
with Service(path, n=128) as graph:
outcome = graph.submit(Request(1, "delete", 0, 1)).result(5)
assert outcome.changed
assert graph.partner(0).result(5) == (outcome.version, None)
assert graph.check().result(5)
with Service(path) as recovered:
assert recovered.submit(Request(1, "delete", 0, 1)).result(5) == outcomeCommit, queries and failure
- SQLite FULL-WAL operation history is durable authority; in-memory matching state is maintained by the selected paper mode. Accepted receipts are not durable acknowledgment; successful
result()follows commit and publication. - Coordinate ordered request IDs with admission across threads. Busy means no admission; bounded retries reuse the original ID and payload. Timeout does not cancel accepted work. Retired retry IDs reject explicitly.
- Partner queries return coupled committed versions.
read_snapshot()provides bounded version-coherent multi-query results; it is not long-lived MVCC or historical state retention. - Queue, paper journals, graph allocations, backups and history have explicit bounds. Those do not impose aggregate RSS/page-cache or whole-filesystem quotas.
- Backup publishes a fresh, self-contained immutable image. Unused pages are compacted privately; never copy only the live main database or delete the source/master to hide insufficient restore headroom.
Historical million-vertex stages
These reports were measured on the removed native matching Engine. They are retained as historical project evidence only and do not qualify Basic or Multilevel.
Apple M3 Pro, 18 GiB RAM, SSD/APFS, macOS 26.7.1, CPython 3.14.8 and SQLite 3.53.4. Rate includes final acknowledgment drain; every query and exact recovery certificate passed. Setup, retries, misses, drops and rejections do not inflate real updates. Numbers below are read directly from retained reports at build time.
| Stage | Real durable updates/s | Queries | Raw evidence |
|---|---|---|---|
| 30-minute full-ring | 10,998 | 17,996,758 | Report & provenance |
| 10-minute growth/drain | 10,998 | 5,999,193 | Report & provenance |
| 3-minute degree-65,536 hub | 10,985 | 1,797,891 | Report & provenance |
| 3-minute burst windows | 10,611 | 1,799,880 | Report & provenance |
| 3-minute burst plus indexed hub | 10,431 | 1,799,808 | Report & provenance |
Growth/drain uses an explicitly selected MallocLargeCache=0 macOS launch policy; measured owner peak is about 208 MB rather than 913 MB at default launch. Hub initial average degree is 4.131064, not exactly four. Burst windows reject offers explicitly. Degree-64 measured throughput is 6,640/s and fails the 10k target. None of these is a universal or loss-free rate promise.
Historical native-engine reports
The following reports were produced by the removed native matching engine. They are retained for provenance only and are not evidence for Basic or Multilevel.
The historical combined burst/hub result delivered 10,431 real durable changes/s, with 59 checkpoints and exact recovery, while rejecting 56,554 offers; twelve accepted updates took at least one second from scheduled offer to acknowledgment. Do not interpret those rates as current capacity.
The historical Linux changing-density drill completed 1,040,000 edits and resource exhaustion under a 512 MiB address-space cap and a dedicated 192 MiB ext4 image. It does not qualify current paper-mode recovery or hardware power-loss behavior.
Active and deferred scope
Active: memory hardening, end-to-end recovery at scale, repeatable skew/adversarial qualification, deployment sizing/monitoring, and independent release gates for both modes. Previous native-engine performance evidence is not transferable.
Deferred: physical power-loss qualification for this version. Billion-vertex capacity is unproven, not an accepted limit or guarantee. Axiom is a local component, not turnkey distributed/network infrastructure.