- popstate handler now refuses to switch sessions mid-stream (S.busy guard) Mirrors the same guard the cross-tab storage handler had. PR #1392 added the popstate listener but missed this. Without it, browser Back during a live stream silently yanks the user out of their turn. (Opus pre-release advisor finding) - CHANGELOG entry for v0.50.254 (4 PRs + 1 Opus follow-up) 1 regression test in test_v050254_opus_followups.py.
36 lines
1.6 KiB
Python
36 lines
1.6 KiB
Python
"""Regression tests for v0.50.254 Opus pre-release follow-ups.
|
|
|
|
Apr 2026 v0.50.254 batch added per-tab session URL anchors (#1392). Opus advisor
|
|
flagged that the new popstate handler was missing the same `S.busy` guard the
|
|
storage-event handler had — a user mid-stream who hits browser Back would lose
|
|
their active turn the same way cross-tab churn used to do. Adds the guard.
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from pathlib import Path
|
|
|
|
REPO = Path(__file__).resolve().parents[1]
|
|
|
|
|
|
def test_popstate_handler_guards_busy_state():
|
|
"""Browser back/forward must not switch sessions while a stream is live.
|
|
|
|
The new `popstate` handler in `static/sessions.js` (added by #1392) has to
|
|
mirror the `S.busy` guard that the cross-tab storage handler had. Otherwise
|
|
a user mid-stream who absent-mindedly hits Back will get yanked out of their
|
|
active turn — exactly the regression the storage-event guard was added to
|
|
prevent.
|
|
"""
|
|
src = (REPO / "static" / "sessions.js").read_text(encoding="utf-8")
|
|
popstate_idx = src.find("addEventListener('popstate'")
|
|
assert popstate_idx != -1, "popstate handler missing from sessions.js"
|
|
# Look at the next ~600 chars of the handler body.
|
|
body = src[popstate_idx : popstate_idx + 600]
|
|
assert "S.busy" in body, (
|
|
"popstate handler must check S.busy before calling loadSession() — "
|
|
"otherwise mid-stream users lose their turn when they hit browser Back. "
|
|
"Mirror the same guard the cross-tab storage handler had."
|
|
)
|
|
assert "loadSession" in body, "popstate handler must call loadSession when allowed"
|