Repository navigation
fix: enforce pinned Node, repair weekly coverage, and speed up CI - #326
Merged
Merged
Conversation
The repository pinned Node 24.16.0 only in .nvmrc, so shells that did not run `nvm use` (including non-interactive agent shells) ran on the machine default. On older Node, `import.meta.main` is undefined: the exact-file runner and the coverage CLIs skipped all work and exited 0, which made affected runs look green. - package.json devEngines makes npm install/ci/run/test/exec refuse any other runtime. - Repository CLIs assert the .nvmrc version at module load, before their entry guards. - A contract test keeps devEngines aligned with .nvmrc. - AGENTS.md and the test policy document per-command runtime selection for agent shells. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…ctories The weekly coverage run has failed since multi-tab specs were added: the fixture covered only the default page, so reloading a page opened with context.newPage() or closing the default page mid-test broke collection (11 failing scenarios). - Coverage now starts on every page opened in the scenario context before it can navigate, and writes a page's capture before that page closes. - The report accepts several CDP sessions per scenario while rejecting duplicates. - The byte-pinned copies of Binance's native webpack factories are mapped like bundled dependencies instead of counting as production source. - Two continuous/removal save failure paths gain behavior tests. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…nges Pull request runs spent most of their time running 621 Playwright scenarios on one worker. Spec files use isolated contexts and routed fixtures, so they now run on half the logical CPUs (two workers on 4-vCPU runners); the instrumented coverage layer stays serial because precise block coverage slows every page. Changes limited to .gitignore files no longer select the full test suite. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The scenario waited for a bare consumed status, which the automatic plan also writes before and between its transfers. On slower runners the test injected new account activity while the first plan was still transferring, so the activity observation could not mark the episode active. Wait for the automatic_completed record and both transfers instead. Under 8-worker stress the previous wait failed 22 of 40 runs; the new wait passed 40 of 40. Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
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.
Summary
Three focused commits that make local runs trustworthy, restore the weekly coverage job, and shorten PR CI.
1. Enforce the pinned Node runtime (
chore).nvmrc; shells that skippednvm use(including non-interactive agent shells) ran on Node 22. There,import.meta.mainis undefined, so the exact-file runner and coverage CLIs skipped all work and exited 0 — a false green fortest:affected/test:coverage.package.jsondevEnginesmakes npminstall/ci/run/test/execrefuse any other runtime (EBADDEVENGINES)..nvmrcversion at module load, before their entry guards (reusing the existingassertProjectNodeVersion, moved toscripts/node-runtime.mjs).devEnginesaligned with.nvmrc; AGENTS.md anddocs/test-policy.mddocument per-command runtime selection.2. Repair the weekly coverage job (
fix(coverage))context.newPage()or closing the default page mid-test failed 11 scenarios in coverage mode only.mirror-module.js7/438,drawing-save-module.js5/206 branches) were counted as production source. They are now mapped like bundled dependencies; hand-written chart-storage modules stay in scope.chart-save-coalescer.jswas 2 branches short of its 90% critical gate; two real failure paths gain behavior tests.3. Speed up PR CI (
perf(ci)).gitignorefiles no longer select the full suite.Validation
npm teston Node 24.16.0 — 2626 passed;npm run lint:tests,npm run test:test-policy(64 passed), andgit diff --checkpassed.npm testnow fails withEBADDEVENGINES; runningscripts/test-selection/node-runner.mjsorscripts/test-coverage/run.mjsdirectly exits 1 withUse the project Node version 24.16.0 from .nvmrc (nvm use); received 22.17.0(before: the runner exited 0 with no output).npm run test:coveragelocally: 622 browser scenarios passed (serial, 9.3 min); aggregate branch coverage 90.17%; gate passed, including the critical modules.🤖 Generated with Claude Code