graphrefly-core 0.0.3

GraphReFly handle-protocol core dispatcher
Documentation

GraphReFly handle-protocol core dispatcher.

This crate is the heart of the protocol: dispatcher, message tiers, batch coalescing, wave engine, dep tracking, equals-substitution, first-run gate, PAUSE/RESUME with lockIds, INVALIDATE broadcast, versioning lifecycle, atomic dep mutation (set_deps).

It operates entirely on opaque HandleId integers — user values T never enter the core. Per-language bindings (napi-rs for JavaScript, pyo3 for Python, wasm-bindgen for WASM) hold the value-to-handle registry. Equals-substitution under EqualsMode::Identity is a u64 compare with zero FFI; user-fn invocation is the only mandatory boundary crossing per fn fire.

Status (2026-05-03)

M1 first slice — warm-up modules ([message], [handle], [clock], [boundary]). The dispatcher itself, batch engine, PAUSE/RESUME, and set_deps follow incrementally. See ~/src/graphrefly-ts/docs/implementation-plan.md Phase 13.7 for the full slice plan; reference impl at ~/src/graphrefly-ts/src/__experiments__/handle-core/.

Safety

No unsafe is permitted in this crate or anywhere in the workspace. Enforced by #![forbid(unsafe_code)] at the root. See CLAUDE.md Rust invariant 1.