Tooling Compatibility Matrix
Offline baseline for hardening and high or critical refactor tooling recommendations. This skill never fetches versions. Every emitted version must include verify-latest-at-execution: true and an executor task to verify that the chosen version is current and CVE-free before installation.
Standing rules
- Prefer existing project conventions when present.
- Use this matrix for deterministic first-pass versions and compatibility notes.
- Pair every install task with a build verification command.
- If a version or plugin compatibility is uncertain, mark it as
hypothesis and require verification before install.
- Web fetch remains denied for harness workers.
Java matrix
| Detected stack |
Baseline tooling |
Compatibility notes |
| Java 8 + Maven/Gradle |
JUnit 5.x via junit-bom, AssertJ 3.x, Mockito, JaCoCo 0.8.x, PIT Java-8-compatible line + pitest-junit5-plugin |
Choose a PIT line compatible with Java 8; verify plugin/JUnit 5 compatibility before install. |
| Java 11+ + Maven/Gradle |
JUnit 5.x via junit-bom, AssertJ 3.x, Mockito, ApprovalTests when snapshots help, JaCoCo 0.8.x, current PIT + pitest-junit5-plugin |
PIT >=1.15 requires Java 11+; plugin must match JUnit 5.x. |
| Existing JUnit 4 |
Keep JUnit 4 characterization if cheapest; add JUnit Vintage only when running JUnit 4 tests under JUnit Platform is required |
Do not migrate tests as part of refactor safety unless required for execution. |
Maven snippet templates
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.junit</groupId>
<artifactId>junit-bom</artifactId>
<version>${junit.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<scope>test</scope>
</dependency>
<plugin>
<groupId>org.pitest</groupId>
<artifactId>pitest-maven</artifactId>
<version>${pit.version}</version>
<dependencies>
<dependency>
<groupId>org.pitest</groupId>
<artifactId>pitest-junit5-plugin</artifactId>
<version>${pitest.junit5.plugin.version}</version>
</dependency>
</dependencies>
</plugin>
Gradle snippet templates
dependencies {
testImplementation(platform("org.junit:junit-bom:${junitVersion}"))
testImplementation("org.junit.jupiter:junit-jupiter")
testImplementation("org.assertj:assertj-core:${assertjVersion}")
}
test {
useJUnitPlatform()
}
JavaScript and TypeScript matrix
| Detected stack |
Baseline tooling |
Compatibility notes |
| Vite/Vitest present |
Vitest, Testing Library when UI is present, @stryker-mutator/core + Vitest runner/plugin |
Verify Node floor required by Stryker and runner plugin before install. |
| Jest present or non-Vite project |
Jest, Testing Library when UI is present, @stryker-mutator/core + Jest runner/plugin |
Keep Jest if already configured; avoid runner migration as safety-plan work. |
| No runner detected |
Prefer Vitest for modern ESM/Vite projects; prefer Jest for existing CommonJS or Jest ecosystem clues |
Record heuristic and verification task. |
package.json snippet template
{
"devDependencies": {
"vitest": "${vitestVersion}",
"@stryker-mutator/core": "${strykerVersion}"
},
"scripts": {
"test": "vitest run"
}
}
Python matrix
| Detected stack |
Baseline tooling |
Compatibility notes |
| pytest present or no runner |
pytest, coverage.py, mutmut |
mutmut is the default mutation option for simple projects; verify Python version support. |
| parallel or distributed mutation need |
pytest, coverage.py, cosmic-ray |
cosmic-ray is heavier; use only when parallel execution materially matters. |
| unittest-only project |
Keep unittest characterization initially; add pytest only if it lowers execution friction |
Do not migrate tests for style alone. |
Python snippet templates
[project.optional-dependencies]
test = [
"pytest==${pytestVersion}",
"coverage==${coverageVersion}",
"mutmut==${mutmutVersion}",
]
[tool.pytest.ini_options]
testpaths = ["tests"]
pytest==${pytestVersion}
coverage==${coverageVersion}
mutmut==${mutmutVersion}
Characterization tooling
| Need |
Baseline option |
Notes |
| Golden master / approval of large outputs |
ApprovalTests (Java, .NET, Python, JS variants) |
Anchors current output verbatim; good first net for monster methods and report-like outputs. |
| Characterizing persistence or external boundaries |
Testcontainers |
Real dependency in a disposable container; heavier — prefer at pinch points, not per unit. |
| Comparing JSON outputs |
JsonUnit (Java) or snapshot testing in JS/TS |
Whole-document asserts with ignorable fields; aligns with whole-object assert conventions. |
Verification commands
| Build tool |
Verification command |
| Maven |
mvn -q verify |
| Gradle wrapper |
./gradlew check |
| Gradle |
gradle check |
| npm/pnpm/yarn |
npm test / pnpm test / yarn test matching existing lockfile |
| Python |
pytest -q |
1---2name: tooling-compatibility-matrix3description: Trigger: tooling compatibility matrix, mutation coverage tooling. Offline baseline for test, coverage, and mutation tool choices.4license: Apache-2.05---67# Tooling Compatibility Matrix8Offline baseline for hardening and high or critical refactor tooling recommendations. This skill never fetches versions. Every emitted version must include `verify-latest-at-execution: true` and an executor task to verify that the chosen version is current and CVE-free before installation.910## Standing rules1112- Prefer existing project conventions when present.13- Use this matrix for deterministic first-pass versions and compatibility notes.14- Pair every install task with a build verification command.15- If a version or plugin compatibility is uncertain, mark it as `hypothesis` and require verification before install.16- Web fetch remains denied for harness workers.1718## Java matrix1920| Detected stack | Baseline tooling | Compatibility notes |21| --- | --- | --- |22| Java 8 + Maven/Gradle | JUnit 5.x via `junit-bom`, AssertJ 3.x, Mockito, JaCoCo 0.8.x, PIT Java-8-compatible line + `pitest-junit5-plugin` | Choose a PIT line compatible with Java 8; verify plugin/JUnit 5 compatibility before install. |23| Java 11+ + Maven/Gradle | JUnit 5.x via `junit-bom`, AssertJ 3.x, Mockito, ApprovalTests when snapshots help, JaCoCo 0.8.x, current PIT + `pitest-junit5-plugin` | PIT >=1.15 requires Java 11+; plugin must match JUnit 5.x. |24| Existing JUnit 4 | Keep JUnit 4 characterization if cheapest; add JUnit Vintage only when running JUnit 4 tests under JUnit Platform is required | Do not migrate tests as part of refactor safety unless required for execution. |2526### Maven snippet templates2728```xml29<dependencyManagement>30 <dependencies>31 <dependency>32 <groupId>org.junit</groupId>33 <artifactId>junit-bom</artifactId>34 <version>${junit.version}</version>35 <type>pom</type>36 <scope>import</scope>37 </dependency>38 </dependencies>39</dependencyManagement>4041<dependency>42 <groupId>org.junit.jupiter</groupId>43 <artifactId>junit-jupiter</artifactId>44 <scope>test</scope>45</dependency>4647<plugin>48 <groupId>org.pitest</groupId>49 <artifactId>pitest-maven</artifactId>50 <version>${pit.version}</version>51 <dependencies>52 <dependency>53 <groupId>org.pitest</groupId>54 <artifactId>pitest-junit5-plugin</artifactId>55 <version>${pitest.junit5.plugin.version}</version>56 </dependency>57 </dependencies>58</plugin>59```6061### Gradle snippet templates6263```gradle64dependencies {65 testImplementation(platform("org.junit:junit-bom:${junitVersion}"))66 testImplementation("org.junit.jupiter:junit-jupiter")67 testImplementation("org.assertj:assertj-core:${assertjVersion}")68}6970test {71 useJUnitPlatform()72}73```7475## JavaScript and TypeScript matrix7677| Detected stack | Baseline tooling | Compatibility notes |78| --- | --- | --- |79| Vite/Vitest present | Vitest, Testing Library when UI is present, `@stryker-mutator/core` + Vitest runner/plugin | Verify Node floor required by Stryker and runner plugin before install. |80| Jest present or non-Vite project | Jest, Testing Library when UI is present, `@stryker-mutator/core` + Jest runner/plugin | Keep Jest if already configured; avoid runner migration as safety-plan work. |81| No runner detected | Prefer Vitest for modern ESM/Vite projects; prefer Jest for existing CommonJS or Jest ecosystem clues | Record heuristic and verification task. |8283### `package.json` snippet template8485```json86{87 "devDependencies": {88 "vitest": "${vitestVersion}",89 "@stryker-mutator/core": "${strykerVersion}"90 },91 "scripts": {92 "test": "vitest run"93 }94}95```9697## Python matrix9899| Detected stack | Baseline tooling | Compatibility notes |100| --- | --- | --- |101| pytest present or no runner | pytest, coverage.py, mutmut | mutmut is the default mutation option for simple projects; verify Python version support. |102| parallel or distributed mutation need | pytest, coverage.py, cosmic-ray | cosmic-ray is heavier; use only when parallel execution materially matters. |103| unittest-only project | Keep unittest characterization initially; add pytest only if it lowers execution friction | Do not migrate tests for style alone. |104105### Python snippet templates106107```toml108[project.optional-dependencies]109test = [110 "pytest==${pytestVersion}",111 "coverage==${coverageVersion}",112 "mutmut==${mutmutVersion}",113]114115[tool.pytest.ini_options]116testpaths = ["tests"]117```118119```text120pytest==${pytestVersion}121coverage==${coverageVersion}122mutmut==${mutmutVersion}123```124125## Characterization tooling126127| Need | Baseline option | Notes |128| --- | --- | --- |129| Golden master / approval of large outputs | ApprovalTests (Java, .NET, Python, JS variants) | Anchors current output verbatim; good first net for monster methods and report-like outputs. |130| Characterizing persistence or external boundaries | Testcontainers | Real dependency in a disposable container; heavier — prefer at pinch points, not per unit. |131| Comparing JSON outputs | JsonUnit (Java) or snapshot testing in JS/TS | Whole-document asserts with ignorable fields; aligns with whole-object assert conventions. |132133## Verification commands134135| Build tool | Verification command |136| --- | --- |137| Maven | `mvn -q verify` |138| Gradle wrapper | `./gradlew check` |139| Gradle | `gradle check` |140| npm/pnpm/yarn | `npm test` / `pnpm test` / `yarn test` matching existing lockfile |141| Python | `pytest -q` |