diff --git a/.changeset/checker-reports-program-digest.md b/.changeset/checker-reports-program-digest.md deleted file mode 100644 index bc124f563..000000000 --- a/.changeset/checker-reports-program-digest.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"@systemfsoftware/stryker-js-plugin-interface": major -"@systemfsoftware/stryker-js-typescript-checker": minor ---- - -A checker plugin must now report the program it loaded. `CheckerService` gains a -`digest` holding the digest of that program, the checker RPC exposes it as -`digest`, and a TypeScript checker answers with the digest of the TypeScript -program it built: the hashed content of every source file the program loaded -(project files, declaration files and the ones TypeScript ships), the tsconfig -files it was built from, the TypeScript version, the checker's own version, and -its configured options. The digest is stable for an unchanged program and moves -when any of those change. - -Breaking for checker plugin authors: a checker worker that does not answer the -`digest` RPC no longer works with the engine. Add a `digest` handler that -returns the digest of everything your check reads. diff --git a/.changeset/closure-dry-run-module-evidence.md b/.changeset/closure-dry-run-module-evidence.md deleted file mode 100644 index 4e67410a4..000000000 --- a/.changeset/closure-dry-run-module-evidence.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": minor ---- - -A dry run now records the modules each test file evaluated, and a later incremental run uses them. A test file that loads a module only through a computed dynamic `import()` is keyed to the modules it actually loaded: an edit to one of them re-runs that test file's mutants, while an edit to any file outside them keeps their verdicts. When the runtime target is not a project file, such as a `data:` URL, the test file stays keyed to the whole project and its mutants re-run on any change. diff --git a/.changeset/closure-evidence-modules.md b/.changeset/closure-evidence-modules.md deleted file mode 100644 index 3aea50098..000000000 --- a/.changeset/closure-evidence-modules.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": minor ---- - -`ImportClosure.analyzeImportClosure` accepts `observedModules`: for each test file, the modules a dry run saw it load. Each one that names an existing file joins that test file's closure. A test file that reaches a computed dynamic `import()` then closes around the files it actually loaded, instead of falling back to the whole project. A key that names no existing file keeps the closure open. diff --git a/.changeset/compile-error-verdicts-reusable.md b/.changeset/compile-error-verdicts-reusable.md deleted file mode 100644 index 9b7f473d8..000000000 --- a/.changeset/compile-error-verdicts-reusable.md +++ /dev/null @@ -1,17 +0,0 @@ ---- -"@systemfsoftware/stryker-js": major -"@systemfsoftware/stryker-js-cli-contract": minor ---- - -An incremental run now reuses `CompileError` verdicts instead of type-checking -every one again. A verdict is kept only while nothing that fed the check -changed: the mutant and its replacement, every file the checker's TypeScript -program loaded (including transitive and bundled declaration files), every -tsconfig in the `extends` chain and its project references, the TypeScript -version, the checker version and its options. Otherwise the mutant is -re-checked. The reuse stream line reports such refusals as `programChanged` -(or `closureAnalysisFailed` when the closure analysis failed); lines without a -count still decode. - -Breaking: a configured checker must answer the new `digest` RPC, so upgrade -checker plugins together with this release. diff --git a/.changeset/dry-run-collects-evaluated-modules.md b/.changeset/dry-run-collects-evaluated-modules.md deleted file mode 100644 index 79c5c0a46..000000000 --- a/.changeset/dry-run-collects-evaluated-modules.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js-vitest-runner": minor ---- - -The dry run now reports, as `testFileModules`, the modules each test file evaluated, including modules it imported at runtime through a computed `import()`. Mutant runs are unaffected. On Vitest setups where this information is not available, the field is left out. diff --git a/.changeset/dry-run-reports-evaluated-modules.md b/.changeset/dry-run-reports-evaluated-modules.md deleted file mode 100644 index 105be93dd..000000000 --- a/.changeset/dry-run-reports-evaluated-modules.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js-plugin-interface": minor ---- - -A complete dry-run result can carry `testFileModules`: for each test file, the modules it evaluated while it ran. Test runners that know which modules each test file loaded can report them, so incremental runs can key a test file on what it actually loaded. diff --git a/.changeset/effect-rc116-and-toolchain-bump.md b/.changeset/effect-rc116-and-toolchain-bump.md deleted file mode 100644 index ff0dfc829..000000000 --- a/.changeset/effect-rc116-and-toolchain-bump.md +++ /dev/null @@ -1,21 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch -"@systemfsoftware/stryker-js-html-reporter": patch -"@systemfsoftware/stryker-js-plugin-interface": patch -"@systemfsoftware/stryker-js-plugin-runtime": patch -"@systemfsoftware/stryker-js-typescript-checker": patch -"@systemfsoftware/stryker-js-vitest-runner": patch -"@systemfsoftware/stryker-ignorer-interface": patch -"@systemfsoftware/stryker-ignorer-angular": patch -"@systemfsoftware/stryker-ignorer-effect-schema-declarations": patch -"@systemfsoftware/stryker-ignorer-in-source-vitest-block": patch -"@systemfsoftware/stryker-ignorer-kit": patch -"@systemfsoftware/stryker-js-instrumenter": patch -"@systemfsoftware/oxlint-ignorer-config": patch ---- - -Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. - -- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. -- The test-runner plugin supports the framework's fifth major release. -- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. diff --git a/.changeset/keep-module-level-verdict-outside-closures.md b/.changeset/keep-module-level-verdict-outside-closures.md deleted file mode 100644 index 8d0ab25b5..000000000 --- a/.changeset/keep-module-level-verdict-outside-closures.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -An incremental mutation run now reuses the verdicts of module-level mutants when an edit cannot reach any test that exercises them, instead of running them again on every edit. An edit that could still reach such a mutant continues to invalidate its verdict, so no previously passing result is kept by mistake. diff --git a/.changeset/linked-package-imports-resolve-from-their-own-directory.md b/.changeset/linked-package-imports-resolve-from-their-own-directory.md deleted file mode 100644 index 914a2930c..000000000 --- a/.changeset/linked-package-imports-resolve-from-their-own-directory.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -An incremental run in a workspace now keeps the verdicts of mutants whose tests reach a linked sibling package. Stryker used to look up that package's own imports under the project root instead of next to the package, so an import the project does not install itself (a dependency only the sibling declares) went unresolved. Every test closure through that package then counted as open, and any edit anywhere re-ran its mutants. Bare imports now resolve the way Node resolves them, from the importing file's directory upwards. diff --git a/.changeset/petite-insects-feel.md b/.changeset/petite-insects-feel.md deleted file mode 100644 index 44356c3ab..000000000 --- a/.changeset/petite-insects-feel.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": minor ---- - -A dry-run-only run with incremental mode on publishes its dry-run coverage to the incremental file, keeping any verdicts already there, so a later run that reads the file through incrementalSources skips its own dry run. The run-inputs digest no longer covers dryRunOnly, so a preflight and the runs that reuse its coverage share one digest; existing caches are refused once with runInputsChanged. diff --git a/.changeset/plan-costs-only-reruns.md b/.changeset/plan-costs-only-reruns.md deleted file mode 100644 index 01d970145..000000000 --- a/.changeset/plan-costs-only-reruns.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -A shard plan now prices only the mutants a run will actually execute: mutants the incremental cache will reuse are planned at zero cost instead of their previous run time, so an unchanged project plans a single shard with zero predicted seconds. The plan still lists every mutant, so sharded runs keep reporting the full mutant set. diff --git a/.changeset/plan-reuse-observability.md b/.changeset/plan-reuse-observability.md deleted file mode 100644 index 3f7dad75c..000000000 --- a/.changeset/plan-reuse-observability.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -`stryker plan` now reports, per project, how many mutants were reused, how many will run, the refused count by reason, and the reason any whole incremental report was discarded — on the machine `plan` stream line and as one human line per project. A plan that refuses reuse is no longer silent: the next warm run names the reason instead of only pricing a full run. diff --git a/.changeset/plan-reuse-report.md b/.changeset/plan-reuse-report.md deleted file mode 100644 index 7b465081c..000000000 --- a/.changeset/plan-reuse-report.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js-cli-contract": minor ---- - -A `plan` stream line can now carry a `projects` array naming, for every planned project, how many mutants were reused, how many will run, the refused count per reason, and the reason a whole incremental report was discarded. The machine stream version is unchanged: a stream line without `projects` still decodes, and consumers that read reuse numbers from a plan can now see why a plan scheduled work it expected to reuse. diff --git a/.changeset/plan-stream-location.md b/.changeset/plan-stream-location.md deleted file mode 100644 index a3bb95f37..000000000 --- a/.changeset/plan-stream-location.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -Keep the plan's progress stream out of the projects it prices. - -Planning a monorepo from its root walked into the first project and left -`reports/mutation-stream.jsonl` there, which made that project's file set differ -from the set its recorded verdicts were computed against. Running that project -afterwards then refused every verdict as `closureChanged` and mutated everything -again. A relative progress stream file is now resolved against the directory you -invoked the command from, so a plan's stream lands beside the plan output and a -following run of any project reuses its recorded verdicts. diff --git a/.changeset/record-check-time-for-untested-verdicts.md b/.changeset/record-check-time-for-untested-verdicts.md deleted file mode 100644 index 7f840a387..000000000 --- a/.changeset/record-check-time-for-untested-verdicts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": minor ---- - -A verdict the engine decided without running a test now records the cost it measured. A mutant whose checker rejected it, or which no test covered while a checker looked at it, records its share of that check call's wall time; a mutant every configured checker ignored, or one left uncovered with no checker configured, records zero. A static mutant that a checker rejected carries that check time in the `StaticVerdict` event's `costMs` as well. A shard plan therefore balances on recorded times instead of pricing those verdicts at a whole-suite prediction, which previously dominated the plan. Killed, Survived and Timeout verdicts keep the measured test time they already recorded, and the run budget still counts only the verdicts that ran a test. diff --git a/.changeset/shard-costs-union.md b/.changeset/shard-costs-union.md deleted file mode 100644 index 3a72898df..000000000 --- a/.changeset/shard-costs-union.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -A merged shard report now carries the cost record of every shard, so a later plan sees measured timings for all mutants. Previously only the first shard's costs survived the merge, and the mutants of every other shard fell back to their predicted cost whenever the next plan was derived. diff --git a/.changeset/tangy-parents-tap.md b/.changeset/tangy-parents-tap.md deleted file mode 100644 index 52af64a50..000000000 --- a/.changeset/tangy-parents-tap.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js-cli-contract": patch ---- - -The published package now includes its changelog. diff --git a/.changeset/tsgo-language-service-plugin.md b/.changeset/tsgo-language-service-plugin.md deleted file mode 100644 index 1c8039809..000000000 --- a/.changeset/tsgo-language-service-plugin.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch -"@systemfsoftware/stryker-js-instrumenter": patch -"@systemfsoftware/stryker-js-plugin-interface": patch -"@systemfsoftware/stryker-js-plugin-runtime": patch -"@systemfsoftware/stryker-js-typescript-checker": patch -"@systemfsoftware/stryker-js-html-reporter": patch -"@systemfsoftware/stryker-js-cli-contract": patch -"@systemfsoftware/stryker-framework-interface": patch -"@systemfsoftware/stryker-js-angular": patch -"@systemfsoftware/stryker-js-svelte": patch -"@systemfsoftware/stryker-ignorer-interface": patch -"@systemfsoftware/stryker-ignorer-effect-schema-declarations": patch -"@systemfsoftware/stryker-ignorer-in-source-vitest-block": patch -"@systemfsoftware/oxlint-ignorer-config": patch ---- - -Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. diff --git a/.changeset/unrelated-edits-keep-verdicts.md b/.changeset/unrelated-edits-keep-verdicts.md deleted file mode 100644 index 7c071cec6..000000000 --- a/.changeset/unrelated-edits-keep-verdicts.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js": patch ---- - -An incremental run now keeps a mutant's previous verdict when the files its covering tests can reach are unchanged, even though other files in the project changed. Editing an unrelated source file no longer re-runs verdicts it cannot affect: a verdict is discarded only when a file the mutant's covering tests can import — including sources reached through a workspace link — has itself changed. A setup file the runner reports from inside `node_modules` is hashed into the closures it feeds instead of making every verdict suspect, while installed packages stay covered by the lockfile and the package manifest. diff --git a/.changeset/vitest-5-peer-floor.md b/.changeset/vitest-5-peer-floor.md deleted file mode 100644 index 847b5bdee..000000000 --- a/.changeset/vitest-5-peer-floor.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"@systemfsoftware/stryker-js-vitest-runner": major ---- - -Vitest 4 is no longer supported: the `vitest` peer dependency is now `^5`. Upgrade your project to Vitest 5 before upgrading this package. diff --git a/packages/frameworks/angular/CHANGELOG.md b/packages/frameworks/angular/CHANGELOG.md index 75658424f..7c4c4293b 100644 --- a/packages/frameworks/angular/CHANGELOG.md +++ b/packages/frameworks/angular/CHANGELOG.md @@ -1,5 +1,9 @@ # @systemfsoftware/stryker-js-angular +## 0.0.1 + +Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.0.0 ### Minor Changes diff --git a/packages/frameworks/angular/package.json b/packages/frameworks/angular/package.json index e38e273be..c8698b10f 100644 --- a/packages/frameworks/angular/package.json +++ b/packages/frameworks/angular/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-js-angular", "license": "Apache-2.0", - "version": "0.0.0", + "version": "0.0.1", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/frameworks/interface/CHANGELOG.md b/packages/frameworks/interface/CHANGELOG.md index a75ccfb80..d66f3275f 100644 --- a/packages/frameworks/interface/CHANGELOG.md +++ b/packages/frameworks/interface/CHANGELOG.md @@ -1,5 +1,9 @@ # @systemfsoftware/stryker-framework-interface +## 0.0.1 + +Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.0.0 ### Minor Changes diff --git a/packages/frameworks/interface/package.json b/packages/frameworks/interface/package.json index 851375847..b01740c7c 100644 --- a/packages/frameworks/interface/package.json +++ b/packages/frameworks/interface/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-framework-interface", "license": "Apache-2.0", - "version": "0.0.0", + "version": "0.0.1", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/frameworks/svelte/CHANGELOG.md b/packages/frameworks/svelte/CHANGELOG.md index 77dfd329d..bc5ccdb93 100644 --- a/packages/frameworks/svelte/CHANGELOG.md +++ b/packages/frameworks/svelte/CHANGELOG.md @@ -1,5 +1,9 @@ # @systemfsoftware/stryker-js-svelte +## 0.0.2 + +Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.0.1 ### Patch Changes diff --git a/packages/frameworks/svelte/package.json b/packages/frameworks/svelte/package.json index 6c9791353..80b9ae125 100644 --- a/packages/frameworks/svelte/package.json +++ b/packages/frameworks/svelte/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-js-svelte", "license": "Apache-2.0", - "version": "0.0.1", + "version": "0.0.2", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/ignorers/angular/CHANGELOG.md b/packages/ignorers/angular/CHANGELOG.md index 1bfb107c3..47e2e40f5 100644 --- a/packages/ignorers/angular/CHANGELOG.md +++ b/packages/ignorers/angular/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-ignorer-angular +## 0.1.3 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. + ## 0.1.2 ### Patch Changes diff --git a/packages/ignorers/angular/package.json b/packages/ignorers/angular/package.json index d62221b8a..92eb2669b 100644 --- a/packages/ignorers/angular/package.json +++ b/packages/ignorers/angular/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-ignorer-angular", "license": "Apache-2.0", - "version": "0.1.2", + "version": "0.1.3", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/ignorers/effect-schema-declarations/CHANGELOG.md b/packages/ignorers/effect-schema-declarations/CHANGELOG.md index 6bd7f9e71..375d94677 100644 --- a/packages/ignorers/effect-schema-declarations/CHANGELOG.md +++ b/packages/ignorers/effect-schema-declarations/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-ignorer-effect-schema-declarations +## 0.2.1 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.2.0 ### Minor Changes diff --git a/packages/ignorers/effect-schema-declarations/package.json b/packages/ignorers/effect-schema-declarations/package.json index fb734dcd2..69cb4322b 100644 --- a/packages/ignorers/effect-schema-declarations/package.json +++ b/packages/ignorers/effect-schema-declarations/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-ignorer-effect-schema-declarations", "license": "Apache-2.0", - "version": "0.2.0", + "version": "0.2.1", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/ignorers/in-source-vitest-block/CHANGELOG.md b/packages/ignorers/in-source-vitest-block/CHANGELOG.md index 1528a38d6..bc132a5de 100644 --- a/packages/ignorers/in-source-vitest-block/CHANGELOG.md +++ b/packages/ignorers/in-source-vitest-block/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-ignorer-in-source-vitest-block +## 0.1.2 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.1.1 ### Patch Changes diff --git a/packages/ignorers/in-source-vitest-block/package.json b/packages/ignorers/in-source-vitest-block/package.json index 10193a04f..ce83bc8cd 100644 --- a/packages/ignorers/in-source-vitest-block/package.json +++ b/packages/ignorers/in-source-vitest-block/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-ignorer-in-source-vitest-block", "license": "Apache-2.0", - "version": "0.1.1", + "version": "0.1.2", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/ignorers/interface/CHANGELOG.md b/packages/ignorers/interface/CHANGELOG.md index 796d84530..530f9d899 100644 --- a/packages/ignorers/interface/CHANGELOG.md +++ b/packages/ignorers/interface/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-ignorer-interface +## 0.1.2 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.1.1 ### Patch Changes diff --git a/packages/ignorers/interface/package.json b/packages/ignorers/interface/package.json index 295860207..4fd1fef84 100644 --- a/packages/ignorers/interface/package.json +++ b/packages/ignorers/interface/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-ignorer-interface", "license": "Apache-2.0", - "version": "0.1.1", + "version": "0.1.2", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/ignorers/kit/CHANGELOG.md b/packages/ignorers/kit/CHANGELOG.md index aed7d6fb8..bb9f2879c 100644 --- a/packages/ignorers/kit/CHANGELOG.md +++ b/packages/ignorers/kit/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-ignorer-kit +## 0.1.2 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. + ## 0.1.1 ### Patch Changes diff --git a/packages/ignorers/kit/package.json b/packages/ignorers/kit/package.json index 2aa5b3838..d61262333 100644 --- a/packages/ignorers/kit/package.json +++ b/packages/ignorers/kit/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-ignorer-kit", "license": "Apache-2.0", - "version": "0.1.1", + "version": "0.1.2", "author": "Ryan Lee ", "repository": { "type": "git", diff --git a/packages/stryker-js-cli-contract/CHANGELOG.md b/packages/stryker-js-cli-contract/CHANGELOG.md index 831a4f658..981d333b4 100644 --- a/packages/stryker-js-cli-contract/CHANGELOG.md +++ b/packages/stryker-js-cli-contract/CHANGELOG.md @@ -1,5 +1,20 @@ # @systemfsoftware/stryker-js-cli-contract +## 0.4.0 + +An incremental run now reuses `CompileError` verdicts instead of type-checking +every one again. A verdict is kept only while nothing that fed the check +changed: the mutant and its replacement, every file the checker's TypeScript +program loaded (including transitive and bundled declaration files), every +tsconfig in the `extends` chain and its project references, the TypeScript +version, the checker version and its options. Otherwise the mutant is +re-checked. The reuse stream line reports such refusals as `programChanged` +(or `closureAnalysisFailed` when the closure analysis failed); lines without a +count still decode. + +Breaking: a configured checker must answer the new `digest` RPC, so upgrade +checker plugins together with this release. A `plan` stream line can now carry a `projects` array naming, for every planned project, how many mutants were reused, how many will run, the refused count per reason, and the reason a whole incremental report was discarded. The machine stream version is unchanged: a stream line without `projects` still decodes, and consumers that read reuse numbers from a plan can now see why a plan scheduled work it expected to reuse. The published package now includes its changelog. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.3.1 ### Patch Changes diff --git a/packages/stryker-js-cli-contract/package.json b/packages/stryker-js-cli-contract/package.json index 5b06c1f21..4ac013e7d 100644 --- a/packages/stryker-js-cli-contract/package.json +++ b/packages/stryker-js-cli-contract/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-cli-contract", - "version": "0.3.1", + "version": "0.4.0", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-html-reporter/CHANGELOG.md b/packages/stryker-js-html-reporter/CHANGELOG.md index 0112b6bc4..bb226d8c4 100644 --- a/packages/stryker-js-html-reporter/CHANGELOG.md +++ b/packages/stryker-js-html-reporter/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-js-html-reporter +## 6.0.3 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 6.0.2 ### Patch Changes diff --git a/packages/stryker-js-html-reporter/package.json b/packages/stryker-js-html-reporter/package.json index b69b5963a..1a6831a7e 100644 --- a/packages/stryker-js-html-reporter/package.json +++ b/packages/stryker-js-html-reporter/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-html-reporter", - "version": "6.0.2", + "version": "6.0.3", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-instrumenter/CHANGELOG.md b/packages/stryker-js-instrumenter/CHANGELOG.md index 5b01bcf1a..8f6b50065 100644 --- a/packages/stryker-js-instrumenter/CHANGELOG.md +++ b/packages/stryker-js-instrumenter/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-js-instrumenter +## 12.1.2 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 12.1.1 ### Patch Changes diff --git a/packages/stryker-js-instrumenter/package.json b/packages/stryker-js-instrumenter/package.json index a3ef5e50b..ac02edbd6 100644 --- a/packages/stryker-js-instrumenter/package.json +++ b/packages/stryker-js-instrumenter/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-instrumenter", - "version": "12.1.1", + "version": "12.1.2", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-plugin-interface/CHANGELOG.md b/packages/stryker-js-plugin-interface/CHANGELOG.md index 4fb3db579..d8ce7b577 100644 --- a/packages/stryker-js-plugin-interface/CHANGELOG.md +++ b/packages/stryker-js-plugin-interface/CHANGELOG.md @@ -1,5 +1,24 @@ # @systemfsoftware/stryker-js-plugin-interface +## 15.0.0 + +A checker plugin must now report the program it loaded. `CheckerService` gains a +`digest` holding the digest of that program, the checker RPC exposes it as +`digest`, and a TypeScript checker answers with the digest of the TypeScript +program it built: the hashed content of every source file the program loaded +(project files, declaration files and the ones TypeScript ships), the tsconfig +files it was built from, the TypeScript version, the checker's own version, and +its configured options. The digest is stable for an unchanged program and moves +when any of those change. + +Breaking for checker plugin authors: a checker worker that does not answer the +`digest` RPC no longer works with the engine. Add a `digest` handler that +returns the digest of everything your check reads. A complete dry-run result can carry `testFileModules`: for each test file, the modules it evaluated while it ran. Test runners that know which modules each test file loaded can report them, so incremental runs can key a test file on what it actually loaded. Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 14.0.0 ### Major Changes diff --git a/packages/stryker-js-plugin-interface/package.json b/packages/stryker-js-plugin-interface/package.json index b6e0f5571..f1a14a8c0 100644 --- a/packages/stryker-js-plugin-interface/package.json +++ b/packages/stryker-js-plugin-interface/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-plugin-interface", - "version": "14.0.0", + "version": "15.0.0", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-plugin-runtime/CHANGELOG.md b/packages/stryker-js-plugin-runtime/CHANGELOG.md index 0bfc3b19f..8d208eb26 100644 --- a/packages/stryker-js-plugin-runtime/CHANGELOG.md +++ b/packages/stryker-js-plugin-runtime/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-js-plugin-runtime +## 7.0.3 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 7.0.2 ### Patch Changes diff --git a/packages/stryker-js-plugin-runtime/package.json b/packages/stryker-js-plugin-runtime/package.json index 8bce8e9f0..07e1c30fa 100644 --- a/packages/stryker-js-plugin-runtime/package.json +++ b/packages/stryker-js-plugin-runtime/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-plugin-runtime", - "version": "7.0.2", + "version": "7.0.3", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-typescript-checker/CHANGELOG.md b/packages/stryker-js-typescript-checker/CHANGELOG.md index 309f0da8f..6553f2619 100644 --- a/packages/stryker-js-typescript-checker/CHANGELOG.md +++ b/packages/stryker-js-typescript-checker/CHANGELOG.md @@ -1,5 +1,24 @@ # @systemfsoftware/stryker-js-typescript-checker +## 8.3.0 + +A checker plugin must now report the program it loaded. `CheckerService` gains a +`digest` holding the digest of that program, the checker RPC exposes it as +`digest`, and a TypeScript checker answers with the digest of the TypeScript +program it built: the hashed content of every source file the program loaded +(project files, declaration files and the ones TypeScript ships), the tsconfig +files it was built from, the TypeScript version, the checker's own version, and +its configured options. The digest is stable for an unchanged program and moves +when any of those change. + +Breaking for checker plugin authors: a checker worker that does not answer the +`digest` RPC no longer works with the engine. Add a `digest` handler that +returns the digest of everything your check reads. Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 8.2.1 ### Patch Changes diff --git a/packages/stryker-js-typescript-checker/package.json b/packages/stryker-js-typescript-checker/package.json index 0f9268f53..f4b3c5bce 100644 --- a/packages/stryker-js-typescript-checker/package.json +++ b/packages/stryker-js-typescript-checker/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-typescript-checker", - "version": "8.2.1", + "version": "8.3.0", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js-vitest-runner/CHANGELOG.md b/packages/stryker-js-vitest-runner/CHANGELOG.md index 9e4653004..e3556dbf6 100644 --- a/packages/stryker-js-vitest-runner/CHANGELOG.md +++ b/packages/stryker-js-vitest-runner/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/stryker-js-vitest-runner +## 9.0.0 + +The dry run now reports, as `testFileModules`, the modules each test file evaluated, including modules it imported at runtime through a computed `import()`. Mutant runs are unaffected. On Vitest setups where this information is not available, the field is left out. Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Vitest 4 is no longer supported: the `vitest` peer dependency is now `^5`. Upgrade your project to Vitest 5 before upgrading this package. + ## 8.1.1 ### Patch Changes diff --git a/packages/stryker-js-vitest-runner/package.json b/packages/stryker-js-vitest-runner/package.json index 950a99c82..89caf4df8 100644 --- a/packages/stryker-js-vitest-runner/package.json +++ b/packages/stryker-js-vitest-runner/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js-vitest-runner", - "version": "8.1.1", + "version": "9.0.0", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/stryker-js/CHANGELOG.md b/packages/stryker-js/CHANGELOG.md index d252f60f9..73fc405ab 100644 --- a/packages/stryker-js/CHANGELOG.md +++ b/packages/stryker-js/CHANGELOG.md @@ -1,5 +1,32 @@ # @systemfsoftware/stryker-js +## 18.0.0 + +A dry run now records the modules each test file evaluated, and a later incremental run uses them. A test file that loads a module only through a computed dynamic `import()` is keyed to the modules it actually loaded: an edit to one of them re-runs that test file's mutants, while an edit to any file outside them keeps their verdicts. When the runtime target is not a project file, such as a `data:` URL, the test file stays keyed to the whole project and its mutants re-run on any change. `ImportClosure.analyzeImportClosure` accepts `observedModules`: for each test file, the modules a dry run saw it load. Each one that names an existing file joins that test file's closure. A test file that reaches a computed dynamic `import()` then closes around the files it actually loaded, instead of falling back to the whole project. A key that names no existing file keeps the closure open. An incremental run now reuses `CompileError` verdicts instead of type-checking +every one again. A verdict is kept only while nothing that fed the check +changed: the mutant and its replacement, every file the checker's TypeScript +program loaded (including transitive and bundled declaration files), every +tsconfig in the `extends` chain and its project references, the TypeScript +version, the checker version and its options. Otherwise the mutant is +re-checked. The reuse stream line reports such refusals as `programChanged` +(or `closureAnalysisFailed` when the closure analysis failed); lines without a +count still decode. + +Breaking: a configured checker must answer the new `digest` RPC, so upgrade +checker plugins together with this release. Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. An incremental mutation run now reuses the verdicts of module-level mutants when an edit cannot reach any test that exercises them, instead of running them again on every edit. An edit that could still reach such a mutant continues to invalidate its verdict, so no previously passing result is kept by mistake. An incremental run in a workspace now keeps the verdicts of mutants whose tests reach a linked sibling package. Stryker used to look up that package's own imports under the project root instead of next to the package, so an import the project does not install itself (a dependency only the sibling declares) went unresolved. Every test closure through that package then counted as open, and any edit anywhere re-ran its mutants. Bare imports now resolve the way Node resolves them, from the importing file's directory upwards. A dry-run-only run with incremental mode on publishes its dry-run coverage to the incremental file, keeping any verdicts already there, so a later run that reads the file through incrementalSources skips its own dry run. The run-inputs digest no longer covers dryRunOnly, so a preflight and the runs that reuse its coverage share one digest; existing caches are refused once with runInputsChanged. A shard plan now prices only the mutants a run will actually execute: mutants the incremental cache will reuse are planned at zero cost instead of their previous run time, so an unchanged project plans a single shard with zero predicted seconds. The plan still lists every mutant, so sharded runs keep reporting the full mutant set. `stryker plan` now reports, per project, how many mutants were reused, how many will run, the refused count by reason, and the reason any whole incremental report was discarded — on the machine `plan` stream line and as one human line per project. A plan that refuses reuse is no longer silent: the next warm run names the reason instead of only pricing a full run. Keep the plan's progress stream out of the projects it prices. + +Planning a monorepo from its root walked into the first project and left +`reports/mutation-stream.jsonl` there, which made that project's file set differ +from the set its recorded verdicts were computed against. Running that project +afterwards then refused every verdict as `closureChanged` and mutated everything +again. A relative progress stream file is now resolved against the directory you +invoked the command from, so a plan's stream lands beside the plan output and a +following run of any project reuses its recorded verdicts. A verdict the engine decided without running a test now records the cost it measured. A mutant whose checker rejected it, or which no test covered while a checker looked at it, records its share of that check call's wall time; a mutant every configured checker ignored, or one left uncovered with no checker configured, records zero. A static mutant that a checker rejected carries that check time in the `StaticVerdict` event's `costMs` as well. A shard plan therefore balances on recorded times instead of pricing those verdicts at a whole-suite prediction, which previously dominated the plan. Killed, Survived and Timeout verdicts keep the measured test time they already recorded, and the run budget still counts only the verdicts that ran a test. A merged shard report now carries the cost record of every shard, so a later plan sees measured timings for all mutants. Previously only the first shard's costs survived the merge, and the mutants of every other shard fell back to their predicted cost whenever the next plan was derived. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. An incremental run now keeps a mutant's previous verdict when the files its covering tests can reach are unchanged, even though other files in the project changed. Editing an unrelated source file no longer re-runs verdicts it cannot affect: a verdict is discarded only when a file the mutant's covering tests can import — including sources reached through a workspace link — has itself changed. A setup file the runner reports from inside `node_modules` is hashed into the closures it feeds instead of making every verdict suspect, while installed packages stay covered by the lockfile and the package manifest. + ## 17.0.2 ### Patch Changes diff --git a/packages/stryker-js/package.json b/packages/stryker-js/package.json index 3b6522af8..c75bad236 100644 --- a/packages/stryker-js/package.json +++ b/packages/stryker-js/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/stryker-js", - "version": "17.0.2", + "version": "18.0.0", "repository": { "type": "git", "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git", diff --git a/packages/toolchain/oxlint-ignorer-config/CHANGELOG.md b/packages/toolchain/oxlint-ignorer-config/CHANGELOG.md index f6100f389..ec40dfae4 100644 --- a/packages/toolchain/oxlint-ignorer-config/CHANGELOG.md +++ b/packages/toolchain/oxlint-ignorer-config/CHANGELOG.md @@ -1,5 +1,13 @@ # @systemfsoftware/oxlint-ignorer-config +## 0.1.2 + +Effect moves to `4.0.0-rc.117`, together with the `@effect/*` packages these libraries use. Projects that install `effect` next to them need the same release. + +- The TypeScript checker and test-runner workers now bundle their own runtime, so the only modules they load from your project are the TypeScript compiler and your test framework. +- The test-runner plugin supports the framework's fifth major release. +- The ignorer interface re-exports the `oxc-parser` 0.150 AST, in which `FormalParameterRest.decorators` is `Array`. Enable the `@effect/language-service` tsgo plugin in every source package's `tsconfig.app.json` and `tsconfig.test.json`, and bump `@effect/tsgo` to `^0.50.0`. This turns on Effect-aware diagnostics during `effect-tsgo` type checking; it changes no runtime behaviour or public API. + ## 0.1.1 ### Patch Changes diff --git a/packages/toolchain/oxlint-ignorer-config/package.json b/packages/toolchain/oxlint-ignorer-config/package.json index 8635e15b7..b8c618fd6 100644 --- a/packages/toolchain/oxlint-ignorer-config/package.json +++ b/packages/toolchain/oxlint-ignorer-config/package.json @@ -1,6 +1,6 @@ { "name": "@systemfsoftware/oxlint-ignorer-config", - "version": "0.1.1", + "version": "0.1.2", "description": "The lint preset for an ignorer package: one path per decision, no casts on foreign data, and no StrykerJS runtime behind an ignorer", "keywords": [ "oxlint", diff --git a/test/e2e-core/CHANGELOG.md b/test/e2e-core/CHANGELOG.md new file mode 100644 index 000000000..4eefdb37f --- /dev/null +++ b/test/e2e-core/CHANGELOG.md @@ -0,0 +1,5 @@ +# @systemfsoftware/stryker-e2e-core + +## 0.1.1 + +Updated dependency @systemfsoftware/stryker-ignorer-effect-schema-declarations to 0.2.1 diff --git a/test/e2e-core/package.json b/test/e2e-core/package.json index 1c0e7c3df..9ee235fce 100644 --- a/test/e2e-core/package.json +++ b/test/e2e-core/package.json @@ -1,7 +1,7 @@ { "name": "@systemfsoftware/stryker-e2e-core", "private": true, - "version": "0.1.0", + "version": "0.1.1", "description": "The e2e lane's functional core: annotation parsing, mutant matching, coverage closure, stream decoding and the witness registry. Imports contract packages only, never a Stryker implementation.", "license": "Apache-2.0", "type": "module",