I3222 — A follower whose frames are lost, delayed or reordered, or whose peer is partitioned, ends equal to a fresh snapshot
Add a fault-injection case over the live channel: a test-only frame-level WebSocket proxy drops, delays and reorders frames and partitions a mesh peer, then each follower's state is compared with a snapshot read afresh; no feature is added and the protocol is unchanged.
READY wave 0 · p2 · verification profile · parallel safe
Ready. Every dependency is done, so majordomus plan start I3222 will be accepted.
Objective
Add a fault-injection case over the live channel: a test-only frame-level WebSocket proxy drops, delays and reorders frames and partitions a mesh peer, then each follower's state is compared with a snapshot read afresh; no feature is added and the protocol is unchanged.
Why
The 2026-10-18 live-fabric design asked for chaos tests for replay, resync and partition before more surfaces depend on the channel. Proposed in ADR 0216 (Every live surface follows one channel with named follow streams, and nothing polls where a stream exists) (proposed; it carries no authority until the owner accepts it). Sources: chatgpt-majordomus:c294#7.
Current state
Verified on master 707a04c7ce8: apps/majordomus-cli/src/http/events.rs has replay and heartbeat tests for executions; nothing in test/, scripts/ or apps/majordomus-cli/tests injects faults. In flight, not on master: PR #1178's case 3046 and 5a's blackboard branch with stream.resync and cases 3381 and 3382, which cover stopping and restarting the server.
Desired state
One case holds convergence for every follow stream the server serves.
Scope
- apps/majordomus-cli/src/http/events.rs
- apps/majordomus-cli/src/http/ws.rs
Out of scope
- Changing the protocol
Dependencies
None. This issue is a root of the graph.
What waits on this
Acceptance criteria
- After every fault, the follower's state equals a fresh snapshot read. Receiving a resync frame is not enough
Validation
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --lib http::events
- cargo test --manifest-path apps/majordomus-cli/Cargo.toml --test cov_runtime_b_http_channel
Evidence required
- case_a_follower_converges_after_loss
Evidence
None recorded. Every token above needs a command or an artifact behind it before this issue can be completed; narrative is refused.
Timeline
- started
- —
- verified
- —
- completed
- —
Those three fields, the evidence above and the state of the dependencies are all the status is made of. There is no status field to disagree with them.
Canonical record: .ai/repo/project/issues/I3222.yaml. Read it back with majordomus plan show I3222.