fix: replay reconnect after workspace bootstrap
CI / lint (pull_request) Successful in 2m49s
CI / build-release (pull_request) Successful in 6s
CI / browser-journey (pull_request) Failing after 2m44s
CI / release-candidate (pull_request) Has been skipped

This commit is contained in:
timmy committed 2026-08-17 01:23:44 +00:00
1 parent 1a4f930b50
commit 0a4c9a0ae8
5 files changed
+42 -7

No files matched your search

@@ -270,9 +270,8 @@ def test_release_artifact_files_one_mobile_issue_exactly_once_after_offline_relo
context.set_offline(False)
page.evaluate("window.dispatchEvent(new Event('online'))")
# Containerized Actions runners can take longer than a local browser to wake the
# service worker, finish optional workspace activation, and complete its identity
# handshake after reconnect.
for _ in range(240):
# service worker and complete its identity handshake after reconnect.
for _ in range(160):
if fake.created_issues:
break
page.wait_for_timeout(250)
+23 -1
View File
@@ -53,4 +53,26 @@ console.log(JSON.stringify({message,status:status.textContent}));
assert result == {
"message": "network failed",
"status": "Workspace could not load. Check your connection, then reload to retry.",
}
}
def test_workspace_bootstrap_replays_online_event_after_dashboard_registers_handlers():
result = run_bootstrap("""
const status={textContent:''}; const listeners={};
const document={querySelector(selector) {
if (selector.startsWith('meta[')) return {content:'feature-workspace-abc.js'};
if (selector === '#my-work-action-status') return status;
return null;
}};
const window={
addEventListener(name,callback) { listeners[name]=callback; },
removeEventListener(name,callback) { if (listeners[name] === callback) delete listeners[name]; },
};
const createLoader=()=>({load:async()=>{listeners.online();}});
const lifecycle=await loadWorkspace({document,window,createLoader});
let reconnects=0;
lifecycle.replayOnline(()=>{reconnects++;});
lifecycle.replayOnline(()=>{reconnects++;});
console.log(JSON.stringify({reconnects,listening:Boolean(listeners.online)}));
""")
assert result == {"reconnects": 1, "listening": False}