Skip to content

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

Part of every-surface-follows-what-changed — Every surface follows what changed in the repository by push, and a surface that does not says so.

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.

Searches the titles and descriptions of every page this site publishes.