Repository navigation
test(runtime): run two long Gateway cases beside the runtime image startup file - #3016
Conversation
…artup file runtime-image-startup.test.mjs runs its cases one after another and sets Image Runtime Startup's length (about 87 s of a 163 s job). Move the workspace-node hot-load case and the custom-provider subagent case, verbatim, to runtime-image-gateway-workspace.test.mjs in the same lane, so CI runs them beside it. The two log assertion helpers they share move to tests/helpers/runtime-image-startup.mjs. The release smoke list and the runtime test docs name the new file.
|
🦞👀 Pull request received. I will update this pull request when review starts. ClawSweeper review completeClawSweeper finished reviewing this revision. The review result is being finalized. |
|
Codex review: needs maintainer review before merge. What this changesThis PR moves two Gateway integration cases into a parallel test file and updates their shared helper, CI manifest, release smoke list, and documented commands. Example: Image Runtime Startup runs with fileConcurrency set to 3.
Review scores
ProductKind: Test only · Worth it: Yes · Fix scope: Complete Merge readiness✅ Ready for maintainer review This PR is a focused CI optimization that preserves existing runtime coverage and release smoke selection; no actionable defects were found. Priority: P3 Before mergeNone. FindingsNone. Agent review detailsHow this fits togetherThe CI suite manifest feeds the test runner’s file scheduler and required-case accounting; the container release script separately selects the same runtime integration files for image smoke verification. flowchart TD
A[CI suite manifest] --> B[Test file scheduler]
B --> C[Startup cases]
B --> D[Gateway workspace cases]
C --> E[Runtime image containers]
D --> E
F[Release smoke list] --> D
Technical reviewBest possible solution: Land the focused file split with the existing assertions, required-case accounting, and release smoke coverage preserved. Do we have a high-confidence way to reproduce the issue? This is a test scheduling optimization, and source inspection confirms that main still runs both cases within the original sequential file. Is this the best way to solve the issue? The split uses the existing parallel scheduler and shared test helper without adding production machinery or weakening required coverage. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning medium; reviewed against bd52601ef238. Provenance checked
SecurityNone. EvidenceWhat I checked:
Likely related people:
LabelsLabel changes: No label changes. Label justifications:
Rating scale6/6 🦀 challenger crab · 5/6 🦞 diamond lobster · 4/6 🐚 platinum hermit · 3/6 🦐 gold shrimp · 2/6 🦪 silver shellfish · 1/6 🧂 unranked krab. Overall follows the weaker of proof and patch quality; ✨ marks media proof (a screenshot, video, or linked artifact) that directly shows the changed behavior. WorkflowClawSweeper edits this one comment on every review. Comment HistoryReview history (1 earlier review cycle)
Reviewed October 20, 2026, 3:04 AM ET / 07:04 UTC (Revision 2). |
Only the hot-load case starts a dedicated Gateway; the subagent case uses the default entrypoint (review nit).
|
@clawsweeper re-review |
|
🦞👀 Re-review progress:
|
Problem
Image Runtime Startup is one of the longest CI Required jobs (median 163 s over the 41 main runs from 10-19 18:00Z to 10-20 04:18Z). Its test window is set by one file:
runtime-image-startup.test.mjsruns its 14 cases one after another and took a median 86.7 s, while the lane's other three files took 29.2 s, 19.6 s and 3.9 s atfileConcurrency: 3. The lane's test window was 86.7 s, the length of that one file.Change
tests/integration/runtime-image-gateway-workspace.test.mjsin the same lane, so CI runs them beside it:runtime image Gateway hot-loads its workspace node binding without restarting OpenClaw(CI median 16.0 s)runtime image spawns custom-provider subagents with intact native model IDs in the remote workspace(11.6 s)gatewayLogDiagnostic,assertGatewayLogEntry) move verbatim totests/helpers/runtime-image-startup.mjs; onlyassertGatewayLogEntryis exported. The four imports only the subagent case used move with it.images-runtime-startup.jsonlists the new file inparallelFiles, and its twoexpectedTestsmove with the cases.runtimeImageSmokeTestsinscripts/ci/container-release.mjs(the release smoke list thatcontainer-release.test.mjspins to the lane files),deploy/runtime/README.mdanddocs/testing/docker.mdname the new file.t.after, so running the two files side by side cannot leak state between cases.file-durations.jsonrows, so its files start in listed order. That order already puts the longest file first.Split chosen to avoid other open work: the Git broker case and its helpers stay put, because
ci-prepare.test.mjsnames this file as the seccomp helper's known caller. The OpenShell policy case and the shared Codex case stay too: open PRs #2633 and #906 edit them.Verification
Expected CI time (per-test CI medians, 21 main runs): the startup file goes from 86.7 s to about 60.7 s. The new file takes about 27.6 s, and the other three files fit beside them, so the lane's test window drops from about 87 s to about 61 s. The job should go from about 163 s to about 137 s.
Local runs (podman, runtime image built from 166def5, host shared with other jobs):
main: the startup file took 199.6 s.routes sandboxed Git through stock Codex and the repository broker, fails on both sides on this host: podman's network DNS can't reach its in-network fixture (curl: (35) ... unrelated.oce.svc:443). That's known from docs/testing (rootless podman), and CI runs it.Mutants (11, product code the cases run in the container): each was applied to
mainand to this branch, and the full files ran on both. Each mutant failed the same cases on both sides.mainand this branch)gatewaydropped from Gateway-local Codex toolsPINS_PLACEHOLDER
Review: internal review found no blockers; its wording nit (the header no longer calls both cases dedicated) is applied in the second commit, a comment-only change after the runs above.
Other checks:
node scripts/ci/run-tests.mjs auditreports no issues.container-release.test.mjspasses 22/22, includingthe runtime release smoke runs every Image Runtime Startup file.Open PRs touching these files (
git merge-tree, againstmainand against this head):runtime-image-startup.test.mjs: it adds an import next to the 4 imports this PR movesfile-durations.json)Risks
Test-only, plus the release smoke file list and two docs lists. When both files start their Gateways at once, the cases share the 8-CPU runner with one more container than before. The lane already runs three files at once, so peak concurrency is unchanged; the cases just overlap for longer.