mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #2190] ci: audit verified test-selection/cache/reporting gaps and performance follow-ups #732
Open
opened 2026-10-15 18:27:46 +00:00 by bsakaguchi
·
2 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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
morluto/rea#732
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @N0zoM1z0 on GitHub (Oct 12, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/2190
Originally assigned to: @N0zoM1z0 on GitHub.
Implementation progress (2026-10-12)
The initial audit below is retained as historical evidence. The verified
selection/cache/reporting/installer/README/Python gaps are now addressed by
merged #2131 and #2210. Follow-up #2238 was assigned to N0zoM1z0 and closed
by merged #2242 (
d96550f2): concise static feedback with complete diagnosticartifacts, unchanged lint/duplicate failure gates, portable unambiguous clone
locations, and cached lint ownership for all observed source roots.
The final PR passed all 33 checks: 946 files / 9,748 cases, 9,662 passed,
86 skipped, zero failed. Its actual static log has 398 lines / 29,093 bytes,
and the complete artifact retains 911 lint diagnostics and 1,292 clones.
A real website syntax error previously passed cached check:fast but failed
fresh lint; the corrected cache now rejects it. The independent live
checker-inventory/Turbo-input regression fails on the old ownership.
Slow-family and queue follow-ups were investigated rather than assumed:
three complete 99-case runs all passed but showed substantial timing
variation; the explicit live-definition MCP prototype improved cold-request
cost but did not establish stable full-family speedup. It was restored and
no additional test refactor is merged. Three Actions samples show queue
medians from 4 to 49 seconds and maxima from 75 to 199 seconds; these do not
prove a runner/account capacity cause or justify reducing platform/shard
coverage. Those uncertain performance items remain open; no CI-wide speed
percentage is claimed. Current work stops after this evidence-backed merge.
Problem and scope
The CI/test audit found several reproducible verification gaps and a failure-reporting problem. It also found substantial CI cost, but the evidence does not support deleting large parts of the test suite or treating every broad lane selection as a bug.
This issue records the reviewed findings, reproduction steps, measured costs, and acceptance criteria. Correctness findings and performance opportunities are separated below so that optimization does not silently remove coverage.
Baseline:
mainat5190843f8f09ac17cbf79561bd1f708c509cda78, verified against the remote on 2026-10-12. Tests used the repository-pinned Node 24.18.0, npm 11.16.0, and Python 3.12 for the website workflow. The installer reproduction used GNU Bash 5.2.15 on Linux.The initial full Linux test run was on
672bdea21; the two subsequent main commits changed managed CLI schema handling and uninstall output, with no changes to CI, the planner, Turbo, Vitest, or the installer. Both changed test files were rerun on5190843f8and all 11 cases passed. The fault-injection and selection probes below were performed against5190843f8in isolated temporary checkouts. Project source and workflow files have not been changed as part of this investigation.Related work: #2131,
ci: narrow native-host lane selection and reuse build caches, is open/unmerged atd2e75e22115621cc0a2a89aa24904635fc93134f. Its actual planner was tested as a comparison. Findings already addressed by that PR are identified explicitly; this issue should not create a competing implementation.Reviewed findings
1. README-only PRs bypass the existing onboarding command-parity guard
The README classification branch selects
docsand, for the relevant README paths,website, then continues without selectingcode. The existing readmeConsistency.test.ts therefore does not run on these PRs. That test compares translated shell examples with the English examples and checks the installation MCP example.This is an actual routing gap rather than an assumption that docs checks are weak. In an isolated checkout, I replaced the first fenced Bash example in
README_zh.mdwithrea-command-that-does-not-exist --json:npm run test:local -- tests/conformance/readmeConsistency.test.tsREADME_zh.mdnpm run docs:checkscripts/website.py checkcode=false,docs=true,website=trueReproduce in a disposable checkout with locked dependencies installed:
The second test command fails, while both content pipelines accept the mutation. The oracle here is command parity; the existing test is not a complete semantic validator of every CLI example.
Expected change: run this small existing guard in the docs lane, or move its relevant contract into the docs validation owner. Selecting the entire Linux suite for a translated README edit is unnecessary to close this particular gap.
Acceptance: the mutation above fails a README-only PR; the restored README passes; unrelated translated prose does not trigger the complete runtime/provider matrix. If #2141 moves translated READMEs, update both ownership and this guard together.
2. Native test-only edits can produce a green PR without exercising the edited host-specific case
The main planner's generic test-file early return happens before native ownership classification.
Two concrete existing paths demonstrate the problem:
tests/boundary/filesystem/windowsNpxRegistration.test.tscode=true,package=false,apple=falsepackage=truepackage=true,runtime=truetests/boundary/cli/nativePlistCli.test.tscode=true,apple=false,package=falseapple=trueapple=trueSources: Windows platform condition, Darwin platform condition, Windows job and curated test, Apple job and test.
I exercised the actual planner against small temporary Git repositories containing a base commit and exactly one changed path. Each classification was repeated and compared for equality. Controls included an ordinary domain test, a README-only change, an unowned runtime source, and
CI_FULL=true. Ordinary tests still selected the Linux code lane; the full override selected every lane.Equivalent reproduction in a disposable checkout:
Repeat with the Windows path. These are test-selection reproductions; no macOS/Windows behavior is claimed to have been executed on Linux.
Expected change / acceptance: use the owner-aware fix in #2131; retain deterministic planner regressions asserting that a changed platform-specific test selects its executing host. Preserve ordinary source-test feedback and the explicit full-baseline override. Main pushes already select a full baseline, but that does not repair missing PR feedback.
3. A failing shard blocks report merging before diagnosis can be collected
The aggregate test job first requires all shards to succeed. Checkout, dependency installation, blob download, and merging then require
success(). When a shard fails, those steps are skipped. The finalalways()upload runs without the merged files and fails as well.This happened in run 38224038323, aggregate job 114730238104, and also in #2131's run 38234806511, aggregate job 114764631340:
This follows GitHub's documented status-check semantics. Individual shard logs/blobs remain available; the loss is the merged report and centralized diagnosis, not all evidence of the failure.
To verify that merging failed-test blobs is actually useful, I added one passing and one deliberately failing temporary Vitest spec, then ran the real shard and merge scripts:
The temporary specs respectively used
it('control', () => expect(true).toBe(true))andit('controlled failure', () => { throw new Error('controlled-shard-failure'); }), with imports from Vitest.Observed results:
scripts/ci/required.mjsrejected a failed-shard job set and accepted the all-success control.Expected change: collect available non-cancelled shard diagnostics before the final success gate. Keep failure/missing-shard/coverage-floor enforcement in the result contract. A report from incomplete shards must be marked incomplete and must never become the successful timing-history baseline.
Acceptance: a controlled failing shard still yields a merged test-results artifact and a failing required check. Missing blobs, cancelled jobs, and failure before Vitest starts are handled explicitly. Do not simply add
continue-on-errorand make the gate green.This is distinct from the historical coverage-temp ENOENT in closed #150.
4. The exhaustive installer prefix test has an incorrect Bash oracle on this host
The prefix test starts one Bash process per byte prefix of
install.sh: 7,537 subprocesses for the current 7,536-byte file, in batches of 16. It requires every incomplete body prefix to exit nonzero and matchsyntax error|unexpected EOF.On Bash 5.2.15, a malformed/truncated
[[ ... ]]can report a parsing error while returning status 0. Other prefixes reportunexpected token 'EOF' in conditional command, which is also outside the test's regex. A minimal independent reproduction is:Observed:
status: 0, empty stdout, andsyntax error in conditional expression. The sentinel in the brace group does not execute. This result was repeated underCandC.UTF-8. Positive controls showed a balanced group executes the sentinel, an ordinary incomplete group exits nonzero, and removing the guard lets the sentinel execute before the parse error.The existing production-boundary test was rerun through the supported command:
Current-main result: 29 cases passed, one failed, 26.40s including command setup / 25.35s Vitest. The same prefix case failed during the initial full suite, taking 30.23s. Recorded failures concerned exit status and diagnostic wording, rather than observed early stdout execution.
Interpretation: the shell test is genuinely nonportable on this host. Separately, a truncated installer pipeline returning status 0 can mislead a caller even if it makes no changes. The independent reproduction does not prove that npm ran or that the brace guard leaked environment data. CI's current Ubuntu Bash version was not independently reproduced here, so this is not a claim that every CI runner currently fails this case.
Expected change: decide and encode the supported shell/truncation contract. Keep “no premature execution/no output leakage” distinct from “caller sees failure.” If nonzero status is promised, address the execution/download boundary rather than only weakening the assertion. Diagnostics should be tested by meaning rather than one English phrase.
Acceptance: preserve the historical cuts after bare
set, aftermain, and after the npm installation line; preserve evidence that fake npm/REA commands did not execute. Validate on the supported Bash versions. Reducing the 7,537-process sweep is a performance option only if an equivalent structural/parser oracle and representative boundary coverage are demonstrated.5. The cached local full gate omits real test inputs and does not observe changed host dependencies
test:runin turbo.json is cacheable and declaressrc/**,tests/**,scripts/**,bridge/**, toolchain/package files and selected generated outputs. It omits the root READMEs even though the existing consistency test reads them. check:test and check:pr use this task. The installed Turbo 2.11.7 documentation specifies deterministic known inputs as a precondition for reuse.Existing-test reproduction: no synthetic test or runtime change is needed. Run the real README consistency test through Turbo with the original README, make the mutation from section 1, and compare cached and fresh execution:
The original run passes. After changing only
README_zh.md, direct Vitest fails, both repeated Turbo runs return a cached pass with unchangedtest:runhash6d6c141eaa937a85, and--forcefails with the same README assertion. Restoring the README makes direct Vitest pass. This is a confirmed missing repository input for an existing test, separate from the CI selection omission in section 1. All prerequisite tasks retained their hashes too; a generated-output change did not accidentally hide the omission.External-dependency reproduction: external tool contents/host state are also not represented in these inputs. I tested this without changing the runtime version or the repository between the positive and negative runs:
ci-review-provideron PATH and asserts that its JSON hashealthy: true.{"healthy":true}.test:runtask, passing the exact spec path. It passes and is cached.{"healthy":false}. Keep Node 24.18.0, npm 11.16.0, PATH and repository files identical.--force.expected false to be truetest:runhash8cf172d08597a5e5--forcewith faulty dependencyTask invocation:
Temporary spec:
Scope: the README case uses a real current-main test and an actual repository edit. The external-tool case verifies an additional cache-validity mechanism using a simulated dependency; it is not an observed LLDB/Ghidra/Hopper incident. The raw CI shard command invokes Vitest directly and does not reuse this local test-result cache.
test:localandtest:focusedalso run Vitest directly after any prerequisite preparation. Cached compilation and pure static checks remain useful.An additional Node-24-to-Node-22 probe reproduced a stale cached pass, but changing away from the pinned developer toolchain weakens that example; the same-runtime external-dependency probe above is the primary evidence.
Expected change: account for the actual repository inputs read by cached tests, starting with README consistency, or execute the relevant checks under their owning uncached/fresh pipeline. Keep artifact preparation cacheable while ensuring host-dependent validation is executed, or explicitly distinguish a cached source-state check from a fresh host check. Do not snapshot/hash the entire ambient environment or expose its values. Merely hashing PATH would not fix the external-dependency case because PATH remained unchanged.
Acceptance: after caching success, changing the actual README input must invalidate the consistency check and fail. Faulting the same external dependency must cause fresh host validation to fail; restoring either control must pass. Unchanged deterministic build tasks should remain reusable.
6. Existing fast Python producer checks are not invoked by CI
bridge/native/test_rea_lldb_tracer.pyloads the real producer module after installing a small fakelldbAPI. Its nine tests cover bounded journal retention, trace budgets, oversized serialization, launch flags, output-pipe behavior and breakpoint reporting.All nine passed under Python 3.12 in 0.395s. As a negative control in a temporary checkout, removing only the producer helper's
eLaunchFlagStopAtEntrycontribution caused the existing launch-flags test to fail with10 != 14; restoring the source made all nine pass again. This confirms that the suite can detect a concrete producer regression.The workflow/script graph has no invocation of this suite. Vitest's discovery guard verifies the TypeScript/Vitest inventory, so its success does not include this file. Related TypeScript transport tests and real Apple artifact checks do not establish that these nine producer assertions execute in CI.
Expected change / acceptance: give this existing suite an explicit inexpensive CI owner and include its status in the relevant gate; demonstrate that a producer regression causes it to fail. It does not require a real LLDB installation, and running it must not be described as full real-engine verification. This is an automation coverage gap, not proof that the producer implementation is currently wrong.
Measured performance opportunities
These observations explain where to investigate next. They are not claims that all affected checks or cases are redundant.
A. Broad selection and queue time can dominate PR feedback
Nine successful PR runs were inspected, including seven full selections and two narrower selections. Across all nine, workflow wall time ranged from 8.82 to 45.33 minutes, median 15.10 minutes. The seven full selections each launched 31 jobs and consumed approximately 68–76 summed job-execution minutes. This is execution time, not GitHub billing or a quota estimate.
In run 38237724705, Linux shards finished around 11.7 minutes after workflow creation, the Apple job started around 29.2 minutes and ended around 36.4 minutes, and the final required job started around 45.1 minutes. Reducing test body time alone cannot explain or recover all of that delay. The timestamps demonstrate scheduling delay; the exact runner/account constraint was not established.
Replaying 120 first-parent changes as hypothetical PR diffs against the current planner selected the full set for 94/120 (78.3%). This is a planner replay, not the actual historical PR rate. Both explicit shared boundaries and unclassified sources contribute. For example,
src/application/BinaryTargetResolver.tstriggers an unclassified-input full fallback on main; #2131 changes it to a Linux runtime fallback.Follow-up: evaluate #2131 rather than duplicate it. Measure wall time, queue delay, runner-minutes, memory and the guarantees removed by narrower ownership. Six shards may shorten execution but can also increase startup work and queue contention. Keep an observable successful full-main baseline: in one busy sample of 40 main runs, 24 were cancelled, so “main covers it later” needs actual evidence.
B. The outer build-cache key prevents partial reuse across otherwise reusable task inputs
The portable-build-cache action aggregates all six eager task hashes into one cache key and supplies no
restore-keys.A controlled comment-only change to
scripts/fixtures/managed/function-dossier.mjschanged onlyartifacts:managed-evidence's task hash. The other five hashes, includingcompile, were unchanged, but the outer key changed. Restoring the original bytes restored every hash and the aggregate key. This demonstrates avoidable loss of access to reusable task entries on an outer cache miss; Turbo's task-level hashing itself worked correctly.Static/docs jobs do not restore that portable task cache on main. Apple/readiness/other verifier entrypoints can independently compile. Jobs that begin before the build job publishes a new cross-run cache can also miss it. Typical observed duplicate compile steps cost about 9–15s; full job medians were approximately 47s for static, 32s for docs, 354s for Apple, 385s for Windows, and 426s for macOS Intel packaging. Build reuse helps, but it is not a credible explanation for the whole 45-minute tail.
Follow-up: permit carefully scoped access to prior task entries and let the installed Turbo version validate task inputs, or reuse immutable per-run build artifacts where latency permits. Respect OS/architecture/toolchain and GitHub's cache scope/matching rules. Avoid adding a serial build dependency to every verifier without measuring the critical path. #2131 already adds Apple/Windows cache reuse and removes a Windows typecheck; those parts should be reviewed there.
Acceptance: an owner-specific input change invalidates its task while reusing unchanged compilation; actual compilation inputs still invalidate correctly; native artifacts are never reused across incompatible targets.
C. Execution hotspots matter more than blanket test deletion
The successful run 38239959095 report contains 915 test files, 9,376 cases, 9,290 passed and 86 pending. Its summed file durations are about 2,163s; the slowest 50 files account for about 1,097s (50.7%). These are summed execution durations, not workflow wall time.
Representative slow files include
applicationWorkflowCli.test.ts(~55.7s),clientProfiles.test.ts(~53.6s),exportedFunctionBindingsCli.test.ts(~52.0s),processFinalization.test.ts(~42.3s), andlocalToolContracts.test.ts(~41.9s). Investigate repeated CLI/MCP setup, analysis and child-process startup by test family. For example, the 64 exported-function cases already share MCP setup and include a real Node loader oracle, so deleting them merely because they are slow would discard identified semantics.The initial Linux full suite without coverage took 26m34.77s, with maxWorkers=2: 901 passed / 13 skipped / 1 failed files, and 9,266 passed / 89 skipped / 1 failed cases. The one failure was the installer prefix case above. The host was shared with a few investigation probes, so this is a diagnostic run rather than an isolated benchmark.
A two-file coverage comparison took 11.51s without coverage and 30.35s with coverage. It ran alongside the full suite and is too small/contended to extrapolate a whole-suite 2.64× improvement. An eight-invocation bytecode-cache probe showed only about 3% warm improvement. Neither result justifies a global promise or coverage reduction.
Follow-up: optimize a small number of the slowest families while preserving distinct malformed-input, cleanup, cancellation, capacity and identity oracles. Compare cold/warm and coverage/non-coverage runs on comparable runners before changing shard count or coverage policy.
D. Timing transport and static logs can be made smaller
The build job downloads the previous successful run's full
test-resultsartifact to obtain one timing JSON. A sampled artifact was ~7.5MB compressed, including 1,315 coverage HTML files (~34.64MiB unpacked), while a normalized timing map would be ~55KB. A dedicated timing artifact is a small, concrete transport/storage improvement; it is not the dominant test bottleneck.One static log contained 857 lint warnings and 1,219 printed clone blocks. The clone report covered 2,142 files with TypeScript duplication at 2.77%, below the 3% threshold. This is a feedback/noise problem, not evidence that lint, typecheck, discovery, formatting, or duplication checking are all unnecessary.
Normal local development is already materially lighter: warm
check:fasttook about 0.5s, and cold/fresh runs about 6–8.5s. The completecheck:prgate is documented as optional. Preserve that distinction in developer guidance.Findings rejected or narrowed during review
Proposed order and completion criteria
Use the reproductions and retained coverage contracts above as the acceptance criteria for follow-up changes.
@N0zoM1z0 commented on GitHub (Oct 14, 2026):
Performance follow-up, current main
1579b6865e8ee87873036a39af3e257cc70d6f21: two same-Git-tree hosted samples showverify:package:windowstaking 222s versus 558s (runs 38585311071 and 38587680181). The latter step's build preparation was already cached (~106ms), so rebuilding is not an established explanation for the remaining delay.A temporary manual-only diagnostic branch (
15f44d640d4910051016851f194d4161a1e3a01c, not an integration PR) profiles the full real verifier: pack / install / CLI help / MCP catalog / setup and idempotence / uninstall / real npm update / cleanup. It builds the native Windows artifact from the exact same head and workflow run, retains all existing assertions and commands, and records phase durations plus aggregate upstream-registry traffic. Update-host operations delegate directly to the production host; no success or dependency output is cached.A local pinned-npm-script control already refutes the simple assumption that changing HOME necessarily loses the npm download cache: npm exports its configured
npm_config_cacheto scripts, and the runtime only stripsnpm_command. Windows propagation and the dominant phase remain to be measured. The Windows-only verifier also does not perform the separate initial global-install step (that source branch runs on non-Windows hosts); the updater's real global replacement is retained. No root cause, optimization or speedup is claimed yet.@N0zoM1z0 commented on GitHub (Oct 14, 2026):
Bounded Windows profile completed successfully: run 38602408204, exact diagnostic head
15f44d640d4910051016851f194d4161a1e3a01c, production baseline main1579b6865. Both jobs passed; the native artifact was built from that same run/head. Artifactwindows-package-phase-profile: ID 11915231329.All original package/native-file, complete MCP catalog, setup/idempotence/uninstall, exact-release update, read-only maintenance and final executable assertions passed. This instrumented sample describes its executed source and runner; it is not a controlled speedup comparison with the historical 222s/558s steps or a claim about newer main
93e75bc8f.The updater proxy returned 193 successful metadata responses / 60,622,461 decoded payload bytes / 0 tarball responses. The sum of individual upstream request durations was 10.99 s, with overlapping requests; this sum is not wall time, and decoded bytes are not compressed wire traffic. Responses finished within an observed 6.03 s window. These measurements do not identify the CPU/filesystem/network cause of the remaining npm time. Hosted process-family CPU/RSS and agent tokens remain unmeasured.
Two tempting explanations did not justify a fix:
Accept: application/json. The pinned Arborist manifest path explicitly requests full metadata. Although the registry supports abbreviated metadata, assuming this client requests it was wrong. The first investigator assertion expecting abbreviated Accept failed; retaining the actual request and checking the pinned source refuted that hypothesis. This was not a product/test regression. Forcing abbreviated responses would change the workload rather than establish a faithful optimization.Runner-delay check on the two historical same-tree samples: Windows started 4s (main) / 3s (PR) after its last required dependency completed. That combined dispatch/scheduling gap does not support blaming a long Windows-runner queue in these samples; it does not measure unrelated queues.
Stop this round without deleting distinct guarantees, caching live passes, changing timeouts, or proposing an unproven performance patch. The temporary profiling workflow is not an integration PR. Remaining npm processing cost requires discriminating CPU/I/O evidence before another implementation round. The two separately reproduced correctness defects are merged as #3549 and #3565; #3543 remains open after a non-reproducing macOS timing experiment.
One separate historical observation remains unrooted: qualification run 38590708469, job 115944977400, failed
cliOutput.test.ts/retains closed slices and multiple filter pathsat its 3,000 ms owned-child deadline. The gate correctly rejected that failure. There is no evidence that it shares #3543's cause, and later feedback success is not a fix for this historical full/coverage sample. No timeout change or retry was applied; retain this observation for a future discriminating reproduction.Final newer-main follow-up:
93e75bc8fe21780ab1ee517bfda4f4a7730d678dCI 38602581852 completed successfully, 13 selected code jobs passed / 17 unselected jobs skipped. Downloaded exact-head report: 1,285 unique files / 14,680 passed / 125 skipped / 0 failed / 0 duplicates. Local affected checks on this newer main: four files / 34 passed, eight static tasks, architecture guards over 1,398 source files, all 1,285 files discovered exactly once. These results do not rerun the historical failing qualification environment or prove its root cause.