Skip to content

chore(deps-dev): upgrade CLI tooling with compatible vitest and stryker - #912

Merged
blafourcade merged 3 commits into
nextfrom
dependabot/npm_and_yarn/cli/next/npm-dev-dependencies-62c61d3913
Oct 12, 2026
Merged

blafourcade merged 3 commits into
nextfrom
dependabot/npm_and_yarn/cli/next/npm-dev-dependencies-62c61d3913

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Sep 23, 2026 •

Copy link
Copy Markdown
Contributor

Upgrades CLI development dependencies with a compatible Vitest 4.1.11, coverage-v8 4.1.11, and Stryker 10.0.0 combination. Vitest 5 remains deferred because its changed test-name separator does not match the current Stryker runner's per-mutant test filter.

Migrates the four test projects into vitest.config.ts, preserves test selection and isolated profiles, and adapts the load-failure reporter and mock types to the new APIs. Text assets stay loaded as text. Biome assertions normalize diagnostic paths on Windows.

Adds a dynamic mutation beside the existing static canary so mutation selection is exercised against nested test names. Both mutants are killed, with the existing 100% threshold preserved.

Includes the validated simple-git compatibility branch so the final dependency combination is tested together. #959 is merged and this branch includes the current next. Supersedes #923, including its matching coverage-provider upgrade and migration fixes.

Strengthens Kilo profile tests for frontmatter conversion, installed-command detection, and hook loader placement. Stryker 10 exposed old mutation kills caused by an unrelated Codex test failure; the new tests detect Kilo behavior directly. Kilo mutation score is 67.9% (152 killed, 54 survived, 18 uncovered, no timeouts), above the unchanged 64% floor.

Validation: frozen installation, typecheck, lint, knip, 142 architecture tests, load-failure integration test, and static/dynamic mutation canary. Full coverage on the final head in GitHub CI: 6,842 tests passed, one skipped; all thresholds passed. The updated Kilo suite passes all 26 tests, with typecheck and lint passing. Smoke: 136 passed, zero failed, one optional remote-fetch skip; all 33 commands exercised. Build: 734 KB within the existing 734 KB budget. All 33 GitHub checks passed on d1cfc01f3183f480b97568bb3fc0f774fa0b07ba, including Windows, CodeQL, every mutation scope, and the final gate. No coverage or mutation threshold is lowered.

@dependabot dependabot Bot added the dependencies Dependency update (dependabot) label Sep 23, 2026
@dependabot
dependabot Bot requested a review from a team as a code owner September 23, 2026 08:08
@dependabot dependabot Bot added the dependencies Dependency update (dependabot) label Sep 23, 2026
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/cli/next/npm-dev-dependencies-62c61d3913 branch 3 times, most recently from 985bea2 to b002c3f Compare September 28, 2026 21:22
…ry with 11 updates

Bumps the npm-dev-dependencies group with 11 updates in the /cli directory:

| Package | From | To |
| --- | --- | --- |
| [@biomejs/biome](https://github.com/biomejs/biome/tree/HEAD/packages/@biomejs/biome) | `2.5.11` | `2.5.15` |
| [@commitlint/cli](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/cli) | `21.2.2` | `21.2.3` |
| [@commitlint/config-conventional](https://github.com/conventional-changelog/commitlint/tree/HEAD/@commitlint/config-conventional) | `21.2.2` | `21.2.3` |
| [@stryker-mutator/core](https://github.com/stryker-mutator/stryker-js/tree/HEAD/packages/core) | `9.6.1` | `10.0.0` |
| [@stryker-mutator/vitest-runner](https://github.com/stryker-mutator/stryker-js/tree/HEAD/packages/vitest-runner) | `9.6.1` | `10.0.0` |
| [@types/node](https://github.com/DefinitelyTyped/DefinitelyTyped/tree/HEAD/types/node) | `26.4.0` | `26.6.4` |
| [@vitest/coverage-v8](https://github.com/vitest-dev/vitest/tree/HEAD/packages/coverage-v8) | `3.2.6` | `5.0.3` |
| [fast-check](https://github.com/dubzzz/fast-check/tree/HEAD/packages/fast-check) | `4.9.0` | `4.10.2` |
| [jscpd](https://github.com/kucherenko/jscpd/tree/HEAD/rust/jscpd) | `5.0.16` | `5.4.0` |
| [knip](https://github.com/webpro-nl/knip/tree/HEAD/packages/knip) | `6.33.0` | `6.39.0` |
| [vitest](https://github.com/vitest-dev/vitest/tree/HEAD/packages/vitest) | `3.2.6` | `5.0.3` |



Updates `@biomejs/biome` from 2.5.11 to 2.5.15
- [Release notes](https://github.com/biomejs/biome/releases)
- [Changelog](https://github.com/biomejs/biome/blob/main/packages/@biomejs/biome/CHANGELOG.md)
- [Commits](https://github.com/biomejs/biome/commits/@biomejs/[email protected]/packages/@biomejs/biome)

Updates `@commitlint/cli` from 21.2.2 to 21.2.3
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/cli/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v21.2.3/@commitlint/cli)

Updates `@commitlint/config-conventional` from 21.2.2 to 21.2.3
- [Release notes](https://github.com/conventional-changelog/commitlint/releases)
- [Changelog](https://github.com/conventional-changelog/commitlint/blob/master/@commitlint/config-conventional/CHANGELOG.md)
- [Commits](https://github.com/conventional-changelog/commitlint/commits/v21.2.3/@commitlint/config-conventional)

Updates `@stryker-mutator/core` from 9.6.1 to 10.0.0
- [Release notes](https://github.com/stryker-mutator/stryker-js/releases)
- [Changelog](https://github.com/stryker-mutator/stryker-js/blob/master/packages/core/CHANGELOG.md)
- [Commits](https://github.com/stryker-mutator/stryker-js/commits/v10.0.0/packages/core)

Updates `@stryker-mutator/vitest-runner` from 9.6.1 to 10.0.0
- [Release notes](https://github.com/stryker-mutator/stryker-js/releases)
- [Changelog](https://github.com/stryker-mutator/stryker-js/blob/master/packages/vitest-runner/CHANGELOG.md)
- [Commits](https://github.com/stryker-mutator/stryker-js/commits/v10.0.0/packages/vitest-runner)

Updates `@types/node` from 26.4.0 to 26.6.4
- [Release notes](https://github.com/DefinitelyTyped/DefinitelyTyped/releases)
- [Commits](https://github.com/DefinitelyTyped/DefinitelyTyped/commits/HEAD/types/node)

Updates `@vitest/coverage-v8` from 3.2.6 to 5.0.3
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.3/packages/coverage-v8)

Updates `fast-check` from 4.9.0 to 4.10.2
- [Release notes](https://github.com/dubzzz/fast-check/releases)
- [Changelog](https://github.com/dubzzz/fast-check/blob/main/packages/fast-check/CHANGELOG.md)
- [Commits](https://github.com/dubzzz/fast-check/commits/v4.10.2/packages/fast-check)

Updates `jscpd` from 5.0.16 to 5.4.0
- [Release notes](https://github.com/kucherenko/jscpd/releases)
- [Commits](https://github.com/kucherenko/jscpd/commits/v5.4.0/rust/jscpd)

Updates `knip` from 6.33.0 to 6.39.0
- [Release notes](https://github.com/webpro-nl/knip/releases)
- [Commits](https://github.com/webpro-nl/knip/commits/[email protected]/packages/knip)

Updates `vitest` from 3.2.6 to 5.0.3
- [Release notes](https://github.com/vitest-dev/vitest/releases)
- [Changelog](https://github.com/vitest-dev/vitest/blob/main/docs/releases.md)
- [Commits](https://github.com/vitest-dev/vitest/commits/v5.0.3/packages/vitest)

---
updated-dependencies:
- dependency-name: "@biomejs/biome"
  dependency-version: 2.5.14
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dev-dependencies
- dependency-name: "@commitlint/cli"
  dependency-version: 21.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dev-dependencies
- dependency-name: "@commitlint/config-conventional"
  dependency-version: 21.2.3
  dependency-type: direct:development
  update-type: version-update:semver-patch
  dependency-group: npm-dev-dependencies
- dependency-name: "@stryker-mutator/core"
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-dev-dependencies
- dependency-name: "@stryker-mutator/vitest-runner"
  dependency-version: 10.0.0
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-dev-dependencies
- dependency-name: "@types/node"
  dependency-version: 26.6.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-dev-dependencies
- dependency-name: "@vitest/coverage-v8"
  dependency-version: 5.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-dev-dependencies
- dependency-name: fast-check
  dependency-version: 4.10.2
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-dev-dependencies
- dependency-name: jscpd
  dependency-version: 5.3.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-dev-dependencies
- dependency-name: knip
  dependency-version: 6.37.0
  dependency-type: direct:development
  update-type: version-update:semver-minor
  dependency-group: npm-dev-dependencies
- dependency-name: vitest
  dependency-version: 5.0.1
  dependency-type: direct:development
  update-type: version-update:semver-major
  dependency-group: npm-dev-dependencies
...

Signed-off-by: dependabot[bot] <[email protected]>
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/cli/next/npm-dev-dependencies-62c61d3913 branch from b002c3f to 8d1f68c Compare October 5, 2026 21:09
Align Vitest and its coverage provider at 4.1.11 with Stryker 10. Preserve all four test projects and text fixtures, migrate the load-failure reporter, and verify dynamic and static mutation selection. Keep Vitest 5 deferred because its test-name separator is incompatible with the current Stryker runner.
@blafourcade blafourcade changed the title chore(deps-dev): bump the npm-dev-dependencies group across 1 directory with 11 updates chore(deps-dev): upgrade CLI tooling with compatible vitest and stryker Oct 12, 2026
@blafourcade
blafourcade merged commit 9ac49ac into next Oct 12, 2026
39 checks passed
@dependabot
dependabot Bot deleted the dependabot/npm_and_yarn/cli/next/npm-dev-dependencies-62c61d3913 branch October 12, 2026 05:54
blafourcade added a commit that referenced this pull request Oct 12, 2026
#912 upgraded Biome and already maps each reported file relative to the planted
tree with the platform separator, so its mapping replaces this branch's
backslash parser and that parser's test. This branch keeps the node launcher
and the failure when Biome never ran.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z
blafourcade added a commit that referenced this pull request Oct 12, 2026
After the merge with #912, the Windows guards still failed with
`expected [ …(5) ] to include 'src/kernel/exit.ts:plugin'`: Biome found the
five planted findings, and none of their paths matched. Only the planted tree
went through realpathSync, so a file Biome named through another spelling of
the same directory could not be made relative to it. Each file now resolves
through realpathSync too, and a failed match prints the findings it saw.

Refs #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z
blafourcade added a commit that referenced this pull request Oct 12, 2026
…1000)

* test(cli): run the Biome guards on Windows

`biome-guards-bite.arch.test.ts` spawns `node_modules/.bin/biome` directly.
Windows reaches Biome through a `.cmd` shim, so the launch reportedly fails with
ENOENT (#881), and the Windows job never runs the architecture suite, so
nothing here has shown it. The Windows job now runs that one file.

Refs #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* fix(cli): launch Biome through node in the architecture guards

On the Windows runner the Biome guards failed with `expected [] to include
'src/kernel/exit.ts:plugin'` and two more like it: spawning
`node_modules/.bin/biome` directly found no executable there, and the empty
output read as a tree with no findings.

The guards now run the package's own launcher, `@biomejs/biome/bin/biome`,
through `process.execPath`, which works on every platform. A run that is
neither clean (exit 0) nor diagnosed (exit 1 with a finding) throws instead of
returning nothing, so a guard asserting that no finding exists can no longer
pass when Biome never ran. A test with a missing launcher was red before this.

Closes #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* fix(cli): read Biome's Windows paths in the architecture guards

With Biome launched, the Windows guards still failed with `expected [ …(5) ]
to include 'src/kernel/exit.ts:plugin'`. Biome found the five planted findings
it finds elsewhere, but names a file with backslashes there, so no key
matched. The parser now turns the separators into forward slashes, under a
test fed a Windows line.

Refs #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* chore(ci): name the Windows hook steps by what they do

A CI step name, an error message and a test comment carried the number of the
issue that led to them. Each now says what it checks, and the issue numbers
stay in the commits and pull requests that fixed them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* docs(framework): keep tracker IDs out of every file, not only docs

The documentation rule already dropped ticket and run IDs, but only for the
Markdown its paths name, so code, comments, test names and CI steps carried
them. A rule with no paths now covers every file: tracker IDs live in commits,
pull requests and issues, and the thing is named by what it does. The
documentation rule no longer repeats the clause.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* chore(ci): run the whole architecture suite on Windows

The Windows job ran one file of the architecture suite, the Biome guards.
It now runs `pnpm test:arch`, the same suite the Linux architecture job runs,
so every architecture guard is exercised on Windows, the Biome guards among
them.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* docs(framework): reduce the tracker-ID rule to one bullet

The rule now reads as a single bullet, and the documentation rule keeps its own
clause unchanged: its paths only reach the documentation, so the two do not
overlap.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* chore(framework): check out text files with LF on every platform

Run on Windows, the architecture suite failed in three files that read text by
its lines: `codebase-map.md has no fenced block`, `expected [] to include
'knip'`, and a SyntaxError loading `mutation-covers-source`. A Windows checkout
turns LF into CRLF, which the repository's scripts and tests do not expect.

`.gitattributes` now asks for LF on every platform, `text=auto` leaving binary
files alone. No committed file changes: the only CRLF files are archived
evidence whose own `.gitattributes` already mark them `-text`.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* fix(cli): resolve both sides of a Biome finding's path in the guards

After the merge with #912, the Windows guards still failed with
`expected [ …(5) ] to include 'src/kernel/exit.ts:plugin'`: Biome found the
five planted findings, and none of their paths matched. Only the planted tree
went through realpathSync, so a file Biome named through another spelling of
the same directory could not be made relative to it. Each file now resolves
through realpathSync too, and a failed match prints the findings it saw.

Refs #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

* fix(cli): decode the file the Biome GitHub reporter escapes

With the findings now printed, the Windows guards failed on
`ENOENT ... lstat '...\aidd-biome-bite-BHHWDT\C%3A'`. On Windows Biome reports
an absolute file, and the GitHub reporter escapes its drive colon as `%3A`,
so the path resolved under the planted tree instead of to the file. The guard
decodes the reporter's `%3A`, `%2C` and `%25` before resolving the path, under
a test that was red first.

Refs #881

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VE16AxC1V9wAMGmGgefe4z

---------

Co-authored-by: Claude Opus 5.5 <[email protected]>
blafourcade added a commit that referenced this pull request Oct 12, 2026
Brings #1003, which restores Stryker's per-test filtering under Vitest 5
(#912): without it, mutants survive with no test run, and the telemetry
and presentation scores fell under their floors.

Co-Authored-By: Claude Opus 5.5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01VWNxk63AGKkqE8HRqHLjGp
@aidd-bot aidd-bot Bot mentioned this pull request Oct 16, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Dependency update (dependabot)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant