feat: add websocket replay cursors - #214
Conversation
|
Release-manager review note for PR #214: Classification: needs-fix before this can be considered for landing. Current blocker after #212 landed:
Required fix:
No merge attempted for #214 in this pass. |
|
Review-manager classification: This PR currently cannot be merge-tested over
I stopped at the conflict gate and did not run local behavior gates on a hand-resolved tree. Please rebase or merge current git diff --check
PYTHONPATH=. uv run --no-project --with pytest --with pytest-asyncio --with pytest-aiohttp --with pyserial-asyncio --with aiosqlite pytest tests/test_websocket.py -q
PYTHONPATH=. uv run --no-project --with pytest --with pytest-asyncio --with pytest-aiohttp --with pyserial-asyncio --with aiosqlite pytest tests/ -qAfter that, the release lane can do a normal privacy/replay-cursor review. Until the conflicts are resolved, this remains |
|
Release review: needs-fix. This draft is currently |
|
Release-captain classification: needs-fix. This PR is now |
|
Release lane update: needs-human. This change affects a sensitive security/privacy, production-deployment, modem/SIM, audio/hardware, or public realtime product boundary. It will not be autonomously merged under this lane. Please obtain an explicit Korgo decision on the intended policy/scope and, where applicable, rebase on current |
|
Release review: needs-fix. This PR is now |
|
Release review: needs-fix. GitHub currently reports this branch |
|
Release review classification: needs-fix. GitHub now reports this branch |
|
Release-lane classification: needs-human. Replay/cursor semantics affect authenticated realtime data retention, reconnect privacy, and externally visible API behavior. This old head needs an explicit product/security decision before any rebase or release review. No merge action taken in this lane. |
|
Release-lane classification: needs human decision. This introduces or documents a material product/operational behavior. It requires Korgo's decision on public semantics, retention/operations expectations, and rollout scope before an autonomous merge; local test success alone is not authorization to land it. |
|
Release classification: needs-human. This is a material product/API/data-lifecycle feature rather than a narrow corrective maintenance patch. It needs Korgo’s decision on product scope, compatibility, and operational/privacy semantics before autonomous landing. Keep it draft; after a decision, rebase/repackage over current |
|
Release review: needs-human. This PR is |
Summary
GET /ws?since=<cursor>with monotonicidfields, replay gap notices for too-old cursors, and invalid cursor rejection before WebSocket upgrade.serialize_event()privacy boundary, add cleanup for app-level event recorder subscriptions, and document the hello cursor/replay window.Tests
git diff --checkPYTHONPATH=. uv run --no-project --with pytest --with pytest-asyncio --with pytest-aiohttp --with pyserial-asyncio --with aiosqlite pytest tests/test_websocket.py -qPYTHONPATH=. uv run --no-project --with pytest --with pytest-asyncio --with pytest-aiohttp --with pyserial-asyncio --with aiosqlite pytest tests/test_packaging_metadata.py tests/test_http_api_validation.py -qPYTHONPATH=. uv run --no-project --with pytest --with pytest-asyncio --with pytest-aiohttp --with pyserial-asyncio --with aiosqlite pytest tests/ -qRisks / notes
main, so this PR preserves unfiltered behavior and can be extended to filter replay once Add WebSocket event filters for focused realtime subscribers #205 lands.Closes #213