Skip to content

Commit 3eb06e3

Browse files
committed
fix(qa): harden restart inflight Windows scenario
1 parent 5cfa577 commit 3eb06e3

3 files changed

Lines changed: 14 additions & 9 deletions

File tree

CHANGELOG.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,7 @@ Docs: https://docs.openclaw.ai
6161
- Docker E2E: avoid rebuilding the Control UI twice while preparing the shared OpenClaw package tarball for package-backed scenario runs.
6262
- Tests: avoid rebuilding the Control UI twice during the installer Docker smoke now that `pnpm build` includes `ui:build`.
6363
- Tests: give QA config mutation RPCs enough native Windows budget to finish gateway config writes and restart settle after hot scenario runs.
64+
- Tests: keep the gateway restart-inflight QA scenario focused on restart recovery on native Windows by allowing expected embedded prompt handoff errors and using the Windows-safe timeout budget.
6465
- Crabbox: sync clean sparse worktrees through a temporary full checkout even when reusing an existing lease so tracked build-time files are not omitted.
6566
- Build: route `scripts/ui.js` through the shared pnpm runner and keep Control UI chunking helpers in sparse-included source so native Windows Corepack builds can produce `dist/control-ui`.
6667
- Tests: give the memory fallback QA scenario enough turn budget to exercise native Windows gateway runs instead of failing on the client timeout while the mock agent is still dispatching.

extensions/qa-lab/src/scenario-catalog.test.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -197,6 +197,10 @@ describe("qa scenario catalog", () => {
197197
expect(readQaScenarioById("long-context-progress-watchdog").sourcePath).toBe(
198198
"qa/scenarios/runtime/long-context-progress-watchdog.md",
199199
);
200+
expect(JSON.stringify(readQaScenarioById("gateway-restart-inflight-run").execution.flow))
201+
.toContain("EmbeddedAttemptSessionTakeoverError");
202+
expect(JSON.stringify(readQaScenarioById("gateway-restart-inflight-run").execution.flow))
203+
.toContain("liveTurnTimeoutMs(env, 180000)");
200204
expect(readQaScenarioExecutionConfig("long-context-progress-watchdog")).toMatchObject({
201205
requiredProviderMode: "live-frontier",
202206
harnessRuntime: "codex",

qa/scenarios/runtime/gateway-restart-inflight-run.md

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -41,11 +41,11 @@ steps:
4141
- call: waitForGatewayHealthy
4242
args:
4343
- ref: env
44-
- 60000
44+
- 180000
4545
- call: waitForQaChannelReady
4646
args:
4747
- ref: env
48-
- 60000
48+
- 180000
4949
- call: reset
5050
- set: startIndex
5151
value:
@@ -62,7 +62,7 @@ steps:
6262
message:
6363
expr: config.prompt
6464
timeoutMs:
65-
expr: liveTurnTimeoutMs(env, 30000)
65+
expr: liveTurnTimeoutMs(env, 180000)
6666
- call: readConfigSnapshot
6767
saveAs: current
6868
args:
@@ -86,19 +86,19 @@ steps:
8686
- call: waitForGatewayHealthy
8787
args:
8888
- ref: env
89-
- 60000
89+
- 180000
9090
- call: waitForQaChannelReady
9191
args:
9292
- ref: env
93-
- 60000
93+
- 180000
9494
- call: waitForAgentRun
9595
saveAs: waited
9696
args:
9797
- ref: env
9898
- expr: started.runId
99-
- expr: liveTurnTimeoutMs(env, 20000)
99+
- expr: liveTurnTimeoutMs(env, 180000)
100100
- assert:
101-
expr: "waited.status === 'ok' || waited.status === 'timeout'"
101+
expr: "waited.status === 'ok' || waited.status === 'timeout' || (waited.status === 'error' && String(waited.error ?? '').includes('EmbeddedAttemptSessionTakeoverError'))"
102102
message:
103103
expr: "`interrupted agent run ended with unexpected status: ${JSON.stringify(waited)}`"
104104
- set: interruptedMatches
@@ -116,15 +116,15 @@ steps:
116116
message:
117117
expr: config.recoveryPrompt
118118
timeoutMs:
119-
expr: liveTurnTimeoutMs(env, 45000)
119+
expr: liveTurnTimeoutMs(env, 180000)
120120
- call: waitForOutboundMessage
121121
saveAs: outbound
122122
args:
123123
- ref: state
124124
- lambda:
125125
params: [candidate]
126126
expr: "candidate.conversation.id === 'qa-operator' && candidate.text.includes(config.recoveryMarker)"
127-
- expr: liveTurnTimeoutMs(env, 30000)
127+
- expr: liveTurnTimeoutMs(env, 180000)
128128
- sinceIndex:
129129
ref: startIndex
130130
- set: matchingOutbounds

0 commit comments

Comments
 (0)