Claude 1035fd179f Refactor fanout to per-connection tasks with debouncing and reconnection grace
- Add RenderTrigger enum to connection.rs (avoids circular imports)
- Replace ConnectionState.sse_sender with trigger_tx + pipe_tx channels
- Add get_trigger_sender and get_pipe_sender to ConnectionManager
- Extract render_and_send helper to eliminate duplicated render/SSE logic
- Implement connection_task: long-lived per-connection coroutine that owns
  the SSE pipe, debounces render triggers (2ms), and survives disconnects for
  a 30s grace period to allow clean reconnection
- Update sse_handler: spawns connection_task on fresh connect, hands new SSE
  pipe to existing task on reconnect; removes cleanup-on-disconnect spawn
- Update spawn_fanout: now a pure router — sends RenderTrigger::Invalidated
  to each subscribed connection's task; no render logic remains in fanout
- Bump broadcast channel capacity from 256 to 16384 in Store::new
- Merge brotli compression branch (config hot-reload, BrotliBody middleware)

https://claude.ai/code/session_01QiTaFtwXETxJDk79XcgfrN
2026-03-14 11:09:49 +00:00
2026-03-05 12:38:22 +01:00
2026-03-05 12:38:22 +01:00
2026-03-05 12:38:22 +01:00
2026-03-10 23:05:49 +01:00
S
Description
No description provided
MIT
150 KiB
Languages
Rust 99.7%
Nix 0.3%