@systemfsoftware/stryker-js 15.0.1 → 16.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,39 @@
1
1
  # @systemfsoftware/stryker-js
2
2
 
3
+ ## 16.0.0
4
+
5
+ ### Major Changes
6
+
7
+ - Mutation testing is now incremental by default: `incremental` defaults to `true`, so an unchanged mutant whose covering tests are unchanged is re-used instead of re-run. `--full` (aliasing the old `--force`) re-verifies every mutant, ignoring the cache and the persisted dry run. The `verdict` stream event records `incrementalMode` (`incremental` or `full`). A run with no reusable cache falls back to a full run as before.
8
+
9
+ - The incremental report and its checkpoints now record a `costs` entry for every mutant: the predicted milliseconds from the measured dry-run times of its covering tests plus the run's fixed overhead, the wall time of its last executed run, and its covering-test count. A verdict reused from an earlier run carries its recorded `actualMs` forward instead of losing it. The incremental cache layout moves to version `3`, so a report written by an earlier release is discarded rather than reused.
10
+
11
+ - A mutation run now starts only on main CI. The `run` command, the programmatic run entry point, and every other surface that begins a mutation run refuse to start unless the process runs under GitHub Actions (`GITHUB_ACTIONS=true`); anything else — a developer machine, a fork, or another CI — exits non-zero instead of running mutants. A refused run ends the machine-readable output with a new `refused` event whose `rule` is `mutation-runs-on-main-ci`, and the machine-stream schema version is now `3.0`. Dry runs (`--dryRunOnly`), `--version`, and config and help commands are unaffected.
12
+
13
+ - The old report-merge command becomes `merge`, which now reads the shard plan and the per-shard report directories and combines them into one mutation report and a per-project incremental report. A merge fails, naming the mutants, when a planned mutant is missing from its shard report or reported by two shards. A new shard mode runs exactly the mutants of one shard, spawning a child run per project the shard lists, so a plan can be executed across parallel jobs and merged afterwards; mutants outside a shard are neither run nor reported.
14
+
15
+ - The TypeScript checker now applies Trivial Compiler Equivalence (Papadakis et al., ICSE 2015). Each mutant of a file is emitted to JavaScript from the project's own TypeScript configuration in transpile-only mode, normalized, and compared with the original file's emit and with the mutants already emitted at the same site. A mutant whose emit equals the original's is dropped as `Ignored` with reason `equivalent-to-original: tce`; one that equals an earlier same-site mutant's is dropped with `duplicate-at-site: tce`; every mutant whose emit differs is kept, so the check never removes a mutant that changes the program. Checkers gain an `ignored` result variant carrying the suppression reason, and a run publishes the new `tce` machine-stream event with the `equivalentToOriginal` and `duplicateAtSite` counts. Verdict semantics move to version 3.
16
+
17
+ - Every mutation and incremental run now records a `budget` of predicted and actual seconds on its machine verdict line and in its mutation and incremental reports, derived from the measured cost of the mutants it scheduled and the wall time the run took. `stryker gate` takes `--budget-baseline <file>`, an optional `--budget-tolerance` (default 0.25), and `--update-budget-baseline`; it fails with exit 1 when the finished run's actual seconds exceed the committed baseline by more than the tolerance, naming both numbers, and rewrites the baseline with the current run when updating.
18
+
19
+ ### Minor Changes
20
+
21
+ - A new `stryker plan` subcommand discovers each project's mutants without running tests, decides reuse against that project's incremental report, costs every scheduled mutant, and packs them into deterministically LPT-scheduled shards. It takes `--target-seconds`, optional `--max-shards`, `--projects`, `--out`, and `--full`, writes a `ShardPlan`, and emits a `plan` stream event.
22
+
23
+ - Every test-runner and checker process boot now publishes a `worker` line on the machine stream carrying its role, boot ordinal and measured start-up time, so the once-per-worker start-up cost is observable instead of hidden behind the first mutant's per-run overhead. The stream schema version is now `6.0`.
24
+
25
+ ### Patch Changes
26
+
27
+ - The README now has an upgrade note for 13.x users. 14.0.0 made `'default'` the default `mutator.mutantSetPolicy`, so scores graded under 13.x and later releases cover different mutant sets and are not comparable. The note names where each run records its policy, and states that `mutator: { mutantSetPolicy: 'full' }` keeps the 13.x mutant set.
28
+
29
+ - A cached incremental report that cannot be decoded now names the decode failure in the run log, so a cache written by an older release says which field the reader refused instead of only that the file could not be parsed.
30
+
31
+ - Repeating an incremental run in a workspace that builds with Turbo now reuses the pending dry-run coverage and the cached verdicts again. A package's `.turbo` task logs are generated by each build and record that build, so they no longer count as project files the run must watch: a rebuild no longer invalidates coverage whose inputs did not change.
32
+
33
+ - Mutants no test covers are now verified by the configured checkers before they are reported `NoCoverage`. A checker that rejects such a mutant reports it `CompileError`, with the checker's reason, instead of `NoCoverage`; uncovered mutants that pass every checker are still reported `NoCoverage`. Previously the checkers never saw uncovered mutants, so a non-compiling mutant no test reaches counted as an undetected survivor.
34
+
35
+ - The incremental report and its checkpoints are now written atomically: the bytes go to a temporary file in the same directory and are renamed over the target, so an interrupted or killed run (a job-cap timeout, or a process stopped while the report is being saved) can no longer leave a truncated incremental file behind. A run that finds a cache written this way decodes it and reuses it instead of discarding the whole mutation history. The mutation report, summary, and incremental report that `stryker merge` writes are saved the same way.
36
+
3
37
  ## 15.0.1
4
38
 
5
39
  ### Patch Changes
package/README.md CHANGED
@@ -153,14 +153,14 @@ pnpm exec stryker run --mutant <id,...>
153
153
  # Re-test only surviving mutants from prior run
154
154
  pnpm exec stryker run --survivors
155
155
 
156
- # Enable incremental caching
157
- pnpm exec stryker run --incremental
156
+ # Incremental caching is on by default; re-verify every mutant instead
157
+ pnpm exec stryker run --full
158
158
 
159
159
  # Run with specific concurrency
160
160
  pnpm exec stryker run --concurrency 4
161
161
 
162
162
  # Merge partial mutation reports from parallel CI shards
163
- pnpm exec stryker merge-reports --parts reports/shards --out reports/mutation
163
+ pnpm exec stryker merge --plan plan.json reports/shards/1 reports/shards/2 --out reports/mutation
164
164
 
165
165
  # Fail on survivors absent from a committed baseline
166
166
  pnpm exec stryker gate --baseline .stryker-baseline.json
@@ -177,7 +177,9 @@ pnpm exec stryker serve stdio
177
177
  pnpm exec stryker mcp
178
178
  ```
179
179
 
180
- `stryker run --since <ref>` takes the merge base of `<ref>` and the working tree, diffs it at `--unified=0`, and intersects the changed lines with `mutate`; it falls back to a full run when the Stryker config, a test-runner config, `package.json`, or the lockfile changed. `stryker run --mutant <id,...>` admits each id against the previous report (`reports/mutation/mutation.json`), restricts the run to those mutants' files, and emits each one's status, covering tests, killing test, and a `stryker run --mutant <id>` reproducer. `stryker gate` exits non-zero on survivors missing from its baseline, `stryker compare` exits `1` on a status mismatch after subtracting a `--noise` file, and `stryker annotate` prints GitHub workflow commands at each surfaced survivor. `stryker serve stdio|socket` speaks the Mutation Server Protocol and `stryker mcp` serves MCP over stdio.
180
+ `stryker run --since <ref>` takes the merge base of `<ref>` and the working tree, diffs it at `--unified=0`, and intersects the changed lines with `mutate`; it falls back to a full run when the Stryker config, a test-runner config, `package.json`, or the lockfile changed. `stryker run --mutant <id,...>` admits each id against the previous report (`reports/mutation/mutation.json`), restricts the run to those mutants' files, and emits each one's status, covering tests, killing test, and a `stryker run --mutant <id>` reproducer. `stryker gate` exits non-zero on survivors missing from its baseline, `stryker compare` exits `1` on a status mismatch after subtracting a `--noise` file, and `stryker annotate` prints GitHub workflow commands at each surfaced survivor.
181
+
182
+ A mutation run only starts on main CI. `stryker run` — and the programmatic `run`/`strykerCell` entry, the MSP `mutationTest` request, and the MCP `rerun_mutant` tool — refuses to start unless `GITHUB_ACTIONS` is `true`. A refused run exits non-zero and ends the machine stream with a `refused` event naming the rule (`mutation-runs-on-main-ci`). Dry runs (`--dryRunOnly`), `--version`, config and help commands, the MSP `discover` request, and the read-only MCP tools are unaffected. `stryker serve stdio|socket` speaks the Mutation Server Protocol and `stryker mcp` serves MCP over stdio.
181
183
 
182
184
  ## Output Modes
183
185
 
@@ -188,16 +190,20 @@ pnpm exec stryker run --json # wire records on stdout, diagnostic
188
190
  STRYKER_MODE=machine pnpm exec stryker run # the same, named by environment
189
191
  ```
190
192
 
191
- `--format text` names the human format explicitly; `--json` together with `--format text` is a usage error (exit 2). Under `--json`, `stdout` carries wire records and nothing else — progress lines and log output stay on `stderr`. Every run also writes the same records to `reports/mutation-stream.jsonl` (`--progressStreamFile`) in both modes, which is the artifact `stryker merge-reports` rebuilds a shard's partial report from.
193
+ `--format text` names the human format explicitly; `--json` together with `--format text` is a usage error (exit 2). Under `--json`, `stdout` carries wire records and nothing else — progress lines and log output stay on `stderr`. Every run also writes the same records to `reports/mutation-stream.jsonl` (`--progressStreamFile`) in both modes, which is the artifact `stryker merge` rebuilds a shard's partial report from.
192
194
 
193
195
  ## Reporters, Sidecars, and Verdict Reuse
194
196
 
195
197
  `reporters` defaults to `['clear-text', 'progress', 'html']`. Add `sarif` to also write `reports/mutation/mutation.sarif` (SARIF 2.1.0, named from `jsonReporter.fileName`): each survivor is a `warning` result, each no-coverage mutant a `note`, the fingerprint is the mutant's content id, and the log is capped at 5,000 results. Every run writes `reports/mutation/reproducers.json`: one entry per mutant in the report, holding its mutated-lines diff and the `stryker run --mutant <id>` command that reproduces it.
196
198
 
197
- The incremental cache is keyed by content: a mutant's id, the import-closure digest of its covering tests, the run inputs, the verdict-semantics version, and the mutant-set policy. Nothing in the key names a shard, branch, report path, or machine, so verdicts from different runs union and are reused wherever their inputs match. `incrementalSources` accepts globs of further incremental reports to union beside `incrementalFile`, which is how a sharded CI workspace reuses the reports it restored from other shards. Each run's stream carries a `reuse` line with the reused, ran, and per-reason refused counts, and an unchanged project reuses its persisted initial test run instead of repeating it.
199
+ Incremental reuse is on by default: an unchanged mutant whose covering tests are unchanged is re-used and the verdict records its `incrementalMode` (`incremental` or `full`). Pass `--full` to re-verify every mutant, ignoring the cache and the persisted dry run. The incremental cache is keyed by content: a mutant's id, the import-closure digest of its covering tests, the run inputs, the verdict-semantics version, and the mutant-set policy. Nothing in the key names a shard, branch, report path, or machine, so verdicts from different runs union and are reused wherever their inputs match. `incrementalSources` accepts globs of further incremental reports to union beside `incrementalFile`, which is how a sharded CI workspace reuses the reports it restored from other shards. Each run's stream carries a `reuse` line with the reused, ran, and per-reason refused counts, and an unchanged project reuses its persisted initial test run instead of repeating it.
198
200
 
199
201
  `mutator.mutantSetPolicy` defaults to `'default'`, which suppresses the mutants a rule proves redundant — a relational replacement outside the sufficient set, a conditional that collapses to a literal, a replacement equal to the original code, or a duplicate already planted at the site — and records the rule id in the mutant's report entry. Set `mutator: { mutantSetPolicy: 'full' }` to keep every variant. `surfacing` (`{ perLine: 1, perFile: 7 }`) caps how many survivors reach the review surfaces and SARIF, without changing what the engine computes.
200
202
 
203
+ ### Upgrading from 13.x: the mutant set changed in 14.0.0
204
+
205
+ 14.0.0 made `'default'` the default `mutator.mutantSetPolicy`; 13.x generated what `'full'` generates now. A score produced under one policy grades a different mutant set from a score under the other, so the two are not comparable: removing a killed mutant lowers the score, removing a survivor raises it. Every run records its policy (the stream's `verdict.mutantSetPolicy` and the incremental report), and a cached verdict from the other policy is refused with `policyChanged`. To compare against a 13.x baseline, or to keep grading the 13.x mutant set, set `mutator: { mutantSetPolicy: 'full' }`.
206
+
201
207
  ## Programmatic API
202
208
 
203
209
  ### Effect 4 Native Interface
@@ -1,4 +1,4 @@
1
- import { a as mod_d_exports$6 } from "./index-Cf9G6kA8.mjs";
1
+ import { a as mod_d_exports$6 } from "./index-DEphx668.mjs";
2
2
  import * as S from "effect/Schema";
3
3
  //#region src/Run.schema.d.ts
4
4
  declare const TypeId: '~stryker/mutation-run/StageError';
@@ -1,5 +1,5 @@
1
- import { a as mod_d_exports$6, c as mod_d_exports$9, d as Program$2, f as Statement, i as mod_d_exports$5, l as Ignorer$1, n as mod_d_exports$2$1, o as mod_d_exports$7, r as mod_d_exports$4, s as mod_d_exports$8, t as mod_d_exports$3 } from "./index-Cf9G6kA8.mjs";
2
- import "./Run.schema-B1HZugu9.mjs";
1
+ import { a as mod_d_exports$6, c as mod_d_exports$9, d as Program$2, f as Statement, i as mod_d_exports$5, l as Ignorer$1, n as mod_d_exports$2$1, o as mod_d_exports$7, r as mod_d_exports$4, s as mod_d_exports$8, t as mod_d_exports$3 } from "./index-DEphx668.mjs";
2
+ import "./Run.schema-CgcTsB1w.mjs";
3
3
  import { Cell, Handle, Sandwich, Workflow } from "@systemfsoftware/effect-cell-types";
4
4
  import * as S from "effect/Schema";
5
5
  import * as Option$1 from "effect/Option";
@@ -144,7 +144,7 @@ type RunPhase = typeof RunPhase.Type;
144
144
  declare const RunId: S.brand<S.String, "RunId">;
145
145
  type RunId = typeof RunId.Type;
146
146
  declare const RunStarted_base: S.Class<RunStarted, S.TaggedStruct<"stream", {
147
- readonly schemaVersion: S.Literal<"2.0">;
147
+ readonly schemaVersion: S.Literal<"6.0">;
148
148
  readonly runId: S.brand<S.String, "RunId">;
149
149
  readonly mode: S.Literals<readonly ["human", "machine"]>;
150
150
  readonly signal: S.Literals<readonly ["flag", "env", "tty", "agent", "tool"]>;
@@ -157,8 +157,36 @@ declare const PhaseEntered_base: S.Class<PhaseEntered, S.TaggedStruct<"phase", {
157
157
  declare class PhaseEntered extends PhaseEntered_base {}
158
158
  declare const PlanKnown_base: S.Class<PlanKnown, S.TaggedStruct<"plan", {
159
159
  readonly total: S.Int;
160
+ readonly shardPlan: S.NullOr<S.Struct<{
161
+ readonly version: S.Literal<1>;
162
+ readonly targetSeconds: S.Finite;
163
+ readonly shards: S.$Array<S.Struct<{
164
+ readonly index: S.Int;
165
+ readonly count: S.Int;
166
+ readonly predictedSeconds: S.Finite;
167
+ readonly projects: S.$Array<S.Struct<{
168
+ readonly project: S.String;
169
+ readonly mutants: S.$Array<S.String>;
170
+ }>>;
171
+ }>>;
172
+ readonly matrix: S.Struct<{
173
+ readonly include: S.$Array<S.Struct<{
174
+ readonly shard: S.String;
175
+ readonly predictedSeconds: S.Finite;
176
+ }>>;
177
+ }>;
178
+ }>>;
160
179
  }>, {}>;
161
180
  declare class PlanKnown extends PlanKnown_base {}
181
+ declare const WorkerRole: S.Literals<readonly ["testRunner", "checker"]>;
182
+ type WorkerRole = typeof WorkerRole.Type;
183
+ declare const WorkerReported_base: S.Class<WorkerReported, S.TaggedStruct<"worker", {
184
+ readonly schemaVersion: S.Literal<"6.0">;
185
+ readonly role: S.Literals<readonly ["testRunner", "checker"]>;
186
+ readonly index: S.Int;
187
+ readonly startupMs: S.Finite;
188
+ }>, {}>;
189
+ declare class WorkerReported extends WorkerReported_base {}
162
190
  declare const MutantCost: S.Struct<{
163
191
  readonly fixedOverheadMs: S.Finite;
164
192
  readonly testBodyMs: S.Finite;
@@ -309,6 +337,8 @@ declare const RunScope: S.Literals<readonly ["full", "diff"]>;
309
337
  type RunScope = typeof RunScope.Type;
310
338
  declare const MutantSetPolicy: S.Literals<readonly ["default", "full"]>;
311
339
  type MutantSetPolicy = typeof MutantSetPolicy.Type;
340
+ declare const IncrementalMode: S.Literals<readonly ["incremental", "full"]>;
341
+ type IncrementalMode = typeof IncrementalMode.Type;
312
342
  declare const PhaseDurations: S.Struct<{
313
343
  readonly prepare: S.Finite;
314
344
  readonly instrument: S.Finite;
@@ -321,8 +351,13 @@ declare const StaticVerdict: S.Struct<{
321
351
  readonly costMs: S.Finite;
322
352
  }>;
323
353
  type StaticVerdict = typeof StaticVerdict.Type;
354
+ declare const Budget: S.Struct<{
355
+ readonly predictedSeconds: S.Finite;
356
+ readonly actualSeconds: S.Finite;
357
+ }>;
358
+ type Budget = typeof Budget.Type;
324
359
  declare const VerdictReached_base: S.Class<VerdictReached, S.TaggedStruct<"verdict", {
325
- readonly schemaVersion: S.Literal<"2.0">;
360
+ readonly schemaVersion: S.Literal<"6.0">;
326
361
  readonly runId: S.brand<S.String, "RunId">;
327
362
  readonly mode: S.Literals<readonly ["human", "machine"]>;
328
363
  readonly signal: S.Literals<readonly ["flag", "env", "tty", "agent", "tool"]>;
@@ -353,6 +388,7 @@ declare const VerdictReached_base: S.Class<VerdictReached, S.TaggedStruct<"verdi
353
388
  }>>;
354
389
  readonly scope: S.Literals<readonly ["full", "diff"]>;
355
390
  readonly mutantSetPolicy: S.Literals<readonly ["default", "full"]>;
391
+ readonly incrementalMode: S.optionalKey<S.Literals<readonly ["incremental", "full"]>>;
356
392
  readonly phaseDurations: S.NullOr<S.Struct<{
357
393
  readonly prepare: S.Finite;
358
394
  readonly instrument: S.Finite;
@@ -363,6 +399,10 @@ declare const VerdictReached_base: S.Class<VerdictReached, S.TaggedStruct<"verdi
363
399
  readonly count: S.Int;
364
400
  readonly costMs: S.Finite;
365
401
  }>>;
402
+ readonly budget: S.Struct<{
403
+ readonly predictedSeconds: S.Finite;
404
+ readonly actualSeconds: S.Finite;
405
+ }>;
366
406
  }>, {}>;
367
407
  declare class VerdictReached extends VerdictReached_base {}
368
408
  declare const FrameworkContributionRow: S.Struct<{
@@ -456,6 +496,11 @@ declare const ReuseReported_base: S.Class<ReuseReported, S.TaggedStruct<"reuse",
456
496
  }>;
457
497
  }>, {}>;
458
498
  declare class ReuseReported extends ReuseReported_base {}
499
+ declare const TceReported_base: S.Class<TceReported, S.TaggedStruct<"tce", {
500
+ readonly equivalentToOriginal: S.Int;
501
+ readonly duplicateAtSite: S.Int;
502
+ }>, {}>;
503
+ declare class TceReported extends TceReported_base {}
459
504
  declare const MutantDetailReported_base: S.Class<MutantDetailReported, S.TaggedStruct<"mutant-detail", {
460
505
  readonly id: S.brand<S.String, "MutantId">;
461
506
  readonly status: S.Literals<readonly ["Killed", "Survived", "NoCoverage", "CompileError", "RuntimeError", "Timeout", "Ignored", "Pending"]>;
@@ -473,7 +518,7 @@ declare const FeedbackReported_base: S.Class<FeedbackReported, S.TaggedStruct<"f
473
518
  }>, {}>;
474
519
  declare class FeedbackReported extends FeedbackReported_base {}
475
520
  declare const RunFailed_base: S.Class<RunFailed, S.TaggedStruct<"error", {
476
- readonly schemaVersion: S.Literal<"2.0">;
521
+ readonly schemaVersion: S.Literal<"6.0">;
477
522
  readonly code: S.Int;
478
523
  readonly error: S.String;
479
524
  readonly remediation: S.String;
@@ -492,12 +537,20 @@ declare const RunFailed_base: S.Class<RunFailed, S.TaggedStruct<"error", {
492
537
  }>, {}>;
493
538
  declare class RunFailed extends RunFailed_base {}
494
539
  declare const HelpRendered_base: S.Class<HelpRendered, S.TaggedStruct<"help", {
495
- readonly schemaVersion: S.Literal<"2.0">;
540
+ readonly schemaVersion: S.Literal<"6.0">;
496
541
  readonly code: S.Literals<readonly [0]>;
497
542
  readonly help: S.String;
498
543
  }>, {}>;
499
544
  declare class HelpRendered extends HelpRendered_base {}
500
- declare const RunEvent: S.Union<readonly [typeof RunStarted, typeof PhaseEntered, typeof PlanKnown, S.Codec<RunMutantTestedEvent, {
545
+ declare const RefusalRule: S.Literal<"mutation-runs-on-main-ci">;
546
+ type RefusalRule = typeof RefusalRule.Type;
547
+ declare const Refused_base: S.Class<Refused, S.TaggedStruct<"refused", {
548
+ readonly schemaVersion: S.Literal<"6.0">;
549
+ readonly rule: S.Literal<"mutation-runs-on-main-ci">;
550
+ readonly message: S.String;
551
+ }>, {}>;
552
+ declare class Refused extends Refused_base {}
553
+ declare const RunEvent: S.Union<readonly [typeof RunStarted, typeof PhaseEntered, typeof PlanKnown, typeof WorkerReported, S.Codec<RunMutantTestedEvent, {
501
554
  readonly _tag: "mutant";
502
555
  readonly id: string;
503
556
  readonly status: "CompileError" | "Ignored" | "Killed" | "NoCoverage" | "Pending" | "RuntimeError" | "Survived" | "Timeout";
@@ -523,14 +576,14 @@ declare const RunEvent: S.Union<readonly [typeof RunStarted, typeof PhaseEntered
523
576
  readonly testsExecuted: number;
524
577
  readonly shared: boolean;
525
578
  } | null;
526
- }, never, never>, typeof Heartbeat, typeof PluginsReported, typeof FormatRegistryResolved, typeof SkippedReported, typeof ReuseReported, typeof MutantDetailReported, typeof FeedbackReported, typeof VerdictReached, typeof RunFailed, typeof HelpRendered]> & {
579
+ }, never, never>, typeof Heartbeat, typeof PluginsReported, typeof FormatRegistryResolved, typeof SkippedReported, typeof ReuseReported, typeof TceReported, typeof MutantDetailReported, typeof FeedbackReported, typeof VerdictReached, typeof RunFailed, typeof HelpRendered, typeof Refused]> & {
527
580
  QUEUE_BOUND: number;
528
581
  };
529
582
  type RunEvent = typeof RunEvent.Type;
530
- type RunTerminalEvent = VerdictReached | RunFailed | HelpRendered;
583
+ type RunTerminalEvent = VerdictReached | RunFailed | HelpRendered | Refused;
531
584
  //#endregion
532
585
  //#region src/run-event-wire.schema.d.ts
533
- declare const RunEventWireLine: S.decodeTo<S.fromJsonString<S.Union<readonly [typeof RunStarted, typeof PhaseEntered, typeof PlanKnown, S.Codec<RunMutantTestedEvent, {
586
+ declare const RunEventWireLine: S.decodeTo<S.fromJsonString<S.Union<readonly [typeof RunStarted, typeof PhaseEntered, typeof PlanKnown, typeof WorkerReported, S.Codec<RunMutantTestedEvent, {
534
587
  readonly _tag: "mutant";
535
588
  readonly id: string;
536
589
  readonly status: "CompileError" | "Ignored" | "Killed" | "NoCoverage" | "Pending" | "RuntimeError" | "Survived" | "Timeout";
@@ -556,16 +609,16 @@ declare const RunEventWireLine: S.decodeTo<S.fromJsonString<S.Union<readonly [ty
556
609
  readonly testsExecuted: number;
557
610
  readonly shared: boolean;
558
611
  } | null;
559
- }, never, never>, typeof Heartbeat, typeof PluginsReported, typeof FormatRegistryResolved, typeof SkippedReported, typeof ReuseReported, typeof MutantDetailReported, typeof FeedbackReported, typeof VerdictReached, typeof RunFailed, typeof HelpRendered]> & {
612
+ }, never, never>, typeof Heartbeat, typeof PluginsReported, typeof FormatRegistryResolved, typeof SkippedReported, typeof ReuseReported, typeof TceReported, typeof MutantDetailReported, typeof FeedbackReported, typeof VerdictReached, typeof RunFailed, typeof HelpRendered, typeof Refused]> & {
560
613
  QUEUE_BOUND: number;
561
614
  }>, S.String, never, never>;
562
615
  type RunEventWireLine = typeof RunEventWireLine.Type;
563
616
  //#endregion
564
617
  //#region src/stream-version.schema.d.ts
565
- declare const StreamSchemaVersion: S.Literal<"2.0">;
618
+ declare const StreamSchemaVersion: S.Literal<"6.0">;
566
619
  type StreamSchemaVersion = typeof StreamSchemaVersion.Type;
567
620
  declare namespace mod_d_exports$1$1 {
568
- export { FeedbackJudgment, FeedbackReported, FormatClaimShadowingRow, FormatRegistryResolved, FormatRegistryRow, FrameworkContributionRow, FrameworkModuleRow, Heartbeat, HelpRendered, MutantCost, MutantDetailReported, MutantSetPolicy, PhaseDurations, PhaseEntered, PlanKnown, PluginLoadFailureReason, PluginsReported, ReuseRefusals, ReuseReported, RunEvent, RunEventWireLine, RunFailed, RunId, RunMutantTested, RunMutantTestedEvent, RunPhase, RunScope, RunStarted, RunTerminalEvent, SkippedFileRow, SkippedReported, StaticVerdict, StreamSchemaVersion, VerdictCounts, VerdictLocation, VerdictMutant, VerdictReached, VerdictThresholds };
621
+ export { Budget, FeedbackJudgment, FeedbackReported, FormatClaimShadowingRow, FormatRegistryResolved, FormatRegistryRow, FrameworkContributionRow, FrameworkModuleRow, Heartbeat, HelpRendered, IncrementalMode, MutantCost, MutantDetailReported, MutantSetPolicy, PhaseDurations, PhaseEntered, PlanKnown, PluginLoadFailureReason, PluginsReported, RefusalRule, Refused, ReuseRefusals, ReuseReported, RunEvent, RunEventWireLine, RunFailed, RunId, RunMutantTested, RunMutantTestedEvent, RunPhase, RunScope, RunStarted, RunTerminalEvent, SkippedFileRow, SkippedReported, StaticVerdict, StreamSchemaVersion, TceReported, VerdictCounts, VerdictLocation, VerdictMutant, VerdictReached, VerdictThresholds, WorkerReported, WorkerRole };
569
622
  }
570
623
  //#endregion
571
624
  //#region src/run/phase-clock.service.d.ts
@@ -619,7 +672,7 @@ declare const makeRunEventStream: (resolved: {
619
672
  readonly mode: "human" | "machine";
620
673
  readonly signal: "agent" | "env" | "flag" | "tool" | "tty";
621
674
  }) => Effect$1.Effect<{
622
- queue: Queue.Queue<mod_d_exports$1$1.FeedbackReported | mod_d_exports$1$1.FormatRegistryResolved | mod_d_exports$1$1.Heartbeat | mod_d_exports$1$1.HelpRendered | mod_d_exports$1$1.MutantDetailReported | mod_d_exports$1$1.PhaseEntered | mod_d_exports$1$1.PlanKnown | mod_d_exports$1$1.PluginsReported | mod_d_exports$1$1.ReuseReported | mod_d_exports$1$1.RunFailed | mod_d_exports$1$1.RunMutantTestedEvent | mod_d_exports$1$1.RunStarted | mod_d_exports$1$1.SkippedReported | mod_d_exports$1$1.VerdictReached, Cause.Done<void>>;
675
+ queue: Queue.Queue<mod_d_exports$1$1.FeedbackReported | mod_d_exports$1$1.FormatRegistryResolved | mod_d_exports$1$1.Heartbeat | mod_d_exports$1$1.HelpRendered | mod_d_exports$1$1.MutantDetailReported | mod_d_exports$1$1.PhaseEntered | mod_d_exports$1$1.PlanKnown | mod_d_exports$1$1.PluginsReported | mod_d_exports$1$1.Refused | mod_d_exports$1$1.ReuseReported | mod_d_exports$1$1.RunFailed | mod_d_exports$1$1.RunMutantTestedEvent | mod_d_exports$1$1.RunStarted | mod_d_exports$1$1.SkippedReported | mod_d_exports$1$1.TceReported | mod_d_exports$1$1.VerdictReached | mod_d_exports$1$1.WorkerReported, Cause.Done<void>>;
623
676
  runId: string & import("effect/Brand").Brand<"RunId">;
624
677
  startedAt: number;
625
678
  isOpen: Effect$1.Effect<boolean, never, never>;
@@ -629,7 +682,7 @@ declare const makeRunEventStream: (resolved: {
629
682
  }, never, RunEventDrain | Stdio.Stdio>;
630
683
  //#endregion
631
684
  //#region src/run-events.service.d.ts
632
- declare const RunEvents_base: Context.ServiceClass<RunEvents, "@systemfsoftware/stryker-js/run-events.service/RunEvents", Queue.Queue<mod_d_exports$1$1.FeedbackReported | mod_d_exports$1$1.FormatRegistryResolved | mod_d_exports$1$1.Heartbeat | mod_d_exports$1$1.HelpRendered | mod_d_exports$1$1.MutantDetailReported | mod_d_exports$1$1.PhaseEntered | mod_d_exports$1$1.PlanKnown | mod_d_exports$1$1.PluginsReported | mod_d_exports$1$1.ReuseReported | mod_d_exports$1$1.RunFailed | mod_d_exports$1$1.RunMutantTestedEvent | mod_d_exports$1$1.RunStarted | mod_d_exports$1$1.SkippedReported | mod_d_exports$1$1.VerdictReached, Cause.Done<void>>>;
685
+ declare const RunEvents_base: Context.ServiceClass<RunEvents, "@systemfsoftware/stryker-js/run-events.service/RunEvents", Queue.Queue<mod_d_exports$1$1.FeedbackReported | mod_d_exports$1$1.FormatRegistryResolved | mod_d_exports$1$1.Heartbeat | mod_d_exports$1$1.HelpRendered | mod_d_exports$1$1.MutantDetailReported | mod_d_exports$1$1.PhaseEntered | mod_d_exports$1$1.PlanKnown | mod_d_exports$1$1.PluginsReported | mod_d_exports$1$1.Refused | mod_d_exports$1$1.ReuseReported | mod_d_exports$1$1.RunFailed | mod_d_exports$1$1.RunMutantTestedEvent | mod_d_exports$1$1.RunStarted | mod_d_exports$1$1.SkippedReported | mod_d_exports$1$1.TceReported | mod_d_exports$1$1.VerdictReached | mod_d_exports$1$1.WorkerReported, Cause.Done<void>>>;
633
686
  declare class RunEvents extends RunEvents_base {}
634
687
  interface RunIdentityShape {
635
688
  readonly runId: string;
@@ -637,6 +690,11 @@ interface RunIdentityShape {
637
690
  }
638
691
  declare const RunIdentity_base: Context.ServiceClass<RunIdentity, "@systemfsoftware/stryker-js/run-events.service/RunIdentity", RunIdentityShape>;
639
692
  declare class RunIdentity extends RunIdentity_base {}
693
+ interface WorkerReportsShape {
694
+ readonly report: (role: mod_d_exports$1$1.WorkerRole, startupMs: number) => Effect$1.Effect<void>;
695
+ }
696
+ declare const WorkerReports_base: Context.ServiceClass<WorkerReports, "@systemfsoftware/stryker-js/run-events.service/WorkerReports", WorkerReportsShape>;
697
+ declare class WorkerReports extends WorkerReports_base {}
640
698
  declare namespace git_diff_schema_d_exports {
641
699
  export { DiffHunk, DiffScopeCommand, DiffScopeDecision, DiffScoped, FullScope, GitCommandFailed, GitDiffError, GitDiffResult, GitRefUnresolved };
642
700
  }
@@ -2516,6 +2574,11 @@ declare const IncrementalReportSchema: S.StructWithRest<S.Struct<{
2516
2574
  readonly ownerVersion: S.String;
2517
2575
  }>>;
2518
2576
  }>>;
2577
+ readonly costs: S.$Record<S.brand<S.String, "MutantId">, S.Struct<{
2578
+ readonly predictedMs: S.Finite;
2579
+ readonly actualMs: S.NullOr<S.Finite>;
2580
+ readonly coveringTests: S.Int;
2581
+ }>>;
2519
2582
  readonly testFiles: S.optional<S.$Record<S.String, S.Struct<{
2520
2583
  readonly source: S.optional<S.String>;
2521
2584
  readonly tests: S.$Array<S.Struct<{
@@ -2551,6 +2614,10 @@ declare const IncrementalReportSchema: S.StructWithRest<S.Struct<{
2551
2614
  }>, never, never>>;
2552
2615
  }>>;
2553
2616
  }>>>;
2617
+ readonly budget: S.optional<S.Struct<{
2618
+ readonly predictedSeconds: S.Finite;
2619
+ readonly actualSeconds: S.Finite;
2620
+ }>>;
2554
2621
  readonly dryRunCoverage: S.optionalKey<S.Unknown>;
2555
2622
  }>, readonly [S.$Record<S.String, S.Unknown>]>;
2556
2623
  type IncrementalReport = S.Schema.Type<typeof IncrementalReportSchema>;
@@ -2868,11 +2935,16 @@ interface MutationReportingInput {
2868
2935
  readonly basePath: string;
2869
2936
  readonly reporterStage: ReporterStage;
2870
2937
  readonly formatRegistry: mod_d_exports$1.FormatRegistry;
2938
+ readonly timeOverheadMs: number;
2871
2939
  readonly closureDigestsByMutantId?: Readonly<Record<string, string>>;
2872
2940
  readonly timeoutEvidenceByMutantId?: Readonly<Record<string, TimeoutEvidence>>;
2941
+ readonly concurrency: number;
2942
+ readonly runStartedAt: number;
2873
2943
  }
2874
2944
  interface MutationReportingService {
2875
- readonly reportCheckFailure: (mutant: mod_d_exports$2$1.MutantTestCoverage, result: Exclude<mod_d_exports$3.CheckResult, mod_d_exports$3.PassedCheckResult>) => Effect$1.Effect<mod_d_exports$2$1.RunMutantResult>;
2945
+ readonly reportCheckFailure: (mutant: mod_d_exports$2$1.MutantTestCoverage, result: mod_d_exports$3.FailedCheckResult) => Effect$1.Effect<mod_d_exports$2$1.RunMutantResult>;
2946
+ readonly reportIgnored: (mutant: mod_d_exports$2$1.MutantTestCoverage, result: mod_d_exports$3.IgnoredCheckResult) => Effect$1.Effect<mod_d_exports$2$1.RunMutantResult>;
2947
+ readonly reportNoCoverage: (mutant: mod_d_exports$2$1.MutantTestCoverage) => Effect$1.Effect<mod_d_exports$2$1.RunMutantResult>;
2876
2948
  readonly reportMutantRunResult: (mutant: mod_d_exports$2$1.MutantTestCoverage, result: mod_d_exports$9.MutantRunResult) => Effect$1.Effect<mod_d_exports$2$1.RunMutantResult>;
2877
2949
  readonly reportAll: (input: MutationReportingInput) => Effect$1.Effect<MutationTestDone, PlatformError>;
2878
2950
  readonly checkpoint: (input: MutationReportingInput, plannedMutants: readonly mod_d_exports$2$1.Mutant[]) => Effect$1.Effect<void, PlatformError>;
@@ -2892,9 +2964,9 @@ declare class IdGenerator extends IdGenerator_base {
2892
2964
  }
2893
2965
  //#endregion
2894
2966
  //#region src/run/StageServices.service.d.ts
2895
- type StageServices = ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | GitDiff | IdGenerator | MutationReporting | Path.Path | PhaseClock | ProjectFiles | Reporter | RunEnvironment | RunEvents | Scope.Scope | Stdio.Stdio | WorkerLauncher;
2967
+ type StageServices = ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | GitDiff | IdGenerator | MutationReporting | Path.Path | PhaseClock | ProjectFiles | Reporter | RunEnvironment | RunEvents | WorkerReports | Scope.Scope | Stdio.Stdio | WorkerLauncher;
2896
2968
  type EnginePorts = ChildProcessSpawner.ChildProcessSpawner | FileSystem.FileSystem | GitDiff | Path.Path | Stdio.Stdio | WorkerLauncher;
2897
- type RunStageServices = ProjectFiles | Reporter | RunEnvironment | RunEvents | IdGenerator | MutationReporting | PhaseClock | Scope.Scope;
2969
+ type RunStageServices = ProjectFiles | Reporter | RunEnvironment | RunEvents | WorkerReports | IdGenerator | MutationReporting | PhaseClock | Scope.Scope;
2898
2970
  type WiredRunLayer = Layer.Layer<RunStageServices | EnginePorts, never, never>;
2899
2971
  //#endregion
2900
2972
  //#region src/run/RunEnvironment.service.d.ts
package/dist/config.d.mts CHANGED
@@ -1,5 +1,5 @@
1
- import { i as mod_d_exports$5 } from "./index-Cf9G6kA8.mjs";
2
- import { a as ImmutablePrimitive, c as StrykerConfigExport, i as Immutable, l as StrykerConfigFn, o as Primitive, r as ConfigEnv, s as StrykerConfig, t as mergeConfig } from "./merge-config-BdQdK3PM.mjs";
1
+ import { i as mod_d_exports$5 } from "./index-DEphx668.mjs";
2
+ import { a as ImmutablePrimitive, c as StrykerConfigExport, i as Immutable, l as StrykerConfigFn, o as Primitive, r as ConfigEnv, s as StrykerConfig, t as mergeConfig } from "./merge-config-b06M-Ccx.mjs";
3
3
  //#region src/config/define-config.d.ts
4
4
  export declare function defineConfig(config: StrykerConfig): StrykerConfig;
5
5
  export declare function defineConfig(config: Promise<StrykerConfig>): Promise<StrykerConfig>;
package/dist/config.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { t as mergeConfig } from "./merge-config-zsGl1aWc.mjs";
1
+ import { t as mergeConfig } from "./merge-config-BYhhPA7r.mjs";
2
2
  //#region src/config/define-config.ts
3
3
  function defineConfig(config) {
4
4
  return config;
package/dist/events.d.mts CHANGED
@@ -1,2 +1,2 @@
1
- import { n as StageError, t as PrepareError } from "./Run.schema-B1HZugu9.mjs";
1
+ import { n as StageError, t as PrepareError } from "./Run.schema-CgcTsB1w.mjs";
2
2
  export { PrepareError, StageError };
@@ -1358,8 +1358,11 @@ declare const CheckResultSchema: S.toTaggedUnion<"status", readonly [S.Struct<{
1358
1358
  }>, S.Struct<{
1359
1359
  readonly status: S.Literal<"compileError">;
1360
1360
  readonly reason: S.String;
1361
+ }>, S.Struct<{
1362
+ readonly status: S.Literal<"ignored">;
1363
+ readonly reason: S.String;
1361
1364
  }>]>;
1362
- declare const CheckStatus: S.Literals<readonly ["passed", "compileError"]>;
1365
+ declare const CheckStatus: S.Literals<readonly ["passed", "compileError", "ignored"]>;
1363
1366
  type CheckStatus = typeof CheckStatus.Type;
1364
1367
  declare const CheckerFailed_base: S.Class<CheckerFailed, S.TaggedStruct<"CheckerFailed", {
1365
1368
  readonly cause: S.String;
@@ -1373,6 +1376,9 @@ type CheckResult = typeof CheckResultSchema.Type;
1373
1376
  type FailedCheckResult = Extract<CheckResult, {
1374
1377
  readonly status: 'compileError';
1375
1378
  }>;
1379
+ type IgnoredCheckResult = Extract<CheckResult, {
1380
+ readonly status: 'ignored';
1381
+ }>;
1376
1382
  type PassedCheckResult = Extract<CheckResult, {
1377
1383
  readonly status: 'passed';
1378
1384
  }>;
@@ -1386,7 +1392,7 @@ interface CheckerService {
1386
1392
  declare const Checker_base: Context.ServiceClass<Checker, "@systemfsoftware/stryker-js-plugin-interface/Checker.service/Checker", CheckerService>;
1387
1393
  declare class Checker extends Checker_base {}
1388
1394
  declare namespace mod_d_exports {
1389
- export { CheckResult, CheckResultSchema, CheckStatus, Checker, CheckerFailed, CheckerMutantWire, CheckerService, FailedCheckResult, PassedCheckResult };
1395
+ export { CheckResult, CheckResultSchema, CheckStatus, Checker, CheckerFailed, CheckerMutantWire, CheckerService, FailedCheckResult, IgnoredCheckResult, PassedCheckResult };
1390
1396
  }
1391
1397
  //#endregion
1392
1398
  //#region src/Mutant.schema.d.ts
@@ -2929,6 +2935,9 @@ declare const CheckerCheckResult: S.$Record<S.String, S.toTaggedUnion<"status",
2929
2935
  }>, S.Struct<{
2930
2936
  readonly status: S.Literal<"compileError">;
2931
2937
  readonly reason: S.String;
2938
+ }>, S.Struct<{
2939
+ readonly status: S.Literal<"ignored">;
2940
+ readonly reason: S.String;
2932
2941
  }>]>>;
2933
2942
  declare const CheckerGroupResult: S.$Array<S.$Array<S.String>>;
2934
2943
  declare const ReporterInitOptions: S.Struct<{
package/dist/index.d.mts CHANGED
@@ -1,7 +1,7 @@
1
- import { c as mod_d_exports$9, i as mod_d_exports$5$1, l as Ignorer, n as mod_d_exports$2$1, o as mod_d_exports$7$1, t as mod_d_exports$8, u as Node_2 } from "./index-Cf9G6kA8.mjs";
2
- import { a as ImmutablePrimitive, i as Immutable, n as mergeConfigs, o as Primitive } from "./merge-config-BdQdK3PM.mjs";
3
- import { n as StageError } from "./Run.schema-B1HZugu9.mjs";
4
- import { $ as makeRunEventStream, A as ReporterWorkerClient, B as ProjectFile, C as PluginSource, D as TestCoverage, E as SandboxHandle, F as WorkerLauncherShape, G as git_diff_service_d_exports, H as mod_d_exports$2$11, I as WorkerSpawnParams, J as RunIdentity, K as git_diff_schema_d_exports, L as SpawnedSocketWorker, M as reporterWorkerFactory, N as spawnReporterWorker, O as REPORTER_EVENT_BATCH_BOUND, P as WorkerLauncher, Q as RunEventStream, R as make, S as PluginKind, T as WorkerPluginSource, U as Framework, V as IncrementalReportSchema, W as GitDiff, X as RunEventDrain, Y as RunIdentityShape, Z as RunEventDrainLive, _ as EvaluatorPluginDescriptor, a as StageServices, at as StrykerError, b as PluginDescriptor, c as IdGeneratorShape, ct as ConfigFileNotFoundError, d as InstrumentDone, dt as ChildProcessCrashedError, et as ResolvedModeInput, f as PrepareDone, ft as OutOfMemoryError, g as AnyWorkerPluginSource, h as AnyWorkerPluginDescriptor, ht as WorkerExit, i as RunStageServices, it as mod_d_exports$1$7, j as SpawnReporterWorkerParams, k as ReporterStage, l as MutationTestDone, lt as ConfigFileUnreadableError, m as AnyPluginDescriptor, mt as WorkerBootTimeoutError, n as RunEnvironmentShape, nt as PhaseClock, o as WiredRunLayer, ot as ConfigError, p as PrepareExecutorArgs, pt as WorkerBootError, q as RunEvents, r as EnginePorts, rt as mod_d_exports$10, s as IdGenerator, st as ConfigFileInvalidError, t as RunEnvironment, tt as ResolvedMode, u as DryRunDone, ut as ConfigFileUnsupportedError, v as EvaluatorPluginSource, w as WorkerPluginDescriptor, x as PluginDescriptorOf, y as LoadedPlugins, z as Project } from "./RunEnvironment.service-B1bsWOQ9.mjs";
1
+ import { c as mod_d_exports$9, i as mod_d_exports$5$1, l as Ignorer, n as mod_d_exports$2$1, o as mod_d_exports$7$1, t as mod_d_exports$8, u as Node_2 } from "./index-DEphx668.mjs";
2
+ import { a as ImmutablePrimitive, i as Immutable, n as mergeConfigs, o as Primitive } from "./merge-config-b06M-Ccx.mjs";
3
+ import { n as StageError } from "./Run.schema-CgcTsB1w.mjs";
4
+ import { $ as makeRunEventStream, A as ReporterWorkerClient, B as ProjectFile, C as PluginSource, D as TestCoverage, E as SandboxHandle, F as WorkerLauncherShape, G as git_diff_service_d_exports, H as mod_d_exports$2$11, I as WorkerSpawnParams, J as RunIdentity, K as git_diff_schema_d_exports, L as SpawnedSocketWorker, M as reporterWorkerFactory, N as spawnReporterWorker, O as REPORTER_EVENT_BATCH_BOUND, P as WorkerLauncher, Q as RunEventStream, R as make, S as PluginKind, T as WorkerPluginSource, U as Framework, V as IncrementalReportSchema, W as GitDiff, X as RunEventDrain, Y as RunIdentityShape, Z as RunEventDrainLive, _ as EvaluatorPluginDescriptor, a as StageServices, at as StrykerError, b as PluginDescriptor, c as IdGeneratorShape, ct as ConfigFileNotFoundError, d as InstrumentDone, dt as ChildProcessCrashedError, et as ResolvedModeInput, f as PrepareDone, ft as OutOfMemoryError, g as AnyWorkerPluginSource, h as AnyWorkerPluginDescriptor, ht as WorkerExit, i as RunStageServices, it as mod_d_exports$1$7, j as SpawnReporterWorkerParams, k as ReporterStage, l as MutationTestDone, lt as ConfigFileUnreadableError, m as AnyPluginDescriptor, mt as WorkerBootTimeoutError, n as RunEnvironmentShape, nt as PhaseClock, o as WiredRunLayer, ot as ConfigError, p as PrepareExecutorArgs, pt as WorkerBootError, q as RunEvents, r as EnginePorts, rt as mod_d_exports$10, s as IdGenerator, st as ConfigFileInvalidError, t as RunEnvironment, tt as ResolvedMode, u as DryRunDone, ut as ConfigFileUnsupportedError, v as EvaluatorPluginSource, w as WorkerPluginDescriptor, x as PluginDescriptorOf, y as LoadedPlugins, z as Project } from "./RunEnvironment.service-F8LgeCqh.mjs";
5
5
  import { Blueprint, Cell, Handle, Sandwich, Workflow } from "@systemfsoftware/effect-cell-types";
6
6
  import * as S from "effect/Schema";
7
7
  import * as Option from "effect/Option";
@@ -495,7 +495,7 @@ type ValidationSchemaDocument<A = unknown> = {
495
495
  //#endregion
496
496
  //#region src/run/load-config.d.ts
497
497
  interface ConfigInvocation {
498
- readonly command: 'run' | 'merge-reports';
498
+ readonly command: 'run' | 'merge';
499
499
  readonly mode: mod_d_exports$10.OutputMode;
500
500
  }
501
501
  declare const forkCoreSchema: import("effect/JsonSchema").JsonSchema;
@@ -1136,7 +1136,7 @@ declare const staticVerdictOf: (results: readonly mod_d_exports$2$1.RunMutantRes
1136
1136
  //#endregion
1137
1137
  //#region src/reporting/verdict-envelope.schema.d.ts
1138
1138
  declare const VerdictEnvelope_base: S.Class<VerdictEnvelope, S.Struct<{
1139
- readonly schemaVersion: S.Literal<"2.0">;
1139
+ readonly schemaVersion: S.Literal<"6.0">;
1140
1140
  readonly runId: S.brand<S.String, "RunId">;
1141
1141
  readonly mode: S.Literals<readonly ["human", "machine"]>;
1142
1142
  readonly signal: S.Literals<readonly ["flag", "env", "tty", "agent", "tool"]>;
@@ -1167,6 +1167,7 @@ declare const VerdictEnvelope_base: S.Class<VerdictEnvelope, S.Struct<{
1167
1167
  }>>;
1168
1168
  readonly scope: S.Literals<readonly ["full", "diff"]>;
1169
1169
  readonly mutantSetPolicy: S.Literals<readonly ["default", "full"]>;
1170
+ readonly incrementalMode: S.Literals<readonly ["incremental", "full"]>;
1170
1171
  readonly phaseDurations: S.NullOr<S.Struct<{
1171
1172
  readonly prepare: S.Finite;
1172
1173
  readonly instrument: S.Finite;
@@ -1177,6 +1178,10 @@ declare const VerdictEnvelope_base: S.Class<VerdictEnvelope, S.Struct<{
1177
1178
  readonly count: S.Int;
1178
1179
  readonly costMs: S.Finite;
1179
1180
  }>>;
1181
+ readonly budget: S.Struct<{
1182
+ readonly predictedSeconds: S.Finite;
1183
+ readonly actualSeconds: S.Finite;
1184
+ }>;
1180
1185
  }>, {}>;
1181
1186
  declare class VerdictEnvelope extends VerdictEnvelope_base {}
1182
1187
  //#endregion
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
- import { i as Mutant_exports, l as Report_exports, n as mergeConfigs } from "./merge-config-zsGl1aWc.mjs";
3
- import { $ as WorkerLauncher, A as classifyWorkerExit, At as OutOfMemoryError, B as SurvivorRef, C as nodePlatformLayer, Ct as MergeResult, D as git_diff_schema_exports, Dt as survivorsPriorReport, E as git_diff_service_exports, Et as forkOptionsSchema, F as readConfig, Ft as CheckerAnsweredUnrequested, G as generateRunId, H as RunEvents, I as RunEnvironment, It as CheckerSkippedRequested, J as metricsResultFromFiles, K as VerdictEnvelope, L as IdGenerator, M as loadConfigCell, Mt as OutputMode_exports, N as describeErrors, Nt as RunEvent_exports$1, O as ClassifyWorkerExitCommand, Ot as checkGroupedPlans, P as forkCoreSchema, Pt as SpanTaxonomy_exports, Q as makeWorkerClient, R as surfacedSurvivorsOf, S as IncrementalReportSchema, St as MergeCommand, T as GitDiff, Tt as extendsPropertySchema, U as RunIdentity, V as StrykerPackage, W as buildVerdictEnvelope, X as reporterWorkerFactory, Y as MetricsResultFromReport, Z as spawnReporterWorker, _ as isCommandRunner, _t as defaultOptions, a as MachineConsole, at as initialExtendsStepState, b as readProjectCell, bt as ExtendsStepStateSchema, c as prepareCell, ct as ExtendsStepRead, d as buildTestRunner, dt as ConfigError, et as make, f as makeChildProcessTestRunner, ft as ConfigFileInvalidError, g as vmTestRunnerConfig, gt as createDefaultOptions, h as vmRunnerPluginUrl, ht as ConfigFileUnsupportedError, i as makeRunEventStream, it as importModule, j as validateOptions, jt as WorkerBootTimeoutError, k as ClassifyWorkerExitDecision, kt as ChildProcessCrashedError, l as mutantDetailEventsOf, lt as ExtendsStepRefused, m as testRunnerConfigOf, mt as ConfigFileUnreadableError, n as RunEventDrain, nt as FileMatcher, o as HtmlReporter_exports, ot as StrykerError, p as isVmRunner, pt as ConfigFileNotFoundError, q as staticVerdictOf, r as RunEventDrainLive, rt as decideExtendsStep, s as mutationTestCell, st as ExtendsStepDone, t as strykerCell, tt as ReproducerSchema, u as instrumentCell, ut as ExtendsStepResolve, v as import_closure_cell_exports, vt as ConfigDocumentSchema, w as layerWorkerProtocol, wt as ReadConfigCommand, x as concurrencyCell, xt as ImportedModuleSchema, y as relativeNormalizedFileName, yt as ExtendsStepDocumentSchema, z as SurfacingFields } from "./run-stages-DdVQINP9.mjs";
2
+ import { i as Mutant_exports, l as Report_exports, n as mergeConfigs } from "./merge-config-BYhhPA7r.mjs";
3
+ import { $ as WorkerLauncher, A as classifyWorkerExit, At as OutOfMemoryError, B as SurvivorRef, C as nodePlatformLayer, Ct as MergeResult, D as git_diff_schema_exports, Dt as survivorsPriorReport, E as git_diff_service_exports, Et as forkOptionsSchema, F as readConfig, Ft as CheckerAnsweredUnrequested, G as generateRunId, H as RunEvents, I as RunEnvironment, It as CheckerSkippedRequested, J as metricsResultFromFiles, K as VerdictEnvelope, L as IdGenerator, M as loadConfigCell, Mt as OutputMode_exports, N as describeErrors, Nt as RunEvent_exports$1, O as ClassifyWorkerExitCommand, Ot as checkGroupedPlans, P as forkCoreSchema, Pt as SpanTaxonomy_exports, Q as makeWorkerClient, R as surfacedSurvivorsOf, S as IncrementalReportSchema, St as MergeCommand, T as GitDiff, Tt as extendsPropertySchema, U as RunIdentity, V as StrykerPackage, W as buildVerdictEnvelope, X as reporterWorkerFactory, Y as MetricsResultFromReport, Z as spawnReporterWorker, _ as isCommandRunner, _t as defaultOptions, a as MachineConsole, at as initialExtendsStepState, b as readProjectCell, bt as ExtendsStepStateSchema, c as prepareCell, ct as ExtendsStepRead, d as buildTestRunner, dt as ConfigError, et as make, f as makeChildProcessTestRunner, ft as ConfigFileInvalidError, g as vmTestRunnerConfig, gt as createDefaultOptions, h as vmRunnerPluginUrl, ht as ConfigFileUnsupportedError, i as makeRunEventStream, it as importModule, j as validateOptions, jt as WorkerBootTimeoutError, k as ClassifyWorkerExitDecision, kt as ChildProcessCrashedError, l as mutantDetailEventsOf, lt as ExtendsStepRefused, m as testRunnerConfigOf, mt as ConfigFileUnreadableError, n as RunEventDrain, nt as FileMatcher, o as HtmlReporter_exports, ot as StrykerError, p as isVmRunner, pt as ConfigFileNotFoundError, q as staticVerdictOf, r as RunEventDrainLive, rt as decideExtendsStep, s as mutationTestCell, st as ExtendsStepDone, t as strykerCell, tt as ReproducerSchema, u as instrumentCell, ut as ExtendsStepResolve, v as import_closure_cell_exports, vt as ConfigDocumentSchema, w as layerWorkerProtocol, wt as ReadConfigCommand, x as concurrencyCell, xt as ImportedModuleSchema, y as relativeNormalizedFileName, yt as ExtendsStepDocumentSchema, z as SurfacingFields } from "./run-stages-k4L7ymmp.mjs";
4
4
  import { n as StageError } from "./Run.schema-DuaneDGd.mjs";
5
5
  import { Cell, Sandwich, Workflow } from "@systemfsoftware/effect-cell-types";
6
6
  import * as S from "effect/Schema";
@@ -242,6 +242,7 @@ const admitMutantRerun = Workflow.make({
242
242
  const PriorReportDocument = S.Struct({
243
243
  config: S.optional(S.Record(S.String, S.Unknown)),
244
244
  framework: S.optional(S.Struct({ version: S.optional(S.String) })),
245
+ budget: S.optional(RunEvent_exports$1.Budget),
245
246
  files: S.Record(S.String, S.Struct({
246
247
  source: S.String,
247
248
  mutants: S.Array(S.Struct({