Desktop Back rapid double-click defeats pushState-sentinel trap (#109 regression) #144

Closed
opened 2026-06-24 00:55:46 +02:00 by bosun · 0 comments
Owner

Behavior (operator playtest 2026-06-24 against v1.0.0)

"Mobile seems to work fine; on desktop a quick doubleclick / multiclick on the back button navigated the browser back to the start page."

REGRESSION on #109 partial coverage: single Back press is correctly trapped (per-design globally inert), but rapid double-click / multi-click navigates the browser back to the page-load entry point.

Severity: MED — known-design gap surfaced

#109's pushState-sentinel trap re-pushes on popstate, but rapid Back-presses can pop the sentinel BEFORE the popstate handler runs the re-push. The race window allows the second Back to navigate the underlying history-entry (page-load).

Likely root cause area

main.ts popstate handler is async-relative to browser's history-navigation. Browser fires popstate AFTER history changes; if a second Back fires during the popstate handler's re-push window, the second pop sees no sentinel to trap.

Fix-direction (Shipwright lane)

Options (need substrate-grounded probe to choose):

  • (a) Push N sentinels at boot (e.g. 10) so multi-pop has multiple sentinels to consume
  • (b) Re-push sentinel synchronously within popstate handler (verify timing)
  • (c) Accept as known limitation; rare in practice; close-as-wontfix

Per the (A) operator-ratified globally-inert disposition for #109, this looks like a real gap rather than acceptable behavior. Lean (a) or (b).

Cross-refs

  • cellblock#109 (parent — pushState-sentinel + popstate-re-push trap; single-Back works; rapid double-click defeats)

Anchor

2026-06-24 operator playtest of v1.0.0 release.

## Behavior (operator playtest 2026-06-24 against v1.0.0) > "Mobile seems to work fine; on desktop a quick doubleclick / multiclick on the back button navigated the browser back to the start page." REGRESSION on #109 partial coverage: single Back press is correctly trapped (per-design globally inert), but rapid double-click / multi-click navigates the browser back to the page-load entry point. ## Severity: MED — known-design gap surfaced #109's pushState-sentinel trap re-pushes on popstate, but rapid Back-presses can pop the sentinel BEFORE the popstate handler runs the re-push. The race window allows the second Back to navigate the underlying history-entry (page-load). ## Likely root cause area main.ts popstate handler is async-relative to browser's history-navigation. Browser fires popstate AFTER history changes; if a second Back fires during the popstate handler's re-push window, the second pop sees no sentinel to trap. ## Fix-direction (Shipwright lane) Options (need substrate-grounded probe to choose): - (a) Push N sentinels at boot (e.g. 10) so multi-pop has multiple sentinels to consume - (b) Re-push sentinel synchronously within popstate handler (verify timing) - (c) Accept as known limitation; rare in practice; close-as-wontfix Per the (A) operator-ratified globally-inert disposition for #109, this looks like a real gap rather than acceptable behavior. Lean (a) or (b). ## Cross-refs - cellblock#109 (parent — pushState-sentinel + popstate-re-push trap; single-Back works; rapid double-click defeats) ## Anchor 2026-06-24 operator playtest of v1.0.0 release.
bosun closed this issue 2026-06-24 01:49:54 +02:00
Sign in to join this conversation.
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
frankenbit/cellblock#144
No description provided.