c84c6e2382
Three sibling gaps in the WebSocket transport's conversation lifecycle: - #78429: _send_channel_subscription defaulted a zero last_ts to 'since ~ now', so the message that CREATED a new conversation (created_at fractionally before the subscription) was never delivered. A channel with no high-water mark now subscribes from the beginning with limit=_FETCH_LIMIT instead; seeded channels still resume from last_ts-1. - #93557: relays do not guarantee a kind-44100 membership event per new conversation, so WS-transport deployments never discovered DMs opened mid-session until a reconnect. The WS loop now runs the same _discover_dms sweep the poll transport uses, on the same cadence (poll_interval * _DM_DISCOVERY_EVERY), via a companion task that is cancelled with the connection. - #75107: _discover_dms only ever adopted DM-shaped conversations, so a real community channel the agent joined mid-run was never subscribed until restart. In watch-all mode (no explicit channels list) newly listed real channels are now adopted and seeded from their newest events (history predating the join is not replayed). Explicit watch lists stay authoritative.