Repository navigation
v0.23.0+ciris.1 — readable saturation, and a signal before the cliff
Completes leviculum#60 from the live-canonical incident (CIRISEdge#508). Property 1 — the per-drop WARN flood — shipped in v0.22.0; this is the rest.
Three bounded structures shared one failure shape: invisible until exceeded, so "healthy" and "one event from lossy" looked identical.
Pre-threshold signal
The control plane now warns at 80% occupancy, once per saturation episode, re-arming only after it drains back below half. Before this, the first signal an operator got was the first drop — by which point the loss had already happened.
Readable at runtime
ReticulumNode::plane_stats() returns PlaneStats: depth, capacity and cumulative drops for both planes, plus live-link and recent-outcome occupancy against their limits. A dashboard can plot headroom instead of waiting for the cliff.
Cheap enough to poll on an interval — two atomic loads, two channel-permit reads, one brief registry lock. The node already held the channel senders, so occupancy needed no new plumbing; only the cumulative drop counters are new (one relaxed fetch_add on a path that was already dropping).
Declared policy, in one place
PlaneStats' doc carries the table of what each limit does at saturation, previously scattered across four comments in three files:
| structure | at saturation |
|---|---|
| control plane | drop newest, count it, deliver a ControlPlaneOverflow marker carrying the total |
| data plane | drop newest, silently — backpressure is the point |
| live-link mirror | nothing is dropped; the envelope is an alarm threshold only (leviculum#56) |
| recent-outcomes ring | wrap oldest-first; a late await_* for an aged-out outcome parks rather than resolving, bounded by the caller's timeout |
The end-to-end test asserts the gauges track the real lifecycle — one link established shows on both sides, occupancy returns to zero on close — which is leviculum#56's mirror invariant observed from outside the crate.
Gate: core 1,649 / std 587 / destination-lifecycle 4/4 / scoped-transit 6/6 / request-response 3/3; clippy -D warnings; fmt; cargo doc clean; full CI green.