cultmesh-rs: keep the session through an unreadable frame or refused delete; end at 8 in a row #43

Merged
libby merged 1 commit from libby/keep-session-invalid-cap into main 2026-11-08 09:36:56 +00:00
Member

Heimdall's parity ruling (2026-11-08) for cultmesh-rs: an undecodable frame is answered message_invalid and the session is kept; a refused DocumentDelete likewise. Abuse cap: MAX_CONSECUTIVE_REFUSED_FRAMES = 8 (pub const). 8 consecutive undecodable frames (any decoded frame resets) or 8 consecutive deletes (any decoded non-delete resets) end the session after the 8th is answered. Below the cap the refusal goes out as unreliable packets on the live session and the frame is acked at transport level as any other. poll_once still returns ApplicationRejected for each.

Not touched: the sink refusal and every other rejection (still end the session); no write is admitted or refused differently. The sink is the only gate in this server.

Tests: new an_unreadable_frame_is_refused_typed_and_the_session_kept_until_eight_in_a_row and a_refused_delete_keeps_the_session_until_eight_in_a_row (7 answered, valid frame resets, 7 more answered, 8th ends). Six hand mutants fail them under prlimit as=4GiB cpu=300: cap 7, cap 9 (both tests), undecodable counter never resets, delete counter never resets, delete never counts, cap removed. cargo test -j1 under ulimit -v 8GB passes.

🤖 Generated with Claude Code

Heimdall's parity ruling (2026-11-08) for cultmesh-rs: an undecodable frame is answered `message_invalid` and the session is kept; a refused `DocumentDelete` likewise. Abuse cap: `MAX_CONSECUTIVE_REFUSED_FRAMES = 8` (pub const). 8 consecutive undecodable frames (any decoded frame resets) or 8 consecutive deletes (any decoded non-delete resets) end the session after the 8th is answered. Below the cap the refusal goes out as unreliable packets on the live session and the frame is acked at transport level as any other. `poll_once` still returns `ApplicationRejected` for each. Not touched: the sink refusal and every other rejection (still end the session); no write is admitted or refused differently. The sink is the only gate in this server. Tests: new `an_unreadable_frame_is_refused_typed_and_the_session_kept_until_eight_in_a_row` and `a_refused_delete_keeps_the_session_until_eight_in_a_row` (7 answered, valid frame resets, 7 more answered, 8th ends). Six hand mutants fail them under prlimit as=4GiB cpu=300: cap 7, cap 9 (both tests), undecodable counter never resets, delete counter never resets, delete never counts, cap removed. `cargo test -j1` under ulimit -v 8GB passes. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
cultmesh-rs: keep the session through an unreadable frame or refused delete; end it at 8 in a row
Some checks failed
CultMesh QUIC native / Build win32-x64 (pull_request) Has been skipped
CultMesh QUIC native / Build linux-x64 (pull_request) Has been skipped
CultMesh QUIC native / Release native binaries (pull_request) Has been skipped
CultMesh portability and performance / ubuntu-latest reactive semantics and leases (pull_request) Failing after 3m28s
CultMesh QUIC native / Verify committed binaries match SHA256SUMS (pull_request) Successful in 56s
a0d9ed0cc5
Heimdall's parity ruling: the refusal is answered on the live session, and
MAX_CONSECUTIVE_REFUSED_FRAMES (8) consecutive undecodable frames (reset by
any decoded frame) or refused deletes (reset by any decoded non-delete) end
it. The sink gate is unchanged.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
libby merged commit 4828c41646 into main 2026-11-08 09:36:56 +00:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
GameCult/CultLib!43
No description provided.