Problem
Connection::fail(), when called while a reply is still unreleased, pushes no Failed event. The pending operation's token simply vanishes with no signal that anything went wrong.
Why it matters
A host that relies on the crate's own event stream to settle every outstanding operation (which is the documented model — every accepted operation should get exactly one settlement) cannot rely on that guarantee here: this specific failure path breaks it silently, and Perry's P7 lane notes a host "cannot rely on events alone to settle everything" as a result.
What would fix it
Connection::fail() should push a Failed event for the unreleased reply's token in this path too, so every failure path — not just the ones that happen to have no reply pending — produces a visible settlement.
Problem
Connection::fail(), when called while a reply is still unreleased, pushes noFailedevent. The pending operation's token simply vanishes with no signal that anything went wrong.Why it matters
A host that relies on the crate's own event stream to settle every outstanding operation (which is the documented model — every accepted operation should get exactly one settlement) cannot rely on that guarantee here: this specific failure path breaks it silently, and Perry's P7 lane notes a host "cannot rely on events alone to settle everything" as a result.
What would fix it
Connection::fail()should push aFailedevent for the unreleased reply's token in this path too, so every failure path — not just the ones that happen to have no reply pending — produces a visible settlement.