f834835b8b60219bb5fbdf16838b7cbbf067e15e
The WS-01 idle timer reset on WS message arrival, so the forever-dribble stall (declare a chunk, deliver its payload one byte per message) reset the deadline forever while the demux stayed parked on the partial chunk; conversely the reset-on-message rule was the only thing slow-but-alive sessions survived on. Semantics: the deadline now resets on demux progress — bytes actually forwarded into read_tx that complete inbound chunks (the frames the demux routes), tracked byte-for-byte in line with alkcall's parse walk (8-byte header -> payload skip). Message arrival without a completed chunk resets nothing, so the dribble hits the deadline; every completed chunk (even one per message, slowly) re-arms the window. Tests (tungstenite path): the forever-dribble eviction with 1001 despite arriving messages; a productive-progress session that survives across many windows; the knob-disabled (None) arm; the stall and text/cap arms unchanged.
Languages
Rust
98.6%
Python
1.3%
Shell
0.1%