v4.22.0

Osmantic/ODSv4.22.0Sep 30, 2026by swilly22

Upgrading?

AI Summary

A major feature release for the C engine introducing advanced pathfinding algorithms and native CCH path indexes to eliminate the need for external libraries.

Key Highlights

  • Implemented A* search with admissible heuristics optimized for time-weighted road networks.
  • Added Yen's k-shortest paths algorithm with goal-directed spur search capabilities.
  • Introduced CCH (Contraction Hierarchies) path indexes supporting bidirectional Dijkstra queries.
  • Upgraded RDB encoding to v20 to support the new CCH serialization format.

New Features

  • A* shortest paths procedure with heuristicScale parameter.
  • Yen's k-shortest paths procedure.
  • All-shortest-paths and k-shortest-paths procedures.
  • CCH index creation and querying via `db.idx.cch.query`.
  • Incremental maintenance for CCH indexes.

Full Release Notes

✨ New features

Advanced path-finding algorithms (#2630, #2720, #2656, #2732)
- A* search with an admissible haversine heuristic + optional heuristicScale so it stays optimal for non-distance weights like travel time (heuristicScale = 1/max_speed; 0 = Dijkstra). Fixes ~1.6× suboptimal routes on time-weighted road networks.
- Yen's k-shortest paths with goal-directed spur search.
- All-shortest-paths and k-shortest-paths procedures.
- Optimality/cost-model fixes: correct pathCost/hop-count accounting, cost-aware k-shortest selection, redundant destination-lookup skip in landmark mode.

CCH path index (#2680, #2721, #2865)
- DDL: CREATE CCH INDEX FOR ()-[e:A|B]->() ON (e.w) / DROP CCH INDEX …. Multi-reltype supported; hierarchy stays internal (no shortcut edges / rank props in your graph).
- Query: db.idx.cch.query — rank-pruned bidirectional Dijkstra.
- Incremental maintenance: commit-coalesced dirty tracking (CLEAN < RECUSTOMIZE < REBUILD); weight/edge changes recustomize scoped, topology changes rebuild.
- Persistence: full RDB serialization, restored on load.

🐛 Bug fixes

- Crash on MERGE preceded by an erroring clause (#3116).
- Crash when a clause errors mid plan-build (#3139).
- Replica SIGSEGV applying an UPDATE_EDGE/UPDATE_NODE effect naming a freed id (id divergence) (#2581).

🔄 Replication & persistence

- Remove full-sync requirement from the decoder; maintain transpose in Delta_set (#2584).
- Export Graph_EncodingVersion / Graph_GetDecoder (#2552).
- RDB encoding v19 → v20 (adds CCH serialization).

Related Repositories