Versioned
Every state change is a commit. History is a first-class, queryable structure — not a scattering of device configs.
Architectural research project · v1.0.0 · Rust
RAHN makes network state deterministic, content-addressed, and verifiable: state is a value, changed only by explicit transitions, gated by a constitution of invariants, and executed simulation-first.
Simulation-only demo, byte-identical results on every machine — verified on Linux, Windows, and macOS CI.
The idea
Today, "the state of the network" is something you discover — by logging in, running show commands, and hoping. RAHN inverts that: state is a deterministic, content-addressed value you can hold, hash, branch, diff, and evolve deliberately.
Every state change is a commit. History is a first-class, queryable structure — not a scattering of device configs.
Observations and commits are linked by explicitly labeled causal edges with epistemic status — from temporal-correlation to verified.
A constitution of invariants gates every transition. What cannot be proven to hold does not commit — let alone execute.
Branch, diff, and merge with a fail-closed semantic merge: wrong merges are worse than rejected ones, so conflicts are explained, never silently resolved.
Can network state become a first-class computational object — versioned, causal, verifiable, replayable, and safely evolvable?
— the question RAHN exists to test
Non-negotiables
No nondeterministic iteration order, wall-clock logic, or hidden global state. Same inputs → byte-identical states, ids, and reports.
Committed state changes flow only through a closed vocabulary of operations. Nothing mutates a state in place, ever.
Invariants — from referential integrity to named connectivity — are checked before a transition can commit. Failures carry the violated invariant, the offending objects, and the producing transition.
Every plan is executed in simulation by default. The simulation backend never touches the host.
The execution path is structurally unreachable without a verification result, and real execution is opt-in against isolated Linux network namespaces only.
The system must remain correct, explainable, and reproducible without any model. Causal memory records relationships; it does not guess them.
How it works
Every change travels the same road — and the last step is behind a gate that cannot be bypassed.
Nodes, interfaces, and links form a network state — a canonical, content-addressed value with format v2.
Changes are explicit operations from a closed vocabulary — inspectable before anything happens.
The constitution of invariants must hold. rahn test turns the result into a CI-ready report with an exit-code contract.
Apply produces an execution plan, simulated by default against a backend that cannot touch the host.
Only --execute --yes-i-know, only against isolated Linux network namespaces, only after verification.
$ bash examples/demo/demo.sh
final ids (stable across runs on every machine):
main commit ad60e9186c674c46…
state fc9aac0400618034…
experiment commit 684a0103807763af…
state 5446796f93d189fc…
Honest boundaries
Research earns trust by stating its limits. RAHN's claims are claim-status-marked against a public limitations baseline.
The code
Object model: nodes, interfaces, links, network, state value.
Canonical serialization, state identity, transitions, commits, diff, history, graph queries, observations, causal records.
Content-addressed local persistence: objects, commits, refs, index.
Invariant engine, constitution parsing, fail-closed semantic merge.
Simulation-only execution planning. The default backend — never touches the host.
Opt-in isolated Linux namespace backend, behind a capability-negotiated trait.
Peer synchronization over content-addressed history.
The curated, semver-stable public API facade for external code.
The rahn binary and its argument parsing.
Eleven releases, one question
Deterministic state, canonical serialization, content-addressed identity, transitions, diff, branching, fail-closed merge.
Hardened engine, initial research corpus, CI for the core workspace.
Interfaces owned by nodes, graph queries, isolation constraints, canonical format v2 (ADR 0011).
Namespace execution backend with a structural host-safety boundary (ADR 0012).
Deterministic observation model with typed values and provenance (ADR 0013).
Causal anchors, status-labeled edges, incident query (ADR 0014).
Peer synchronization over content-addressed history (ADR 0015).
Backend abstraction with capability negotiation (ADR 0016).
rahn test: machine-readable verification for pipelines (ADR 0017).
Curated SDK facade and declared IR (ADR 0018).
Core model frozen for 1.x, canonical format v2 frozen, 19 ADRs (ADR 0019). Nothing post-v1.0 is scheduled.
Questions
That is the point: RAHN asks to be checked, not trusted.