The reconnect loop does not reproduce; log who falls behind

Measured against a session streaming 20 events a second. Reopening one with
an anchor 1,800 events back connects 87-119 events behind, under
CATCH_UP_LIMIT's 200 -- the restore is two requests now, the opening page
and one span covering the whole distance to the anchor, where the report
was written against a restore that took thirteen. Three provocations, no
repeat connection between them: that reopen, twenty seconds backgrounded
while 415 events were produced, and a reset forced by dropping the limit to
5, where the app cleared, refilled and carried on without reconnecting.

So the TODO entry goes. What stays is the instrument that answered it:
every SSE subscriber now logs at debug the cursor it arrived with and
whether it was continued or reset, since nothing else could say. The app
sees a window arrive and cannot tell how far it had fallen.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
irisandClaude Opus 5 committed 2026-09-04 14:01:01 -04:00
1 parent 45e631ab96
commit 74110b4d72
3 files changed
+31 -14

No files matched your search

-13
View File
@@ -16,19 +16,6 @@ one in place when it turns out to need a decision.
would show exactly as "sometimes". Confirming it means driving a real
stream-json session and sending it messages in both states.
## App — reconnect
- [ ] Restarting the app onto a session with a saved anchor, while a long
reply was streaming, left it reconnecting every 1.5s
(`RECONNECT_DELAY_MS`) with the spinner up until the server was
restarted. `events?after=N` more than `CATCH_UP_LIMIT` (200) behind
answers `reset` plus the newest 200 *raw* deltas -- a window starting
mid-message -- and the reset clears `items`, which is the state the
restore loop then pages against. **May already be fixed:** the
restore's one-event-per-request bug was part of what made it so
visible and has since been fixed, so the first thing to find out is
whether this survives that. Found 2026-09-03.
## Session settings
- [ ] Autocompact belongs in session settings; empty disables it, which is the