Repository navigation
Description
Follow-up to PR #2214 / issue #179 (queue task 2970).
event_store::sync::Outcome now carries voided, mapped from the range session's Tally (event_store/sync.rs, Tally::add → Ingest::Voided). Ingest::Voided is produced when an arrival is stored but not applied (event_store/ingest.rs, Staged::finish: is_applied == false).
Nothing tests that path end to end:
- The range-session test that was meant to (
test_a_range_session_counts_voided_events, commit2316d85fon id(sync): split serve range sessions onto /id-range-sync/1 (#179) #2214) actually built the fork into the receiving store before the session, so its arrivals were refused as frozen (db.voided = 0,db.refused = 2). That test now pins the frozen shape under its real name,test_a_range_session_counts_frozen_arrivals_as_refused. - No test anywhere asserts an
Ingest::Voidedoutcome today (grep 'Ingest::Voided'finds only the label arms inevent_store/sync.rsandlog_sync.rs).
What is needed: a shape where an event is stored without being applied and reported as Voided — plausibly an event released from the waiting pool by a fork decided in the same batch (Staged::Stored → finish) — driven through event_store::sync and asserted on Outcome::voided, plus the same for log_sync's tally. If no such shape is reachable, the voided field is dead and should say so in its doc comment instead.
Acceptance criteria
- A range-session test drives an arrival that is stored but not applied through a real range session and asserts the session tally /
Outcome::voidedreflects it (a voided count greater than zero), distinct from the frozen-refusal shape the current mis-built test pins. - The same voided accounting is covered for the
log_synctally, or the gap is explicitly documented in the test/PR. - If no stored-but-not-applied shape is reachable through a range session, the
voidedfield is documented as dead in its doc comment instead of gaining a forced test.
Activity
developing-today commentedon Oct 29, 2026
CODE-1232
dezren39 commentedon Oct 29, 2026
Intake review
db.voided = 0, db.refused = 2) and the test pins the wrong shape under a voided name. The fix is a test-construction fix, not a product-code change, unless the reachability question at the end of the body answers "unreachable".Staged::finish), assertOutcome::voided/db.voided> 0 withrefusedunchanged; mirror for thelog_synctally.dezren39 commentedon Nov 3, 2026
🤖 Agent note · triaged
Ingest::Voideddisposition through a range session #2414 is still live at current main, its blocker has landed, and the test gap is exactly as filed. Asmall_fix(test-only) follow-up task is enqueued from this triage.voidedplumbing is on main:Tally::addmapsIngest::Voidedinpkgs/id/src/event_store/sync.rs(line 152, surfaced asOutcome::voidedat line 702) and inpkgs/id/src/log_sync.rs(line 166, surfaced at line 398).event_store/sync.rsthe only range-session voided assertion isdb.voided == 0insidetest_a_range_session_counts_frozen_arrivals_as_refused(line 1234) — the frozen/refused shape, not a stored-but-not-applied arrival. No range-session test asserts a voided count above zero, andlog_sync.rshas no test-side voided assertion at all (only the tally arm and the Outcome field). Direct-ingest Voided assertions exist (pkgs/id/tests/production_ingest.rs,pkgs/id/tests/crash/store.rs) but neither drives a range session, so they do not close this issue.Staged::Stored→Staged::finishwithis_applied == false) — drive it through a realevent_store::syncrange session, and assertOutcome::voided> 0 withrefusedunchanged; mirror the same accounting assertion for thelog_synctally. Assert the tally fields explicitly so the test cannot pin the neighbouring frozen shape under the voided name (the original failure). If no such shape is reachable through a range session, document thevoidedfield as dead in its doc comment instead of forcing a test, per the issue's third acceptance term.developing-today commentedon Nov 3, 2026
agent-note:v1
state: triaged (coverage pass)
Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
Found via: coverage pass 2026-11-03
dezren39 commentedon Nov 3, 2026
🤖 Agent note · picked up
Ingest::Voideddisposition through a range session #2414: add a range-session test driving anIngest::Voideddisposition (stored-but-not-applied arrival) assertingOutcome::voided > 0with refused unchanged, plus the mirrored log_sync tally coverage or a documented gap. Fresh revalidation: issue id(event_store): no test reaches anIngest::Voideddisposition through a range session #2414 OPEN, no hard-stop labels, no competing PR (PR id(sync): split serve range sessions onto /id-range-sync/1 (#179) #2214, the named blocker, is MERGED).queue/8530-2414-voided-range-test.dezren39 commentedon Nov 3, 2026
🤖 Agent note · done — PR opened
queue/8530-2414-voided-range-test, head 3d35eec, MERGEABLE, test-only, 201 insertions inpkgs/id/src/event_store/sync.rs+pkgs/id/src/log_sync.rs).Ingest::Voideddisposition through a real range session in both tallies. Shape: both stores hold a group create (A/B/C managers) and D's group operation adding E — stored but voided, since D is not a member. Only the sender holds D's content event naming the voided operation inafter; by resolve rule 3 it is stored without applying at the receiver:received == 1, voided == 1, accepted == 0, refused == 0, distinct from the frozen-refusal shape. The log_sync mirror runs the same shape through a LogSync-protocol range session (LogAndRange).test_a_range_session_counts_a_stored_but_unapplied_arrival_as_voidedtests pass;event_store::sync::suite 22 passed / 0 failed;log_sync::suite 22 passed / 0 failed;git diff --checkclean; no fmt diff in added code.