Conversation
253f1d3 to
e5571c2
Compare
🔬 Gate certification — GREEN ✅ (sidebar recency refresh after missed SSE events)Certified head: What I ran (rebased worktree
|
| Gate | Result |
|---|---|
| Rebase onto current master | ✅ git apply clean |
| Codex (reproduce) | SAFE TO SHIP — 0 findings |
| Full pytest suite | ✅ 12000 passed, 0 failed |
| refresh/poll/pwa-focus tests | ✅ 31 passed |
Findings
✅ Correct missed-events recovery + coalescing: _refreshSessionListAfterSidebarResume(reason) forces refreshSessionList(reason, {force:true}) on sidebar resume (after an SSE close/reconnect or backgrounded-tab resume), so the recency ordering isn't left stale (#5551). A pending-request coalescer (_sessionListRefreshPendingRequest + _mergeSessionListRefreshOptions folding refreshActive) prevents overlapping refreshes stampeding, and re-schedules a pending request after the in-flight one completes (so a needed refresh isn't dropped); _sessionEventsNeedsRefreshOnOpen is cleared when a direct resume satisfies the pending onopen catch-up (no double-refresh). Codex confirmed no dropped refresh, no stampede/infinite reschedule, no fight with the periodic poll, and no regression to #3916 (external-refresh-poll) or #4151 (pwa-focus-sse) — both touched tests pass. 31 targeted + full suite green (0 failures).
Recommendation to the next agent
Ready to merge — use branch gate-rebase/5562-sidebar-recency-refresh (sha:9df45cc9), NOT the PR's stale head e5571c23. A solid existing-flow reliability fix (sidebar recency recovers after a missed-events gap, with careful refresh-coalescing that neither drops a needed refresh nor stampedes), Codex SAFE + 31 targeted tests + full suite green (0 failures). Frontend logic — no visible-design change (just correct recency ordering after reconnect). concept 4/5 (real #5551 reliability fix). Author @rodboev (T1). crit=3.
Gate-certifier layer (warm-up → gate → release). I do not merge/tag/deploy. Rebased onto current master; verified the resume-refresh + coalescer preserves needed refreshes (re-schedules pending after in-flight, folds refreshActive), no stampede/loop, no poll fight, #3916/#4151 intact, Codex SAFE + 31 targeted + full suite green (0 failed). Cert valid for sha:9df45cc9.
release #5562: refresh sidebar recency after missed session events
|
Shipped in v0.51.866 — thanks @rodboev! 🎉 Your sidebar recency fix (#5551) is live. A conversation reactivated from another device/tab while your current tab is backgrounded now bumps to the top / into "Today" on its own — no manual refresh needed. Root cause was the session-list refresh coalescing preserving only the refresh reason and dropping its options, so a Gate (all green):
Merged via release PR #5591 with your authorship preserved ( |
…vents + CHANGELOG
Thinking Path
/api/sessionsreturns fresh timestamps.What Changed
static/sessions.js: force the sidebar list refresh aftersessions_changed, focus, visibility, and session-events reconnect recovery, and mark intentional session-events closes so the next open performs catch-up.tests/test_webui_external_refresh_frontend.py: add regression coverage for hidden session-event and resume sidebar refresh recovery, plus the sidebar-only helper contract.tests/test_issue3916_external_refresh_poll.py: keep the session-events active-refresh contract pinned while separating sidebar force from transcript refresh.tests/test_issue4151_pwa_focus_sse.py: preserve the global sidebar stream focus boundary and per-session stream exclusion.Why It Matters
When a mobile or second client updates an older conversation, the desktop sidebar should move that existing row to the top and into Today without needing a manual reload. This keeps the live session list consistent with the authoritative session metadata while preserving the connection-pool safeguards for unfocused PWA windows.
Verification
pytest tests/test_webui_external_refresh_frontend.py -v --timeout=60pytest tests/test_issue3916_external_refresh_poll.py -v --timeout=60pytest tests/test_issue4151_pwa_focus_sse.py -v --timeout=60npx eslint --no-config-lookup -c eslint.runtime-guard.config.mjs "static/**/*.js"Full-suite CI context, not a required local check:
pytest tests/ -v --timeout=60.Upstream
Closes #5551.
Model Used
GPT 5.5 via Codex CLI