Skip to content

v0.23.0+ciris.1 — readable saturation, and a signal before the cliff

Choose a tag to compare

@emooreatx emooreatx released this 20 Aug 00:44
· 852 commits to main since this release

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.