fix(managed): bound opening receiver drains #46

Merged
Lochnair merged 2 commits from fix/managed-opening-drain into main 2026-08-04 07:39:23 +00:00
Lochnair commented 2026-08-04 07:33:13 +00:00 (Migrated from github.com)

Summary

Bound managed opening receiver-drain generations and classify opening deadline
overflow as invalid configuration.

Bounded receiver draining

Each outstanding generation now has one fixed 60 ms deadline. Natural empty
receives remain preferred, while scheduler-owned forced completion guarantees
progress under continuous socket traffic. Joined targets share the generation
and deadline.

Active pacing behavior

New active probes are suppressed while a receiver drain is outstanding.
Existing receives, timeouts, final draining, peer close, updates, and
cancellation continue. Pacing resumes on the existing absolute cadence and
skips missed slots without catch-up bursts.

Failure classification

ClientError::DurationOverflow during managed opening is classified as
InvalidConfiguration. Runtime classification remains unchanged.

Testing

Added deterministic drain-state, forced-completion, stale-generation,
continuous-traffic, shared-generation, scheduler-wakeup, packet-race,
active-reply/timeout, final-timeout, and overflow regressions. Full workspace,
no-default client, Clippy, protocol, repeated liveness, detached-commit, and
forbidden-scope checks pass.

## Summary Bound managed opening receiver-drain generations and classify opening deadline overflow as invalid configuration. ## Bounded receiver draining Each outstanding generation now has one fixed 60 ms deadline. Natural empty receives remain preferred, while scheduler-owned forced completion guarantees progress under continuous socket traffic. Joined targets share the generation and deadline. ## Active pacing behavior New active probes are suppressed while a receiver drain is outstanding. Existing receives, timeouts, final draining, peer close, updates, and cancellation continue. Pacing resumes on the existing absolute cadence and skips missed slots without catch-up bursts. ## Failure classification `ClientError::DurationOverflow` during managed opening is classified as `InvalidConfiguration`. Runtime classification remains unchanged. ## Testing Added deterministic drain-state, forced-completion, stale-generation, continuous-traffic, shared-generation, scheduler-wakeup, packet-race, active-reply/timeout, final-timeout, and overflow regressions. Full workspace, no-default client, Clippy, protocol, repeated liveness, detached-commit, and forbidden-scope checks pass.
Sign in to join this conversation.