perf(test): fix env-dependent failures, stop verifier lazy-fetch, balance CI stripes#109332
Merged
Conversation
…heckouts Canvas A2UI fixtures now pin the resolved root through a new canvas test-api hook: dev checkouts with a locally built a2ui.bundle.js won candidate resolution and shadowed the fixture root. Speech-core prefs tests resolve the canonical tmpdir (macOS /tmp symlink breaks fs-safe store roots), and the bundled plugin install test asks discovery for the canonical bundled path instead of hardcoding the source tree.
git show against a forged or missing SHA lazily fetched from the promisor remote on partial clones, hanging a security check on network state (266s observed). GIT_NO_LAZY_FETCH pins verification to local objects; missing blobs fail closed as before.
…mmand tests commands-name and commands-login imported the full handler barrel (~1,700 modules) for registration assertions; those now live in a dedicated registration test, dropping the two files from 12.6s/4.6s to 1.4s/1.0s locally. Five subagent command test files merged into one so the auto-reply module graph evaluates once instead of five times.
Round-robin striping packed the whale files together, leaving auto-reply-commands-1 at ~220s while sibling stripes idled at ~30s. Greedy LPT over advisory per-file seconds hints balances the commands, cli-runner, and tooling stripes deterministically; group hints for the restriped bins are equalized at the old totals.
Contributor
Author
|
Merged via squash.
|
github-actions Bot
pushed a commit
to Desicool/openclaw
that referenced
this pull request
Jul 17, 2026
…ance CI stripes (openclaw#109332) * test: fix environment-dependent failures on built and partial-clone checkouts Canvas A2UI fixtures now pin the resolved root through a new canvas test-api hook: dev checkouts with a locally built a2ui.bundle.js won candidate resolution and shadowed the fixture root. Speech-core prefs tests resolve the canonical tmpdir (macOS /tmp symlink breaks fs-safe store roots), and the bundled plugin install test asks discovery for the canonical bundled path instead of hardcoding the source tree. * fix(release): keep evidence verifier blob reads local-deterministic git show against a forged or missing SHA lazily fetched from the promisor remote on partial clones, hanging a security check on network state (266s observed). GIT_NO_LAZY_FETCH pins verification to local objects; missing blobs fail closed as before. * perf(test): pay the command-handler barrel once and merge subagent command tests commands-name and commands-login imported the full handler barrel (~1,700 modules) for registration assertions; those now live in a dedicated registration test, dropping the two files from 12.6s/4.6s to 1.4s/1.0s locally. Five subagent command test files merged into one so the auto-reply module graph evaluates once instead of five times. * perf(ci): stripe node test bins by measured file cost Round-robin striping packed the whale files together, leaving auto-reply-commands-1 at ~220s while sibling stripes idled at ~30s. Greedy LPT over advisory per-file seconds hints balances the commands, cli-runner, and tooling stripes deterministically; group hints for the restriped bins are equalized at the old totals.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What Problem This Solves
Test-suite performance work from a measured full-suite analysis (per-file JSON timing of all 12
full-*vitest shard configs, CI job timing from three recent runs, CPU profiles of the worst offenders):test/scripts/release-ci-summary.test.ts, took 306.9s locally: one test forges an unknown SHA andgit showturned that into a hanging promisor network fetch on partial clones — inside a release-evidence security check.commands-name/commands-logineach imported the full command-handler barrel (~1,700 modules) for one registration assertion (12.6s / 4.6s per file, ~98% import time).auto-reply-commands,agents-core-runner-cli, andcore-toolingwere split round-robin by filename, packing whale files together:auto-reply-reply-commands-1ran ~220s while its siblings idled at 33s/24s.a2ui.bundle.js, speech-core prefs wrote through the macOS/tmpsymlink which fs-safe rejects, and the bundled-plugin install test hardcodedextensions/discordwhile built checkouts resolve bundled sources todist/extensions/discord.Why This Change Was Made
Maintainer-requested (reduce CI wall time; fix any test failures hit along the way). CI wall time ≈ the longest vitest shard job; per-job setup is only ~25s, so slow files and unbalanced stripes are the lever.
User Impact
GIT_NO_LAZY_FETCH=1on the blob read only).Evidence
release-ci-summary.test.ts: 41 tests, 306.9s (1 failing locally) → 0.73s, 41/41 afterGIT_NO_LAZY_FETCH.commands-name12.6s → 1.4s,commands-login4.6s → 1.0s, newcommands-handlers.registration.test.ts4.2s (barrel paid once); mergedcommands-subagents.test.ts15 tests, 1.8s (one graph eval instead of five).server.test.ts17/18 → 18/18; speech-coretts.test.ts43/44 → 44/44;commands-plugins.install.test.ts27/28 → 28/28 (all previously CI-green but failing on built/partial-clone dev checkouts; root causes profiled, not guessed).commands-status,cli-runner.spawn,cli-runner.reliability,pr-operation-lock,crabbox-wrapper, ...) across stripes; stripe group hints equalized at the old totals.test/scripts/ci-node-test-plan.test.ts19/19, plusci-changed-node-test-plan/ci-run-node-test-shard/ci-workflow-guardsall green (109 passed, 1 skipped).node scripts/check-deadcode-exports.mjsclean (new canvastest-api.tsseam follows the matrixtest-api.tsprecedent).