The first durable delete window (single-node), beside the inline form:
- sweep_window branches on the delete window's host — the kv-engine
enum (KvEngine::Sqlite -> durable; KvEngine::Mem -> inline body,
extracted verbatim so the wave-2 mem/local suites stay green
unchanged)
- the durable form, per sweep under the lease and after the shared
protect consult: window_take(now) executes the overdue set with
execution-time re-arbitration through the same arbitrated_delete
path (consult_protect = false — the sweep's protect consult covers
its execution phase; vanished candidates settle into the cancelled
count), then marks unchanged, then stages the candidate-dead set at
visible_after = mark_end + window (the constructor-tunable delay;
ZERO = execute-on-next-sweep)
- report counts exact relative to the schedule (staged-this-sweep vs
executed-this-sweep); aborts execute nothing, stage nothing, delete
nothing
- unit tests: two-sweep exact-count shapes at delay 0, future-delay
staging with idempotent re-stage, the race across the delay (put
during the window survives; the unpinned twin deletes), the
vanished-candidate form, and the three abort shapes on sqlite
Verification: cargo test (default 69 lib tests), --all-features (124),
--no-default-features --features mem (101), clippy -D warnings
(default and --all-features), cargo fmt --check — all green.