@systemfsoftware/stryker-js 16.0.0 → 17.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/dist/main.mjs CHANGED
@@ -11789,7 +11789,7 @@ const FailureImpl = function(failure) {
11789
11789
  };
11790
11790
  FailureImpl.prototype = FailureProto;
11791
11791
  /** @internal */
11792
- const fail$9 = (failure) => new FailureImpl(failure);
11792
+ const fail$10 = (failure) => new FailureImpl(failure);
11793
11793
  /** @internal */
11794
11794
  const SuccessImpl = function(success) {
11795
11795
  this.success = success;
@@ -11800,7 +11800,7 @@ const succeed$11 = (success) => new SuccessImpl(success);
11800
11800
  /** @internal */
11801
11801
  const getSuccess$1 = (self) => isFailure$2(self) ? none$1 : some$2(self.success);
11802
11802
  /** @internal */
11803
- const fromOption$3 = /*#__PURE__*/ dual(2, (self, onNone) => isNone$1(self) ? fail$9(onNone()) : succeed$11(self.value));
11803
+ const fromOption$3 = /*#__PURE__*/ dual(2, (self, onNone) => isNone$1(self) ? fail$10(onNone()) : succeed$11(self.value));
11804
11804
  //#endregion
11805
11805
  //#region ../../node_modules/.pnpm/effect@4.0.0/node_modules/effect/dist/Order.js
11806
11806
  /**
@@ -14452,7 +14452,7 @@ const succeed$10 = succeed$11;
14452
14452
  * @category constructors
14453
14453
  * @since 4.0.0
14454
14454
  */
14455
- const fail$8 = fail$9;
14455
+ const fail$9 = fail$10;
14456
14456
  /**
14457
14457
  * Converts an `Option<A>` into a `Result<A, E>`.
14458
14458
  *
@@ -14489,12 +14489,12 @@ const try_$2 = (evaluate) => {
14489
14489
  if (isFunction(evaluate)) try {
14490
14490
  return succeed$10(evaluate());
14491
14491
  } catch (e) {
14492
- return fail$8(e);
14492
+ return fail$9(e);
14493
14493
  }
14494
14494
  else try {
14495
14495
  return succeed$10(evaluate.try());
14496
14496
  } catch (e) {
14497
- return fail$8(evaluate.catch(e));
14497
+ return fail$9(evaluate.catch(e));
14498
14498
  }
14499
14499
  };
14500
14500
  /**
@@ -14646,7 +14646,7 @@ const getSuccess = getSuccess$1;
14646
14646
  * @category mapping
14647
14647
  * @since 4.0.0
14648
14648
  */
14649
- const mapError$5 = /*#__PURE__*/ dual(2, (self, f) => isFailure$1(self) ? fail$8(f(self.failure)) : self);
14649
+ const mapError$5 = /*#__PURE__*/ dual(2, (self, f) => isFailure$1(self) ? fail$9(f(self.failure)) : self);
14650
14650
  /**
14651
14651
  * Transforms the success channel of a `Result`, leaving the failure channel unchanged.
14652
14652
  *
@@ -14817,7 +14817,7 @@ const getOrThrow = /*#__PURE__*/ (/* @__PURE__ */ dual(2, (self, onFailure) => {
14817
14817
  * @category sequencing
14818
14818
  * @since 2.0.0
14819
14819
  */
14820
- const flatMap$8 = /*#__PURE__*/ dual(2, (self, f) => isFailure$1(self) ? fail$8(self.failure) : f(self.success));
14820
+ const flatMap$8 = /*#__PURE__*/ dual(2, (self, f) => isFailure$1(self) ? fail$9(self.failure) : f(self.success));
14821
14821
  /**
14822
14822
  * Collects a structure of `Result`s into a single `Result` of collected values.
14823
14823
  *
@@ -16900,7 +16900,7 @@ const toPredicate = (self) => (input) => !isFailure$1(self(input));
16900
16900
  * @category constructors
16901
16901
  * @since 4.0.0
16902
16902
  */
16903
- const has$5 = (key) => (input) => input.has(key) ? succeed$10(input) : fail$8(input);
16903
+ const has$5 = (key) => (input) => input.has(key) ? succeed$10(input) : fail$9(input);
16904
16904
  /**
16905
16905
  * Composes two filters sequentially, feeding the output of the first into the second.
16906
16906
  *
@@ -17919,7 +17919,7 @@ const causeInterrupt = (fiberId) => new CauseImpl([new Interrupt(fiberId)]);
17919
17919
  /** @internal */
17920
17920
  const findFail$1 = (self) => {
17921
17921
  const reason = self.reasons.find(isFailReason$1);
17922
- return reason ? succeed$10(reason) : fail$8(self);
17922
+ return reason ? succeed$10(reason) : fail$9(self);
17923
17923
  };
17924
17924
  /** @internal */
17925
17925
  const findError$1 = (self) => {
@@ -17927,7 +17927,7 @@ const findError$1 = (self) => {
17927
17927
  const reason = self.reasons[i];
17928
17928
  if (reason._tag === "Fail") return succeed$10(reason.error);
17929
17929
  }
17930
- return fail$8(self);
17930
+ return fail$9(self);
17931
17931
  };
17932
17932
  /** @internal */
17933
17933
  const findErrorOption$1 = /*#__PURE__*/ toOption$1(findError$1);
@@ -17936,7 +17936,7 @@ const hasDies$1 = (self) => self.reasons.some(isDieReason$1);
17936
17936
  /** @internal */
17937
17937
  const findDefect = (self) => {
17938
17938
  const reason = self.reasons.find(isDieReason$1);
17939
- return reason ? succeed$10(reason.defect) : fail$8(self);
17939
+ return reason ? succeed$10(reason.defect) : fail$9(self);
17940
17940
  };
17941
17941
  /** @internal */
17942
17942
  const hasInterrupts$1 = (self) => self.reasons.some(isInterruptReason);
@@ -17949,7 +17949,7 @@ const causeFilterInterruptors = (self) => {
17949
17949
  interruptors ??= /* @__PURE__ */ new Set();
17950
17950
  if (f.fiberId !== void 0) interruptors.add(f.fiberId);
17951
17951
  }
17952
- return interruptors ? succeed$10(interruptors) : fail$8(self);
17952
+ return interruptors ? succeed$10(interruptors) : fail$9(self);
17953
17953
  };
17954
17954
  /** @internal */
17955
17955
  const causeInterruptors = (self) => {
@@ -18407,7 +18407,7 @@ const succeed$9 = exitSucceed;
18407
18407
  /** @internal */
18408
18408
  const failCause$6 = exitFailCause;
18409
18409
  /** @internal */
18410
- const fail$7 = exitFail;
18410
+ const fail$8 = exitFail;
18411
18411
  /** @internal */
18412
18412
  const sync$1 = /*#__PURE__*/ makePrimitive$1({
18413
18413
  op: "Sync",
@@ -18425,10 +18425,10 @@ const suspend$5 = /*#__PURE__*/ makePrimitive$1({
18425
18425
  }
18426
18426
  });
18427
18427
  /** @internal */
18428
- const fromOption$1 = /*#__PURE__*/ dual((args) => args.length >= 2 || isOption(args[0]), (option, onNone) => isNone(option) ? fail$7(onNone ? onNone() : new NoSuchElementError("Effect.fromOption: Option.none")) : succeed$9(option.value));
18428
+ const fromOption$1 = /*#__PURE__*/ dual((args) => args.length >= 2 || isOption(args[0]), (option, onNone) => isNone(option) ? fail$8(onNone ? onNone() : new NoSuchElementError("Effect.fromOption: Option.none")) : succeed$9(option.value));
18429
18429
  /** @internal */
18430
18430
  const fromResult$1 = /*#__PURE__*/ match$6({
18431
- onFailure: fail$7,
18431
+ onFailure: fail$8,
18432
18432
  onSuccess: succeed$9
18433
18433
  });
18434
18434
  /** @internal */
@@ -18454,7 +18454,7 @@ const failCauseSync$1 = (evaluate) => suspend$5(() => failCause$6(evaluate()));
18454
18454
  /** @internal */
18455
18455
  const die$3 = (defect) => exitDie(defect);
18456
18456
  /** @internal */
18457
- const failSync$1 = (error) => suspend$5(() => fail$7(error()));
18457
+ const failSync$1 = (error) => suspend$5(() => fail$8(error()));
18458
18458
  /** @internal */
18459
18459
  const void_$3 = /*#__PURE__*/ succeed$9(void 0);
18460
18460
  /** @internal */
@@ -18465,7 +18465,7 @@ const try_$1 = (options) => {
18465
18465
  try {
18466
18466
  return succeed$9(evaluate());
18467
18467
  } catch (err) {
18468
- return fail$7(catcher(err));
18468
+ return fail$8(catcher(err));
18469
18469
  }
18470
18470
  });
18471
18471
  };
@@ -18480,7 +18480,7 @@ const tryPromise$1 = (options) => {
18480
18480
  return callbackOptions(function(resume, signal) {
18481
18481
  const failWithCatch = (cause) => {
18482
18482
  try {
18483
- resume(fail$7(internalCall(() => catcher(cause))));
18483
+ resume(fail$8(internalCall(() => catcher(cause))));
18484
18484
  } catch (err) {
18485
18485
  resume(die$3(err));
18486
18486
  }
@@ -18729,7 +18729,7 @@ const tap$3 = /*#__PURE__*/ dual(2, (self, f) => new ContImpl(self, isEffect$1(f
18729
18729
  /** @internal */
18730
18730
  const asVoid$1 = (self) => new ContImpl(self, returnPayload, exitVoid);
18731
18731
  /** @internal */
18732
- const sandbox$1 = (self) => catchCause$2(self, fail$7);
18732
+ const sandbox$1 = (self) => catchCause$2(self, fail$8);
18733
18733
  /** @internal */
18734
18734
  const raceAllFirst = (all, options) => withFiber$1((parent) => {
18735
18735
  const fibers = /* @__PURE__ */ new Set();
@@ -18794,7 +18794,7 @@ const exitIsSuccess = (self) => self._tag === "Success";
18794
18794
  /** @internal */
18795
18795
  const exitIsFailure = (self) => self._tag === "Failure";
18796
18796
  /** @internal */
18797
- const exitFilterCause = (self) => self._tag === "Failure" ? succeed$10(self.cause) : fail$8(self);
18797
+ const exitFilterCause = (self) => self._tag === "Failure" ? succeed$10(self.cause) : fail$9(self);
18798
18798
  /** @internal */
18799
18799
  const exitVoid = /*#__PURE__*/ exitSucceed(void 0);
18800
18800
  /** @internal */
@@ -18930,14 +18930,14 @@ const catchTags$1 = /*#__PURE__*/ dual((args) => isEffect$1(args[0]), (self, cas
18930
18930
  let keys;
18931
18931
  return catchFilter$1(self, (e) => {
18932
18932
  keys ??= Object.keys(cases);
18933
- return hasProperty(e, "_tag") && isString$1(e["_tag"]) && keys.includes(e["_tag"]) ? succeed$10(e) : fail$8(e);
18933
+ return hasProperty(e, "_tag") && isString$1(e["_tag"]) && keys.includes(e["_tag"]) ? succeed$10(e) : fail$9(e);
18934
18934
  }, (e) => cases[e["_tag"]](e), orElse);
18935
18935
  });
18936
18936
  /** @internal */
18937
18937
  const catchReason$1 = /*#__PURE__*/ dual((args) => isEffect$1(args[0]), (self, errorTag, reasonTag, f, orElse) => catchIf$1(self, (e) => isTagged(e, errorTag) && hasProperty(e, "reason") && (orElse !== void 0 || isTagged(e.reason, reasonTag)), (e) => {
18938
18938
  const reason = e.reason;
18939
18939
  if (isTagged(reason, reasonTag)) return f(reason, e);
18940
- return orElse ? orElse(reason, e) : fail$7(e);
18940
+ return orElse ? orElse(reason, e) : fail$8(e);
18941
18941
  }));
18942
18942
  /** @internal */
18943
18943
  const mapError$4 = /*#__PURE__*/ dual(2, (self, f) => catch_$3(self, (error) => failSync$1(() => f(error))));
@@ -18984,7 +18984,7 @@ const option$2 = (self) => match$4(self, {
18984
18984
  });
18985
18985
  /** @internal */
18986
18986
  const result$2 = (self) => matchEager(self, {
18987
- onFailure: fail$8,
18987
+ onFailure: fail$9,
18988
18988
  onSuccess: succeed$10
18989
18989
  });
18990
18990
  /** @internal */
@@ -19069,7 +19069,7 @@ const timeout$1 = /*#__PURE__*/ dual(2, (self, duration) => {
19069
19069
  const decoded = fromInputUnsafe$1(duration);
19070
19070
  return timeoutOrElse$1(self, {
19071
19071
  duration: decoded,
19072
- orElse: () => fail$7(timeoutErrorFromDuration(decoded))
19072
+ orElse: () => fail$8(timeoutErrorFromDuration(decoded))
19073
19073
  });
19074
19074
  });
19075
19075
  /** @internal */
@@ -19855,7 +19855,7 @@ const annotateCurrentSpan$1 = (...args) => withFiber$1((fiber) => {
19855
19855
  /** @internal */
19856
19856
  const currentSpan$1 = /*#__PURE__*/ withFiber$1((fiber) => {
19857
19857
  const span = fiber.currentSpanLocal;
19858
- return span ? succeed$9(span) : fail$7(new NoSuchElementError());
19858
+ return span ? succeed$9(span) : fail$8(new NoSuchElementError());
19859
19859
  });
19860
19860
  /** @internal */
19861
19861
  const ClockRef = /*#__PURE__*/ Reference("effect/Clock", { defaultValue: () => new ClockImpl() });
@@ -20229,7 +20229,7 @@ const failCause$5 = exitFailCause;
20229
20229
  * @category constructors
20230
20230
  * @since 2.0.0
20231
20231
  */
20232
- const fail$6 = exitFail;
20232
+ const fail$7 = exitFail;
20233
20233
  /**
20234
20234
  * Creates a failed Exit from a defect (unexpected error).
20235
20235
  *
@@ -20494,6 +20494,38 @@ const _await = (self) => callback$2((resume) => {
20494
20494
  */
20495
20495
  const done$1 = /* @__PURE__ */ dual(2, (self, effect) => sync$1(() => doneUnsafe(self, effect)));
20496
20496
  /**
20497
+ * Attempts to complete the `Deferred` with the specified error.
20498
+ *
20499
+ * **When to use**
20500
+ *
20501
+ * Use to complete a `Deferred` with a typed failure value.
20502
+ *
20503
+ * **Details**
20504
+ *
20505
+ * Fibers waiting on the `Deferred` fail with that error only if this call
20506
+ * completes it. The returned effect succeeds with `true` when this call
20507
+ * completed the `Deferred`, or `false` if it was already completed.
20508
+ *
20509
+ * **Example** (Failing a Deferred with an error)
20510
+ *
20511
+ * ```ts import.meta.vitest
20512
+ * import { Deferred, Effect, Exit } from "effect"
20513
+ *
20514
+ * const program = Effect.gen(function*() {
20515
+ * const deferred = yield* Deferred.make<number, string>()
20516
+ * const success = yield* Deferred.fail(deferred, "Operation failed")
20517
+ * const exit = yield* Effect.exit(Deferred.await(deferred))
20518
+ * return [success, exit]
20519
+ * })
20520
+ *
20521
+ * await Effect.runPromise(program) // => [true, Exit.fail("Operation failed")]
20522
+ * ```
20523
+ *
20524
+ * @category completion
20525
+ * @since 2.0.0
20526
+ */
20527
+ const fail$6 = /*#__PURE__*/ dual(2, (self, error) => done$1(self, exitFail(error)));
20528
+ /**
20497
20529
  * Attempts to complete the `Deferred` with the specified `Cause`.
20498
20530
  *
20499
20531
  * **When to use**
@@ -23532,8 +23564,8 @@ const filterDone = (cause) => {
23532
23564
  let hasFailure = false;
23533
23565
  for (const reason of cause.reasons) if (isDoneFailure(reason)) done ??= reason.error;
23534
23566
  else if (reason._tag !== "Interrupt") hasFailure = true;
23535
- if (done === void 0) return fail$8(cause);
23536
- return hasFailure ? fail$8(fromReasons(cause.reasons.filter((reason) => !isDoneFailure(reason)))) : succeed$10(done);
23567
+ if (done === void 0) return fail$9(cause);
23568
+ return hasFailure ? fail$9(fromReasons(cause.reasons.filter((reason) => !isDoneFailure(reason)))) : succeed$10(done);
23537
23569
  };
23538
23570
  /**
23539
23571
  * Filters a Cause to extract the leftover value from done errors.
@@ -24003,7 +24035,7 @@ const retryOrElse$1 = /*#__PURE__*/ dual(3, (self, policy, orElse) => flatMap$6(
24003
24035
  /** @internal */
24004
24036
  const retry$1 = /*#__PURE__*/ dual(2, (self, options) => {
24005
24037
  const schedule = typeof options === "function" ? options(identity) : isSchedule(options) ? options : buildFromOptions(options);
24006
- return retryOrElse$1(self, schedule, fail$7);
24038
+ return retryOrElse$1(self, schedule, fail$8);
24007
24039
  });
24008
24040
  const passthroughForever = /*#__PURE__*/ passthrough$2(forever$1);
24009
24041
  /** @internal */
@@ -25358,7 +25390,7 @@ const gen = gen$1;
25358
25390
  * @category constructors
25359
25391
  * @since 2.0.0
25360
25392
  */
25361
- const fail$4 = fail$7;
25393
+ const fail$4 = fail$8;
25362
25394
  /**
25363
25395
  * Creates an `Effect` that represents a recoverable error using a lazy evaluation.
25364
25396
  *
@@ -35121,6 +35153,22 @@ const succeed$4 = (value) => fromEffect$2(succeed$5(value));
35121
35153
  */
35122
35154
  const empty$13 = /*#__PURE__*/ fromPull$1(/*#__PURE__*/ succeed$5(/*#__PURE__*/ done()));
35123
35155
  /**
35156
+ * Constructs a channel that fails immediately with the specified error.
35157
+ *
35158
+ * **Example** (Failing with an error)
35159
+ *
35160
+ * ```ts import.meta.vitest
35161
+ * import { Channel, Effect, Exit } from "effect"
35162
+ *
35163
+ * const failedChannel = Channel.fail("Something went wrong")
35164
+ * Effect.runSync(Effect.exit(Channel.runCollect(failedChannel))) // => Exit.fail("Something went wrong")
35165
+ * ```
35166
+ *
35167
+ * @category constructors
35168
+ * @since 2.0.0
35169
+ */
35170
+ const fail$3 = (error) => fromPull$1(succeed$5(fail$4(error)));
35171
+ /**
35124
35172
  * Constructs a channel that fails immediately with the specified `Cause`.
35125
35173
  *
35126
35174
  * **When to use**
@@ -35916,6 +35964,15 @@ const catchCauseFilter = /*#__PURE__*/ dual(3, (self, filter, f) => catchCause(s
35916
35964
  }));
35917
35965
  const catch_$1 = /*#__PURE__*/ dual(2, (self, f) => catchCauseFilter(self, findError, (e) => f(e)));
35918
35966
  /**
35967
+ * Returns a new channel, which is the same as this one, except the failure
35968
+ * value of the returned channel is created by applying the specified function
35969
+ * to the failure value of this channel.
35970
+ *
35971
+ * @category error handling
35972
+ * @since 2.0.0
35973
+ */
35974
+ const mapError$2 = /*#__PURE__*/ dual(2, (self, f) => catch_$1(self, (err) => fail$3(f(err))));
35975
+ /**
35919
35976
  * Merges multiple channels with specified concurrency and buffering options.
35920
35977
  *
35921
35978
  * **When to use**
@@ -38228,6 +38285,30 @@ const filterMap$2 = /*#__PURE__*/ dual(2, (self, filter) => fromChannel(filterMa
38228
38285
  const filterEffect = /*#__PURE__*/ dual(2, (self, predicate) => fromChannel(filterArrayEffect(toChannel(self), predicate)));
38229
38286
  const catch_ = /*#__PURE__*/ dual(2, (self, f) => fromChannel(catch_$1(self.channel, (error) => f(error).channel)));
38230
38287
  /**
38288
+ * Transforms the errors emitted by this stream using `f`.
38289
+ *
38290
+ * **Example** (Mapping stream errors)
38291
+ *
38292
+ * ```ts import.meta.vitest
38293
+ * import { Effect, Stream } from "effect"
38294
+ *
38295
+ * const program = Effect.gen(function*() {
38296
+ * const result = yield* Stream.fail("bad").pipe(
38297
+ * Stream.mapError((error) => `mapped: ${error}`),
38298
+ * Stream.catch((error) => Stream.make(`recovered from ${error}`)),
38299
+ * Stream.runCollect
38300
+ * )
38301
+ * result // => [ 'recovered from mapped: bad' ]
38302
+ * })
38303
+ *
38304
+ * await Effect.runPromise(program)
38305
+ * ```
38306
+ *
38307
+ * @category error handling
38308
+ * @since 2.0.0
38309
+ */
38310
+ const mapError$1 = /*#__PURE__*/ dual(2, (self, f) => fromChannel(mapError$2(self.channel, f)));
38311
+ /**
38231
38312
  * Takes elements until the predicate matches.
38232
38313
  *
38233
38314
  * **Details**
@@ -38466,7 +38547,7 @@ const transduce = /*#__PURE__*/ dual(2, (self, sink) => transformPull(self, (ups
38466
38547
  }
38467
38548
  return upstream;
38468
38549
  }).pipe(catch_$2((error) => {
38469
- done$10 = fail$6(error);
38550
+ done$10 = fail$7(error);
38470
38551
  return done();
38471
38552
  }));
38472
38553
  const pull = map$7(suspend$4(() => sink.transform(upstreamWithLeftover, scope)), ([value, leftover_]) => {
@@ -40240,14 +40321,14 @@ const encode = (input) => encodeBytes(typeof input === "string" ? encoder$2.enco
40240
40321
  const decode$1 = (str) => {
40241
40322
  const stripped = stripCrlf(str);
40242
40323
  const length = stripped.length;
40243
- if (length % 4 !== 0) return fail$8(new EncodingError({
40324
+ if (length % 4 !== 0) return fail$9(new EncodingError({
40244
40325
  kind: "Decode",
40245
40326
  module: "Base64",
40246
40327
  input: stripped,
40247
40328
  message: `Length must be a multiple of 4, but is ${length}`
40248
40329
  }));
40249
40330
  const index = stripped.indexOf("=");
40250
- if (index !== -1 && (index < length - 2 || index === length - 2 && stripped[length - 1] !== "=")) return fail$8(new EncodingError({
40331
+ if (index !== -1 && (index < length - 2 || index === length - 2 && stripped[length - 1] !== "=")) return fail$9(new EncodingError({
40251
40332
  kind: "Decode",
40252
40333
  module: "Base64",
40253
40334
  input: stripped,
@@ -40264,7 +40345,7 @@ const decode$1 = (str) => {
40264
40345
  }
40265
40346
  return succeed$10(result);
40266
40347
  } catch (cause) {
40267
- return fail$8(new EncodingError({
40348
+ return fail$9(new EncodingError({
40268
40349
  kind: "Decode",
40269
40350
  module: "Base64",
40270
40351
  input: stripped,
@@ -44045,7 +44126,7 @@ function stepArray(s, item, exit, i) {
44045
44126
  if (s.options.errors === "all") {
44046
44127
  if (s.issues) s.issues.push(issue);
44047
44128
  else s.issues = [issue];
44048
- } else return fail$6(new Composite(s.ast, [issue], s.input, s.options));
44129
+ } else return fail$7(new Composite(s.ast, [issue], s.input, s.options));
44049
44130
  }
44050
44131
  }
44051
44132
  const parseArrayOptions = {
@@ -44066,7 +44147,7 @@ const wrapPropertyKeyIssue = (s, ast, key, exit) => {
44066
44147
  if (s.options.errors === "all") {
44067
44148
  if (s.issues) s.issues.push(pointer);
44068
44149
  else s.issues = [pointer];
44069
- } else return fail$6(new Composite(ast, [pointer], s.input, s.options));
44150
+ } else return fail$7(new Composite(ast, [pointer], s.input, s.options));
44070
44151
  };
44071
44152
  /**
44072
44153
  * floating point or integer, with optional exponent
@@ -44369,7 +44450,7 @@ function stepProperty(s, p, exit) {
44369
44450
  if (s.issues) s.issues.push(issue);
44370
44451
  else s.issues = [issue];
44371
44452
  return;
44372
- } else return fail$6(new Composite(s.ast, [issue], s.input, s.options));
44453
+ } else return fail$7(new Composite(s.ast, [issue], s.input, s.options));
44373
44454
  }
44374
44455
  }
44375
44456
  const parsePropertiesOptions = {
@@ -44711,7 +44792,7 @@ const Union$1 = class extends ASTNodeImpl {
44711
44792
  function failSingleUnionCandidate(ast, cause, input, options) {
44712
44793
  const issue = getSchemaIssue(cause);
44713
44794
  if (!issue) return failCause$5(cause);
44714
- return fail$6(new AnyOf(ast, [issue], input, options));
44795
+ return fail$7(new AnyOf(ast, [issue], input, options));
44715
44796
  }
44716
44797
  function catchSingleUnionCandidate(ast, result, input, options) {
44717
44798
  return catchCause$1(result, (cause) => failSingleUnionCandidate(ast, cause, input, options));
@@ -44753,7 +44834,7 @@ const parseUnion = /*#__PURE__*/ iterateEager()({
44753
44834
  } else {
44754
44835
  if (s.out && s.successes) {
44755
44836
  s.successes.push(s.ast.types[i]);
44756
- return fail$6(new OneOf(s.ast, s.successes, s.input, s.options));
44837
+ return fail$7(new OneOf(s.ast, s.successes, s.input, s.options));
44757
44838
  }
44758
44839
  s.out = exit;
44759
44840
  if (s.successes) s.successes.push(s.ast.types[i]);
@@ -46003,7 +46084,7 @@ function asResult(parser) {
46003
46084
  return (input, options) => {
46004
46085
  const exit = parserExit(input, options);
46005
46086
  if (isSuccess(exit)) return succeed$10(exit.value);
46006
- return fail$8(getSchemaIssueOrThrow(exit.cause, "Result adapter can only return schema issues"));
46087
+ return fail$9(getSchemaIssueOrThrow(exit.cause, "Result adapter can only return schema issues"));
46007
46088
  };
46008
46089
  }
46009
46090
  function runSync(effect, message) {
@@ -47702,7 +47783,7 @@ const wordToOctets = (word) => [
47702
47783
  word >>> 8 & 255,
47703
47784
  word & 255
47704
47785
  ];
47705
- const addressError = (input, message) => fail$8(new NetAddressError({
47786
+ const addressError = (input, message) => fail$9(new NetAddressError({
47706
47787
  input,
47707
47788
  message
47708
47789
  }));
@@ -51983,7 +52064,7 @@ function schema$1(codec, path) {
51983
52064
  const fullPath = [...pathPrefix, ...localPath];
51984
52065
  return loadCursor(provider, fullPath).pipe(flatMapEager((cursor) => decodeCursor(cursor).pipe(mapEager(succeed$10), catchEager((issue) => {
51985
52066
  const error = new ConfigError$1(new SchemaError(fullPath.length > 0 ? new Pointer(fullPath, issue) : issue));
51986
- return hasProviderInput(encodedAst, cursor.node) ? fail$4(error) : succeed$5(fail$8(error));
52067
+ return hasProviderInput(encodedAst, cursor.node) ? fail$4(error) : succeed$5(fail$9(error));
51987
52068
  }))), catchDefect((defect) => isSourceError(defect) ? fail$4(new ConfigError$1(defect)) : die(defect)));
51988
52069
  });
51989
52070
  }
@@ -61777,7 +61858,7 @@ const makeOrPredicate = (patterns) => {
61777
61858
  /** @internal */
61778
61859
  const type$1 = () => makeTypeMatcher(identity, []);
61779
61860
  /** @internal */
61780
- const value$1 = (i) => makeValueMatcher(i, fail$8(i));
61861
+ const value$1 = (i) => makeValueMatcher(i, fail$9(i));
61781
61862
  /** @internal */
61782
61863
  const valueTags$1 = /*#__PURE__*/ dual(2, (input, fields) => {
61783
61864
  return tagsExhaustive(fields)(makeTypeMatcher(identity, []))(input);
@@ -61848,7 +61929,7 @@ const result = (self) => {
61848
61929
  const input = self.select(...args);
61849
61930
  if (_case._tag === "When" && _case.guard(input) === true) return succeed$10(_case.evaluate(input, ...args));
61850
61931
  else if (_case._tag === "Not" && _case.guard(input) === false) return succeed$10(_case.evaluate(input, ...args));
61851
- return fail$8(input);
61932
+ return fail$9(input);
61852
61933
  };
61853
61934
  }
61854
61935
  return (...args) => {
@@ -61858,7 +61939,7 @@ const result = (self) => {
61858
61939
  if (_case._tag === "When" && _case.guard(input) === true) return succeed$10(_case.evaluate(input, ...args));
61859
61940
  else if (_case._tag === "Not" && _case.guard(input) === false) return succeed$10(_case.evaluate(input, ...args));
61860
61941
  }
61861
- return fail$8(input);
61942
+ return fail$9(input);
61862
61943
  };
61863
61944
  };
61864
61945
  const getExhaustiveAbsurdErrorMessage = "effect/match/Match/exhaustive: absurd";
@@ -65465,6 +65546,9 @@ const MutantRunResultSchema = Union([
65465
65546
  errorMessage: String$7
65466
65547
  })
65467
65548
  ]);
65549
+ var MutantRunStarted = class extends TaggedClass()("MutantRunStarted", {}) {};
65550
+ var MutantRunSettled$1 = class extends TaggedClass()("MutantRunSettled", { result: MutantRunResultSchema }) {};
65551
+ const MutantRunEventSchema = Union([MutantRunStarted, MutantRunSettled$1]);
65468
65552
  const CoverageAnalysisSchema = Literals$3([
65469
65553
  "off",
65470
65554
  "all",
@@ -65680,8 +65764,9 @@ const dryRun$1 = make$32("dryRun", {
65680
65764
  }).middleware(TraceContextMiddleware);
65681
65765
  const mutantRun = make$32("mutantRun", {
65682
65766
  payload: TestRunnerMutantRunRequest,
65683
- success: MutantRunResultSchema,
65684
- error: TestRunnerFailed
65767
+ success: MutantRunEventSchema,
65768
+ error: TestRunnerFailed,
65769
+ stream: true
65685
65770
  }).middleware(TraceContextMiddleware);
65686
65771
  const check$1 = make$32("check", {
65687
65772
  payload: CheckerRequest,
@@ -65832,7 +65917,10 @@ var TestRunner_exports = /* @__PURE__ */ __exportAll$4({
65832
65917
  HitLimitReason: () => HitLimitReason,
65833
65918
  HitLimitReasonPrefix: () => HitLimitReasonPrefix,
65834
65919
  HitLimitReasonText: () => HitLimitReasonText,
65920
+ MutantRunEventSchema: () => MutantRunEventSchema,
65835
65921
  MutantRunResultSchema: () => MutantRunResultSchema,
65922
+ MutantRunSettled: () => MutantRunSettled$1,
65923
+ MutantRunStarted: () => MutantRunStarted,
65836
65924
  MutantRunStatus: () => MutantRunStatus,
65837
65925
  TestId: () => TestId,
65838
65926
  TestResultSchema: () => TestResultSchema,
@@ -71540,7 +71628,7 @@ var ErrorText = class extends Class("ErrorText")({ text: NonEmptyString }) {};
71540
71628
  var CauseText = class extends Class("CauseText")({ text: NonEmptyString }) {};
71541
71629
  const nonEmptyText$2 = liftPredicate(is$2(NonEmptyString));
71542
71630
  const errorTextOf$2 = (cause) => flatMap$9(nonEmptyText$2(errorTextValueOf(cause)), (text) => ErrorText.makeOption({ text }));
71543
- const causeTextOf$1 = (cause) => flatMap$9(nonEmptyText$2(causeChainTextOf(cause)), (text) => CauseText.makeOption({ text }));
71631
+ const causeTextOf$2 = (cause) => flatMap$9(nonEmptyText$2(causeChainTextOf(cause)), (text) => CauseText.makeOption({ text }));
71544
71632
  function errorTextValueOf(error) {
71545
71633
  return value(error).pipe(when(isEmptyError, () => ""), when(instanceOf(Error), errorText), orElse$1(() => stringifyNonError(error)));
71546
71634
  }
@@ -71621,7 +71709,7 @@ function objectCauseTextOf(cause, depth) {
71621
71709
  var ErrorText_exports = /* @__PURE__ */ __exportAll$2({
71622
71710
  CauseText: () => CauseText,
71623
71711
  ErrorText: () => ErrorText,
71624
- causeTextOf: () => causeTextOf$1,
71712
+ causeTextOf: () => causeTextOf$2,
71625
71713
  errorTextOf: () => errorTextOf$2
71626
71714
  });
71627
71715
  const MutatorNameSchema = String$7.pipe(check$2(isPattern(/^(?:[a-z][a-z0-9]*(?:-[a-z0-9]+)*\/)?[a-zA-Z][a-zA-Z0-9]*(?: [a-zA-Z][a-zA-Z0-9]*)*$/u)));
@@ -72843,7 +72931,7 @@ const applyMutant = dual((args) => args.length >= 2, applyMutantDataFirst);
72843
72931
  function cloneWithReplacement(mutant, originalTree) {
72844
72932
  const mutatedAst = cloneNode(originalTree);
72845
72933
  const { original, replacement } = mutant;
72846
- return value(hasReplaced(mutatedAst, original, replacement)).pipe(when(true, () => succeed$10(mutatedAst)), when(false, () => fail$8(MutantNotApplied.make({
72934
+ return value(hasReplaced(mutatedAst, original, replacement)).pipe(when(true, () => succeed$10(mutatedAst)), when(false, () => fail$9(MutantNotApplied.make({
72847
72935
  fileName: mutant.fileName,
72848
72936
  mutatorName: mutant.mutatorName
72849
72937
  }))), exhaustive);
@@ -74769,7 +74857,7 @@ const externalModuleArgumentText = (value) => match$1(isTruthy(value), {
74769
74857
  function printDataFirst(file, entryForFormat) {
74770
74858
  const context = { print: (inner) => print(inner, entryForFormat) };
74771
74859
  return match$8(entryForFormat(formatKeyOf(file)), {
74772
- onNone: () => fail$8(PrintFailed.make({ message: `No registered format renders the "${formatKeyOf(file)}" AST` })),
74860
+ onNone: () => fail$9(PrintFailed.make({ message: `No registered format renders the "${formatKeyOf(file)}" AST` })),
74773
74861
  onSome: (entry) => succeed$10(entry.print(file, context))
74774
74862
  });
74775
74863
  }
@@ -74864,7 +74952,7 @@ const resolveFormat = Workflow_exports.make({
74864
74952
  command: FormatResolutionCommand,
74865
74953
  decision: Union([FormatAssigned, FormatSkipped]),
74866
74954
  error: FormatOverrideUnclaimed,
74867
- decide: (command) => value(selectionFor(command)).pipe(tag("ClaimSelected", ({ claim }) => succeed$10(assignedFrom(claim, command))), tag("PinUnclaimed", ({ formatId }) => fail$8(overrideUnclaimedFrom(command, formatId))), tag("ExtensionUnclaimed", () => succeed$10(skippedFrom(command))), exhaustive)
74955
+ decide: (command) => value(selectionFor(command)).pipe(tag("ClaimSelected", ({ claim }) => succeed$10(assignedFrom(claim, command))), tag("PinUnclaimed", ({ formatId }) => fail$9(overrideUnclaimedFrom(command, formatId))), tag("ExtensionUnclaimed", () => succeed$10(skippedFrom(command))), exhaustive)
74868
74956
  });
74869
74957
  const AridRuleId = Literals$3([
74870
74958
  "arid-logging",
@@ -75200,7 +75288,7 @@ const claimingPlacer = (facts) => value(facts).pipe(when({
75200
75288
  isExpression: true,
75201
75289
  expressionIsValid: true
75202
75290
  }, () => some$1("expression")), when({ isStatement: true }, () => some$1("statement")), when({ isSwitchCase: true }, () => some$1("switch-case")), orElse$1(() => none()));
75203
- const placerOf = (command) => value(claimingPlacer(command.facts)).pipe(when(isSome, (chosen) => succeed$10(chosen.value)), when(isNone, () => fail$8(NoPlacerClaimsNode.make({ fileName: command.fileName }))), exhaustive);
75291
+ const placerOf = (command) => value(claimingPlacer(command.facts)).pipe(when(isSome, (chosen) => succeed$10(chosen.value)), when(isNone, () => fail$9(NoPlacerClaimsNode.make({ fileName: command.fileName }))), exhaustive);
75204
75292
  const expectedKindOf = (placer) => value(placer).pipe(when("expression", () => "an expression"), when("statement", () => "a statement"), when("switch-case", () => "a switch case"), exhaustive);
75205
75293
  const matchesPlacer = (placer, replacement) => value(placer).pipe(when("expression", () => replacement.isExpression), when("statement", () => replacement.isStatement), when("switch-case", () => replacement.isSwitchCase), exhaustive);
75206
75294
  const firstMismatch = (command, placer) => map$13(fromNullishOr(command.mutants.find((mutant) => !matchesPlacer(placer, mutant.replacement))), (mutant) => MutantKindMismatch.make({
@@ -75210,7 +75298,7 @@ const firstMismatch = (command, placer) => map$13(fromNullishOr(command.mutants.
75210
75298
  mutatorName: mutant.mutatorName,
75211
75299
  expected: expectedKindOf(placer)
75212
75300
  }));
75213
- const placementRefusal = (command, placer) => value(firstMismatch(command, placer)).pipe(when(isSome, (mismatch) => fail$8(mismatch.value)), when(isNone, () => succeed$10(void 0)), exhaustive);
75301
+ const placementRefusal = (command, placer) => value(firstMismatch(command, placer)).pipe(when(isSome, (mismatch) => fail$9(mismatch.value)), when(isNone, () => succeed$10(void 0)), exhaustive);
75214
75302
  const siteOf = (command, placer) => {
75215
75303
  const mutantIds = command.mutants.map((mutant) => mutant.id);
75216
75304
  return value(placer).pipe(when("expression", () => ExpressionSite.make({
@@ -75415,7 +75503,7 @@ const shiftedLocation = (location, offset) => ({
75415
75503
  end: shiftedPosition(location.end, offset)
75416
75504
  });
75417
75505
  const plannedMutant = (command, candidate, policyReason) => match$8(fromNullishOr(candidate.location), {
75418
- onNone: () => fail$8(MutantWithoutLocation.make({
75506
+ onNone: () => fail$9(MutantWithoutLocation.make({
75419
75507
  fileName: command.fileName,
75420
75508
  mutatorName: candidate.mutatorName
75421
75509
  })),
@@ -75549,19 +75637,19 @@ const placementFailureMessage = (refusal, node, mutants, fileName, lineStarts, b
75549
75637
  return `${placementLocation(node, fileName, lineStarts, basePath)} ${message}. Either remove this file from the list of files to be mutated, or exclude the mutator (using \`mutator.excludedMutations\`). Original error: ${refusalDetail(refusal)}`;
75550
75638
  };
75551
75639
  function nodeOfKind(mutant, node, isKind, kind) {
75552
- return isKind(node) ? succeed$10(node) : fail$8(/* @__PURE__ */ new Error(`Cannot place mutant ${mutant.id}: expected ${kind}, got ${node.type}`));
75640
+ return isKind(node) ? succeed$10(node) : fail$9(/* @__PURE__ */ new Error(`Cannot place mutant ${mutant.id}: expected ${kind}, got ${node.type}`));
75553
75641
  }
75554
75642
  function expressionOf$2(node) {
75555
- return isExpressionKind(node) ? succeed$10(node) : fail$8(/* @__PURE__ */ new Error(`Expected an expression, got ${node.type}`));
75643
+ return isExpressionKind(node) ? succeed$10(node) : fail$9(/* @__PURE__ */ new Error(`Expected an expression, got ${node.type}`));
75556
75644
  }
75557
75645
  function statementOf(node) {
75558
- return isStatementKind(node) ? succeed$10(node) : fail$8(/* @__PURE__ */ new Error(`Expected a statement, got ${node.type}`));
75646
+ return isStatementKind(node) ? succeed$10(node) : fail$9(/* @__PURE__ */ new Error(`Expected a statement, got ${node.type}`));
75559
75647
  }
75560
75648
  function isSwitchCase(node) {
75561
75649
  return nodeType(node) === "SwitchCase";
75562
75650
  }
75563
75651
  function switchCaseOf(node) {
75564
- return isSwitchCase(node) ? succeed$10(node) : fail$8(/* @__PURE__ */ new Error(`Expected a switch case, got ${node.type}`));
75652
+ return isSwitchCase(node) ? succeed$10(node) : fail$9(/* @__PURE__ */ new Error(`Expected a switch case, got ${node.type}`));
75565
75653
  }
75566
75654
  const fileNameWithin = (basePath, fileName) => basePath === void 0 ? fileName : relativeTo$1(basePath, fileName);
75567
75655
  function placementLocation(node, fileName, lineStarts, basePath) {
@@ -75892,7 +75980,7 @@ const shouldSkipNode = (frame, location, mutateDescription) => [
75892
75980
  isOutsideMutateRanges(location, mutateDescription)
75893
75981
  ].some((skip) => skip);
75894
75982
  const locationOfNode = (frame, context) => match$8(map$13(fromNullishOr(spanOf$4(frame.node)), (span) => locationOf(context.lineStarts, span)), {
75895
- onNone: () => fail$8(NodeWithoutSpan.make({ fileName: context.fileName })),
75983
+ onNone: () => fail$9(NodeWithoutSpan.make({ fileName: context.fileName })),
75896
75984
  onSome: succeed$10
75897
75985
  });
75898
75986
  const refusedPlacement = (refusal, node, mutants, context) => PlacementRefused.make({ message: placementFailureMessage(refusal, node, mutants, context.fileName, context.lineStarts, context.basePath) });
@@ -75910,7 +75998,7 @@ const applyToClaim = (mutants, target, state, context) => {
75910
75998
  }));
75911
75999
  };
75912
76000
  const attachPlaceable = (mutants, frame, state, context) => value(mutants.length > 0).pipe(when(false, () => succeed$10(state)), when(true, () => match$8(fromNullishOr(framesUpward(frame).find((candidate) => state.claims.some((claim) => claim.node === candidate.node))), {
75913
- onNone: () => fail$8(MutantsUnplaced.make({
76001
+ onNone: () => fail$9(MutantsUnplaced.make({
75914
76002
  fileName: context.fileName,
75915
76003
  detail: JSON.stringify(mutants, null, 2)
75916
76004
  })),
@@ -75954,7 +76042,7 @@ const planMutantsAt = (frame, candidates, directives, location, state, context)
75954
76042
  candidates: candidates.map((candidate) => candidate.data),
75955
76043
  mutantSetPolicy: context.mutantSetPolicy
75956
76044
  }));
75957
- return value(plan).pipe(when(isFailure$1, (failed) => fail$8(failed.failure)), orElse$1((succeeded) => collectPlan(frame, candidates, succeeded.success, state, context)));
76045
+ return value(plan).pipe(when(isFailure$1, (failed) => fail$9(failed.failure)), orElse$1((succeeded) => collectPlan(frame, candidates, succeeded.success, state, context)));
75958
76046
  };
75959
76047
  const candidatesFor = (frame, location, context) => value(shouldMutateAt(location, context.mutateDescription)).pipe(when(true, () => mutablesFor(frame, location, context)), orElse$1(() => []));
75960
76048
  const needsPlan = (candidates, directives) => [candidates.length > 0, directives.length > 0].some(Boolean);
@@ -75981,7 +76069,7 @@ const siteOfClaim = (claim, context) => {
75981
76069
  facts: claim.facts,
75982
76070
  mutants: claim.applied.map(([mutant, applied]) => replacementRecord(mutant, applied))
75983
76071
  }));
75984
- return value(decision).pipe(when(isFailure$1, (refused) => fail$8(refusedPlacement(refused.failure, claim.node, mutants, context))), orElse$1((decided) => succeed$10(decided.success)));
76072
+ return value(decision).pipe(when(isFailure$1, (refused) => fail$9(refusedPlacement(refused.failure, claim.node, mutants, context))), orElse$1((decided) => succeed$10(decided.success)));
75985
76073
  };
75986
76074
  const emitClaim = (claim, state, context) => value(claim.applied.length > 0).pipe(when(false, () => succeed$10(state)), when(true, () => map$12(siteOfClaim(claim, context), (site) => ({
75987
76075
  ...state,
@@ -76666,7 +76754,7 @@ const makeHtmlReporter = dual(2, (options, _init) => (events) => build(nodeFsPat
76666
76754
  var HtmlReporter_exports = /* @__PURE__ */ __exportAll$3({ makeHtmlReporter: () => makeHtmlReporter });
76667
76755
  //#endregion
76668
76756
  //#region package.json
76669
- var version = "16.0.0";
76757
+ var version = "17.0.0";
76670
76758
  //#endregion
76671
76759
  //#region ../../node_modules/.pnpm/effect@4.0.0/node_modules/effect/dist/cli/CliOutput.js
76672
76760
  /**
@@ -83184,7 +83272,7 @@ const runWith = (command, config) => {
83184
83272
  onSome: (level) => make$72(MinimumLogLevel, level)
83185
83273
  });
83186
83274
  yield* provideContext$3(program, services);
83187
- }, catchFilter((error) => isCliError(error) && error._tag === "ShowHelp" ? succeed$10(error) : fail$8(error), (error) => andThen$1(showHelp(command, error, config.renderErrors !== false), fail$4(error))), catchFilter((error) => config.renderErrors !== false && isCliError(error) && error._tag === "UserError" ? succeed$10(error) : fail$8(error), (error) => andThen$1(showUserError(error), fail$4(error))), catchFilter((e) => isQuitError(e) ? succeed$10(e) : fail$8(e), (_) => interrupt$1));
83275
+ }, catchFilter((error) => isCliError(error) && error._tag === "ShowHelp" ? succeed$10(error) : fail$9(error), (error) => andThen$1(showHelp(command, error, config.renderErrors !== false), fail$4(error))), catchFilter((error) => config.renderErrors !== false && isCliError(error) && error._tag === "UserError" ? succeed$10(error) : fail$9(error), (error) => andThen$1(showUserError(error), fail$4(error))), catchFilter((e) => isQuitError(e) ? succeed$10(e) : fail$9(e), (_) => interrupt$1));
83188
83276
  };
83189
83277
  //#endregion
83190
83278
  //#region src/bin/enable-compile-cache.ts
@@ -83307,7 +83395,7 @@ const refusedOutcome = (observation) => RunRefused.make({
83307
83395
  rule: observation.rule,
83308
83396
  message: observation.message
83309
83397
  });
83310
- const decide$29 = (command) => value(command.observation).pipe(tag("RunSucceededClean", () => succeed$10(succeededCleanOutcome())), tag("RunSucceededVerdict", (observation) => succeed$10(succeededVerdictOutcome(observation))), tag("RunInterruptedObservation", () => fail$8(RunInterrupted.make({ code: 130 }))), tag("RunHelpObservation", (observation) => succeed$10(helpOutcome(observation))), tag("RunCliErrorObservation", (observation) => succeed$10(cliErrorOutcome(observation))), tag("RunSurvivorsRejectedObservation", (observation) => succeed$10(survivorsRejectedOutcome(observation))), tag("RunSchemaErrorObservation", (observation) => succeed$10(schemaErrorOutcome(observation))), tag("RunClassedObservation", (observation) => succeed$10(classedOutcome(observation))), tag("RunGenericFailureObservation", (observation) => succeed$10(genericFailureOutcome(observation))), tag("RunRefusedObservation", (observation) => succeed$10(refusedOutcome(observation))), exhaustive);
83398
+ const decide$30 = (command) => value(command.observation).pipe(tag("RunSucceededClean", () => succeed$10(succeededCleanOutcome())), tag("RunSucceededVerdict", (observation) => succeed$10(succeededVerdictOutcome(observation))), tag("RunInterruptedObservation", () => fail$9(RunInterrupted.make({ code: 130 }))), tag("RunHelpObservation", (observation) => succeed$10(helpOutcome(observation))), tag("RunCliErrorObservation", (observation) => succeed$10(cliErrorOutcome(observation))), tag("RunSurvivorsRejectedObservation", (observation) => succeed$10(survivorsRejectedOutcome(observation))), tag("RunSchemaErrorObservation", (observation) => succeed$10(schemaErrorOutcome(observation))), tag("RunClassedObservation", (observation) => succeed$10(classedOutcome(observation))), tag("RunGenericFailureObservation", (observation) => succeed$10(genericFailureOutcome(observation))), tag("RunRefusedObservation", (observation) => succeed$10(refusedOutcome(observation))), exhaustive);
83311
83399
  const classifyRunOutcome = Workflow_exports.make({
83312
83400
  command: RunOutcomeCommand,
83313
83401
  decision: Union([
@@ -83319,7 +83407,7 @@ const classifyRunOutcome = Workflow_exports.make({
83319
83407
  RunFailed
83320
83408
  ]),
83321
83409
  error: RunInterrupted,
83322
- decide: decide$29
83410
+ decide: decide$30
83323
83411
  });
83324
83412
  //#endregion
83325
83413
  //#region src/plan-run-conclusion.workflow.ts
@@ -83367,7 +83455,11 @@ var RunConclusionEmittedFailed = class extends TaggedClass()("RunConclusionEmitt
83367
83455
  var RunConclusionQuietOk = class extends TaggedClass()("RunConclusionQuietOk", {}) {
83368
83456
  [PlanRunConclusionTypeId] = PlanRunConclusionTypeId;
83369
83457
  };
83370
- var RunConclusionQuietFailed = class extends TaggedClass()("RunConclusionQuietFailed", { exitCode: Plugin_exports.ExitCode }) {
83458
+ var RunConclusionQuietFailed = class extends TaggedClass()("RunConclusionQuietFailed", {
83459
+ exitCode: Plugin_exports.ExitCode,
83460
+ exitClass: Union([Plugin_exports.ExitClass, RunOutcomeTag]),
83461
+ error: String$7
83462
+ }) {
83371
83463
  [PlanRunConclusionTypeId] = PlanRunConclusionTypeId;
83372
83464
  };
83373
83465
  const PlanRunConclusionDecision = Union([
@@ -83383,11 +83475,18 @@ const emittedOf = (command) => match$1(command.exitCode === 0, {
83383
83475
  exitCode: command.exitCode
83384
83476
  })
83385
83477
  });
83478
+ const BASELINE_CLASSES = filterMap$3(Plugin_exports.ExitClass.literals, (exitClass) => fromOption$2(map$13(decodeOption(Plugin_exports.ExitCodeFromClass)(exitClass), (code) => [code, exitClass]), () => exitClass));
83479
+ const baselineClassOf = (exitCode) => map$13(findFirst(BASELINE_CLASSES, ([code]) => code === exitCode), ([, exitClass]) => exitClass);
83480
+ const exitClassNameOf = (command) => getOrElse$1(baselineClassOf(command.exitCode), () => command.outcome);
83386
83481
  const quietOf = (command) => match$1(command.exitCode === 0, {
83387
83482
  onTrue: () => RunConclusionQuietOk.make({}),
83388
- onFalse: () => RunConclusionQuietFailed.make({ exitCode: command.exitCode })
83483
+ onFalse: () => RunConclusionQuietFailed.make({
83484
+ exitCode: command.exitCode,
83485
+ exitClass: exitClassNameOf(command),
83486
+ error: command.error
83487
+ })
83389
83488
  });
83390
- const decide$28 = (command) => succeed$10(match$1(command.machine, {
83489
+ const decide$29 = (command) => succeed$10(match$1(command.machine, {
83391
83490
  onTrue: () => emittedOf(command),
83392
83491
  onFalse: () => quietOf(command)
83393
83492
  }));
@@ -83395,7 +83494,7 @@ const planRunConclusion = Workflow_exports.make({
83395
83494
  command: PlanRunConclusionCommand,
83396
83495
  decision: PlanRunConclusionDecision,
83397
83496
  error: Never,
83398
- decide: decide$28
83497
+ decide: decide$29
83399
83498
  });
83400
83499
  //#endregion
83401
83500
  //#region src/reporting/run-failure.schema.ts
@@ -83422,7 +83521,7 @@ const exitCodeOf = (outcome) => value(outcome).pipe(tag("RunOk", () => 0), tag("
83422
83521
  const nonEmptyText$1 = liftPredicate(is$2(NonEmptyString));
83423
83522
  const capturedOrUnknown = (captured) => getOrElse$1(nonEmptyText$1(captured), () => UNKNOWN_FAILURE$1);
83424
83523
  const capturedThenRecorded = (captured, recorded) => getOrElse$1(nonEmptyText$1(captured), () => getOrElse$1(fromNullishOr(recorded), () => UNKNOWN_FAILURE$1));
83425
- const failureTextOf = (error, captured) => value(error).pipe(tag("RunParseFailed", (failed) => getOrElse$1(map$13(fromNullishOr(failed.unrecognized), (value) => `Received unknown argument: '${value}'`), () => capturedOrUnknown(captured))), tag("RunSurvivorsRejected", (failed) => getOrElse$1(fromNullishOr(failed.diagnostic), () => UNKNOWN_FAILURE$1)), tag("RunInterrupted", () => capturedOrUnknown(captured)), tag("RunConfigFailed", (failed) => capturedThenRecorded(captured, failed.detail)), tag("RunRefused", (failed) => failed.message), tag("RunFailed", (failed) => capturedThenRecorded(captured, failed.diagnostic)), exhaustive);
83524
+ const failureTextOf$1 = (error, captured) => value(error).pipe(tag("RunParseFailed", (failed) => getOrElse$1(map$13(fromNullishOr(failed.unrecognized), (value) => `Received unknown argument: '${value}'`), () => capturedOrUnknown(captured))), tag("RunSurvivorsRejected", (failed) => getOrElse$1(fromNullishOr(failed.diagnostic), () => UNKNOWN_FAILURE$1)), tag("RunInterrupted", () => capturedOrUnknown(captured)), tag("RunConfigFailed", (failed) => capturedThenRecorded(captured, failed.detail)), tag("RunRefused", (failed) => failed.message), tag("RunFailed", (failed) => capturedThenRecorded(captured, failed.diagnostic)), exhaustive);
83426
83525
  const remediationTextOf$1 = (error) => value(error).pipe(tag("RunInterrupted", () => SIGNAL_REMEDIATION), tag("RunParseFailed", () => PARSE_REMEDIATION), tag("RunSurvivorsRejected", (failed) => getOrElse$1(fromNullishOr(failed.diagnostic), () => DEFAULT_REMEDIATION)), tag("RunConfigFailed", (failed) => match$8(fromNullishOr(failed.detail), {
83427
83526
  onSome: (detail) => `check the config file: ${detail}`,
83428
83527
  onNone: () => "check the config file"
@@ -83430,7 +83529,7 @@ const remediationTextOf$1 = (error) => value(error).pipe(tag("RunInterrupted", (
83430
83529
  const errorEnvelopeFromOutcome = (input) => ErrorEnvelope.make({
83431
83530
  schemaVersion: RunEvent_exports.StreamSchemaVersion.literal,
83432
83531
  code: exitCodeOf(input.error),
83433
- error: failureTextOf(input.error, input.captured),
83532
+ error: failureTextOf$1(input.error, input.captured),
83434
83533
  remediation: remediationTextOf$1(input.error)
83435
83534
  });
83436
83535
  const runExitCodeFromOutcome = (outcome) => RunExitCode.make({ code: exitCodeOf(outcome) });
@@ -83469,6 +83568,7 @@ const readConclusion = fn(SpanTaxonomy_exports.Spans.runConclusionRead.name)(fun
83469
83568
  conclusion: input
83470
83569
  };
83471
83570
  });
83571
+ const writeStderrLine = (line) => flatMap$4(Stdio, (stdio) => run$4(succeed$3(`${line}\n`), stdio.stderr({ endOnDone: false })).pipe(ignore$1));
83472
83572
  const concludeRunCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runConclude.name)(readConclusion).decide(planRunConclusion).write({
83473
83573
  RunConclusionEmittedOk: (_decision, raw) => andThen$1(raw.conclusion.runEvents.emitMachineModeOutput({
83474
83574
  stream: raw.conclusion.stream,
@@ -83485,7 +83585,7 @@ const concludeRunCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runCon
83485
83585
  pathService: raw.conclusion.pathService
83486
83586
  }), andThen$1(raw.conclusion.stream.closeAndDrain, fail$4(RunExit.make({ code: decision.exitCode })))),
83487
83587
  RunConclusionQuietOk: (_decision, raw) => andThen$1(raw.conclusion.stream.closeAndDrain, void_$1),
83488
- RunConclusionQuietFailed: (decision, raw) => andThen$1(raw.conclusion.stream.closeAndDrain, fail$4(RunExit.make({ code: decision.exitCode }))),
83588
+ RunConclusionQuietFailed: (decision, raw) => andThen$1(raw.conclusion.stream.closeAndDrain, andThen$1(writeStderrLine(`exit ${decision.exitCode} (${decision.exitClass}): ${decision.error}`), fail$4(RunExit.make({ code: decision.exitCode })))),
83489
83589
  CommandRejected: ({ issue }) => fail$4(StrykerError.make({ message: `the run conclusion command was rejected: ${issue}` }))
83490
83590
  });
83491
83591
  //#endregion
@@ -83505,11 +83605,11 @@ var LocalMutationRefused = class extends TaggedError()("LocalMutationRefused", {
83505
83605
  rule: RunEvent_exports.RefusalRule,
83506
83606
  message: String$7
83507
83607
  }) {};
83508
- const decide$27 = (command) => value({
83608
+ const decide$28 = (command) => value({
83509
83609
  dryRunOnly: command.dryRunOnly,
83510
83610
  githubActions: command.githubActions,
83511
83611
  allowLocalMutation: command.allowLocalMutation
83512
- }).pipe(when({ dryRunOnly: true }, () => succeed$10(LocalMutationAllowed.make({}))), when({ githubActions: "true" }, () => succeed$10(LocalMutationAllowed.make({}))), when({ allowLocalMutation: "1" }, () => succeed$10(LocalMutationAllowed.make({}))), orElse$1(() => fail$8(LocalMutationRefused.make({
83612
+ }).pipe(when({ dryRunOnly: true }, () => succeed$10(LocalMutationAllowed.make({}))), when({ githubActions: "true" }, () => succeed$10(LocalMutationAllowed.make({}))), when({ allowLocalMutation: "1" }, () => succeed$10(LocalMutationAllowed.make({}))), orElse$1(() => fail$9(LocalMutationRefused.make({
83513
83613
  rule: "mutation-runs-on-main-ci",
83514
83614
  message: "mutation runs only on main CI"
83515
83615
  }))));
@@ -83517,7 +83617,7 @@ const refuseLocalMutation = Workflow_exports.make({
83517
83617
  command: RefuseLocalMutationCommand,
83518
83618
  decision: LocalMutationAllowed,
83519
83619
  error: LocalMutationRefused,
83520
- decide: decide$27
83620
+ decide: decide$28
83521
83621
  });
83522
83622
  //#endregion
83523
83623
  //#region src/admit-survivors-run.workflow.ts
@@ -83627,7 +83727,7 @@ const ADMISSION_RULES = [
83627
83727
  }
83628
83728
  ];
83629
83729
  const admissionOutcomeOf = (input) => getOrElse$1(map$13(findFirst(ADMISSION_RULES, (rule) => rule.holds(input)), (rule) => rule.outcome), () => SurvivorsMatchOutcome.make({ survivors: input.priorSurvivors }));
83630
- const reject = (reason, detail) => fail$8(SurvivorsRejection.make({
83730
+ const reject = (reason, detail) => fail$9(SurvivorsRejection.make({
83631
83731
  reason,
83632
83732
  remediation: `${detail} ${SURVIVORS_RUN_FIRST_REMEDIATION}`
83633
83733
  }));
@@ -83645,6 +83745,13 @@ const admitSurvivorsRun = Workflow_exports.make({
83645
83745
  });
83646
83746
  //#endregion
83647
83747
  //#region src/ConfigError.schema.ts
83748
+ const CAUSE_DEPTH = 4;
83749
+ const ownMessageOf = (value) => filter$7(map$13(liftPredicate(value, hasProperty("message")), (carrier) => String(carrier.message)), is$2(NonEmptyString));
83750
+ const causeMessagesOf = (value, depth) => depth === 0 ? [] : [...toArray(ownMessageOf(value)), ...match$8(liftPredicate(value, hasProperty("cause")), {
83751
+ onNone: () => [],
83752
+ onSome: (carrier) => causeMessagesOf(carrier.cause, depth - 1)
83753
+ })];
83754
+ const causeTextOf$1 = (cause) => liftPredicate(causeMessagesOf(cause, CAUSE_DEPTH).join(": "), is$2(NonEmptyString));
83648
83755
  var ConfigFileNotFoundError = class extends TaggedError()("ConfigFileNotFoundError", { file: String$7 }) {
83649
83756
  exitClass = "ConfigError";
83650
83757
  get message() {
@@ -83666,7 +83773,10 @@ var ConfigFileUnreadableError = class extends TaggedError()("ConfigFileUnreadabl
83666
83773
  }) {
83667
83774
  exitClass = "ConfigError";
83668
83775
  get message() {
83669
- return `Config file is unreadable: ${this.file}`;
83776
+ return match$8(causeTextOf$1(this.cause), {
83777
+ onNone: () => `Config file is unreadable: ${this.file}`,
83778
+ onSome: (cause) => `Config file is unreadable: ${this.file}: ${cause}`
83779
+ });
83670
83780
  }
83671
83781
  };
83672
83782
  var ConfigFileInvalidError = class extends TaggedError()("ConfigFileInvalidError", {
@@ -84457,7 +84567,7 @@ const resolveConfig = Workflow_exports.make({
84457
84567
  error: ConfigOptionsRefused,
84458
84568
  decide: (command) => match$6(decodeOptions$1(command.document), {
84459
84569
  onSuccess: (options) => succeed$10(decidedFromOf(command.fileFound, options)),
84460
- onFailure: (failure) => fail$8(ConfigOptionsRefused.make({ message: failure.message }))
84570
+ onFailure: (failure) => fail$9(ConfigOptionsRefused.make({ message: failure.message }))
84461
84571
  })
84462
84572
  });
84463
84573
  //#endregion
@@ -84574,7 +84684,7 @@ const fileNameOrder = mapInput$2(String$10, (reproducer) => reproducer.fileName)
84574
84684
  const idOrder$3 = mapInput$2(String$10, (reproducer) => reproducer.id);
84575
84685
  const reproducersOf = (report) => sort(flatMap$7(Object.entries(report.files), ([fileName, file]) => map$10(file.mutants, (mutant) => reproducerOf(fileName, file.source, mutant))), combine$2(fileNameOrder, idOrder$3));
84576
84686
  const mutantsOf$1 = (report) => flatMap$7(Object.values(report.files), (file) => file.mutants);
84577
- const decide$26 = (command) => {
84687
+ const decide$27 = (command) => {
84578
84688
  const mutants = mutantsOf$1(command.report);
84579
84689
  return match$1(mutants.length === 0, {
84580
84690
  onTrue: () => NoMutantsToReproduce.make({}),
@@ -84585,7 +84695,7 @@ const buildReproducers = Workflow_exports.make({
84585
84695
  command: BuildReproducersCommand,
84586
84696
  decision: BuildReproducersDecision,
84587
84697
  error: Never,
84588
- decide: (command) => succeed$10(decide$26(command))
84698
+ decide: (command) => succeed$10(decide$27(command))
84589
84699
  });
84590
84700
  //#endregion
84591
84701
  //#region src/checkpoint-mutants.workflow.ts
@@ -84609,7 +84719,7 @@ var CheckpointMutantsCommand = class extends TaggedClass()("CheckpointMutantsCom
84609
84719
  };
84610
84720
  const settledByIdOf = (settled) => fromIterable$4(settled.map((row) => [row.mutant.id, row]));
84611
84721
  const rowOf = (mutant, settledById) => getOrElse$1(get$4(settledById, mutant.id), () => CheckpointPendingMutant.make({ mutant }));
84612
- const decide$25 = (command) => {
84722
+ const decide$26 = (command) => {
84613
84723
  const settledById = settledByIdOf(command.settled);
84614
84724
  return succeed$10(command.plannedMutants.map((mutant) => rowOf(mutant, settledById)));
84615
84725
  };
@@ -84617,7 +84727,7 @@ const checkpointMutants = Workflow_exports.make({
84617
84727
  command: CheckpointMutantsCommand,
84618
84728
  decision: ArraySchema(CheckpointMutantRow),
84619
84729
  error: Never,
84620
- decide: decide$25
84730
+ decide: decide$26
84621
84731
  });
84622
84732
  //#endregion
84623
84733
  //#region src/classify-exit.workflow.ts
@@ -84666,7 +84776,7 @@ const verdictExitClass = (score, breakingThreshold) => valueTags(score, {
84666
84776
  onSome: (threshold) => value(percentage < threshold).pipe(when(true, () => "VerdictFail"), when(false, () => null), exhaustive)
84667
84777
  })
84668
84778
  });
84669
- const decide$24 = (command) => match$8(fromNullishOr(verdictExitClass(command.score, command.breakingThreshold)), {
84779
+ const decide$25 = (command) => match$8(fromNullishOr(verdictExitClass(command.score, command.breakingThreshold)), {
84670
84780
  onNone: () => match$8(precedenceOf(command.pending), {
84671
84781
  onNone: () => succeed$10(ExitPassed.make({})),
84672
84782
  onSome: (exitClass) => succeed$10(decisionOf$2(exitClass))
@@ -84677,7 +84787,7 @@ const classifyExit = Workflow_exports.make({
84677
84787
  command: ClassifyExitCommand,
84678
84788
  decision: ClassifyExitDecision,
84679
84789
  error: Never,
84680
- decide: decide$24
84790
+ decide: decide$25
84681
84791
  });
84682
84792
  //#endregion
84683
84793
  //#region src/IncrementalDiff.schema.ts
@@ -87916,7 +88026,7 @@ const make$17 = /*#__PURE__*/ fnUntraced(function* (group, options) {
87916
88026
  defect: decodeDefect(message.defect)
87917
88027
  });
87918
88028
  case "ClientProtocolError": {
87919
- const exit = fail$6(message.error);
88029
+ const exit = fail$7(message.error);
87920
88030
  return forEach$1(entries.keys(), (requestId) => write({
87921
88031
  _tag: "Exit",
87922
88032
  clientId: 0,
@@ -88872,7 +88982,7 @@ const mapRunResult = (mutant, result) => value(result).pipe(discriminator("statu
88872
88982
  const uniqueNames = (names) => dedupe(filter$4(names, (name) => name !== void 0));
88873
88983
  const partitionByFile = (files, fileNames) => {
88874
88984
  const [present, missing] = separate(map$10(fileNames, (fileName) => match$8(get$9(files, fileName), {
88875
- onNone: () => fail$8(fileName),
88985
+ onNone: () => fail$9(fileName),
88876
88986
  onSome: (file) => succeed$10(file)
88877
88987
  })));
88878
88988
  return {
@@ -89175,7 +89285,7 @@ const writeIncrementalReport = fn(SpanTaxonomy_exports.Spans.mutationReportingWr
89175
89285
  const runInputsDigest = yield* runInputsDigestOf(deps.fs, deps.path, input.basePath, input.options);
89176
89286
  const json = yield* encodeEffect(fromJsonString(Unknown, { space: 2 }))({
89177
89287
  incrementalVersion: "3",
89178
- verdictSemanticsVersion: 3,
89288
+ verdictSemanticsVersion: 4,
89179
89289
  mutantSetPolicy: input.options.mutator.mutantSetPolicy,
89180
89290
  runInputsDigest,
89181
89291
  ...report,
@@ -89225,7 +89335,7 @@ const slimIncrementalReport = fn(SpanTaxonomy_exports.Spans.mutationReportingSli
89225
89335
  const runInputsDigest = yield* runInputsDigestOf(deps.fs, deps.path, input.basePath, input.options);
89226
89336
  return {
89227
89337
  incrementalVersion: "3",
89228
- verdictSemanticsVersion: 3,
89338
+ verdictSemanticsVersion: 4,
89229
89339
  mutantSetPolicy: input.options.mutator.mutantSetPolicy,
89230
89340
  runInputsDigest,
89231
89341
  schemaVersion: Report_exports.WrittenSchemaVersion.literal,
@@ -89793,7 +89903,7 @@ const terminalReportOf = make$69((event) => value(event).pipe(tag("mutationTestR
89793
89903
  report: ready.report,
89794
89904
  metrics: ready.metrics,
89795
89905
  static: ready.static
89796
- })), orElse$1(() => fail$8("not-terminal"))));
89906
+ })), orElse$1(() => fail$9("not-terminal"))));
89797
89907
  const renderOptionsOf = (options) => ({
89798
89908
  allowColor: options.clearTextReporter.allowColor,
89799
89909
  allowEmojis: options.clearTextReporter.allowEmojis,
@@ -89885,7 +89995,7 @@ const renderJsonReport = Workflow_exports.make({
89885
89995
  });
89886
89996
  //#endregion
89887
89997
  //#region src/json-report.cell.ts
89888
- const reportOf$1 = make$69((event) => value(event).pipe(tag("mutationTestReportReady", (ready) => succeed$10(ready.report)), orElse$1(() => fail$8("not-ready"))));
89998
+ const reportOf$1 = make$69((event) => value(event).pipe(tag("mutationTestReportReady", (ready) => succeed$10(ready.report)), orElse$1(() => fail$9("not-ready"))));
89889
89999
  const readJsonReport = (input) => map$7(fromAsyncIterable(input.events, failAsJsonReporter).pipe(filterMap$2(reportOf$1), run$4(last())), (last) => ({
89890
90000
  _tag: "JsonReportCommand",
89891
90001
  reported: getOrUndefined$1(last),
@@ -90318,7 +90428,7 @@ const logOf = (command, results) => {
90318
90428
  }]
90319
90429
  };
90320
90430
  };
90321
- const decide$23 = (command) => {
90431
+ const decide$24 = (command) => {
90322
90432
  const surfaced = surfacedOf(command);
90323
90433
  const results = take$2(surfaced, command.maxResults);
90324
90434
  const log = logOf(command, results);
@@ -90334,7 +90444,7 @@ const sarifReport = Workflow_exports.make({
90334
90444
  command: SarifReportCommand,
90335
90445
  decision: SarifReportDecision,
90336
90446
  error: Never,
90337
- decide: (command) => succeed$10(decide$23(command))
90447
+ decide: (command) => succeed$10(decide$24(command))
90338
90448
  });
90339
90449
  //#endregion
90340
90450
  //#region src/cap-survivors.workflow.ts
@@ -90456,7 +90566,7 @@ const linesOf = (command) => {
90456
90566
  onFalse: () => flatMap$7(toArray(get$4(byId, ref.id)), (entry) => [lineOf(entry)])
90457
90567
  }));
90458
90568
  };
90459
- const decide$22 = (command) => {
90569
+ const decide$23 = (command) => {
90460
90570
  const lines = linesOf(command);
90461
90571
  return match$1(length(lines) === 0, {
90462
90572
  onTrue: () => NothingToAnnotate.make({ survivorCount: length(command.survivors) }),
@@ -90467,7 +90577,7 @@ const renderAnnotations = Workflow_exports.make({
90467
90577
  command: RenderAnnotationsCommand,
90468
90578
  decision: RenderAnnotationsDecision,
90469
90579
  error: Never,
90470
- decide: (command) => succeed$10(decide$22(command))
90580
+ decide: (command) => succeed$10(decide$23(command))
90471
90581
  });
90472
90582
  //#endregion
90473
90583
  //#region src/surfacing.ts
@@ -90544,7 +90654,7 @@ const failAsSarif = (cause) => Reporter_exports.ReporterFailed.make({
90544
90654
  event: "mutationTestReportReady",
90545
90655
  cause: getOrElse$1(map$13(ErrorText_exports.errorTextOf(cause), (rendered) => rendered.text), () => "")
90546
90656
  });
90547
- const reportOf = make$69((event) => value(event).pipe(tag("mutationTestReportReady", (ready) => succeed$10(ready.report)), orElse$1(() => fail$8("not-ready"))));
90657
+ const reportOf = make$69((event) => value(event).pipe(tag("mutationTestReportReady", (ready) => succeed$10(ready.report)), orElse$1(() => fail$9("not-ready"))));
90548
90658
  const readSarifReport = (events) => map$7(fromAsyncIterable(events, failAsSarif).pipe(filterMap$2(reportOf), run$4(last())), (last) => getOrUndefined$1(last));
90549
90659
  const writeSarifReport = (options, report) => gen(function* () {
90550
90660
  const fs = yield* FileSystem;
@@ -90797,7 +90907,7 @@ const survivorsRawOf = (input) => {
90797
90907
  priorReportPath
90798
90908
  }),
90799
90909
  onTrue: () => fromResult(match$6(decodeUnknownResult(PriorReportDocument)(read.raw), {
90800
- onFailure: (error) => fail$8(error),
90910
+ onFailure: (error) => fail$9(error),
90801
90911
  onSuccess: (document) => succeed$10({
90802
90912
  currentConfig: resolvedOptions,
90803
90913
  frameworkVersion: StrykerPackage.version,
@@ -91451,11 +91561,11 @@ const readableToPullUnsafe = (options) => {
91451
91561
  latch.openUnsafe();
91452
91562
  }
91453
91563
  function onError(error) {
91454
- exit.current = fail$6(options.onError(error));
91564
+ exit.current = fail$7(options.onError(error));
91455
91565
  latch.openUnsafe();
91456
91566
  }
91457
91567
  function onEnd() {
91458
- exit.current = fail$6(Done());
91568
+ exit.current = fail$7(Done());
91459
91569
  latch.openUnsafe();
91460
91570
  }
91461
91571
  readable.on("readable", onReadable);
@@ -95894,7 +96004,7 @@ const makeNetServer = /*#__PURE__*/ fnUntraced(function* (options) {
95894
96004
  if (!isDeno) conn.pause();
95895
96005
  onConnection(conn);
95896
96006
  });
95897
- server.on("error", (err) => doneUnsafe(errorDeferred, fail$6(err)));
96007
+ server.on("error", (err) => doneUnsafe(errorDeferred, fail$7(err)));
95898
96008
  yield* callback$1((resume) => {
95899
96009
  server.listen(options.listenOptions, () => resume(void_$1));
95900
96010
  }).pipe(raceFirst(mapError$3(_await(errorDeferred), (err) => new SocketServerError({ reason: new SocketServerOpenError({ cause: err }) }))));
@@ -96092,7 +96202,7 @@ var WorkerCrashed = class extends TaggedClass()("WorkerCrashed", {
96092
96202
  };
96093
96203
  const ClassifyWorkerExitDecision = Union([WorkerOutOfMemory, WorkerCrashed]);
96094
96204
  const OutOfMemoryExitCode = Literals$3([134, 137]);
96095
- const decide$21 = (command) => match$1(is$2(OutOfMemoryExitCode)(command.exitCode), {
96205
+ const decide$22 = (command) => match$1(is$2(OutOfMemoryExitCode)(command.exitCode), {
96096
96206
  onTrue: () => succeed$10(WorkerOutOfMemory.make({
96097
96207
  pid: command.pid,
96098
96208
  exitCode: command.exitCode
@@ -96106,7 +96216,7 @@ const classifyWorkerExit = Workflow_exports.make({
96106
96216
  command: ClassifyWorkerExitCommand,
96107
96217
  decision: ClassifyWorkerExitDecision,
96108
96218
  error: Never,
96109
- decide: decide$21
96219
+ decide: decide$22
96110
96220
  });
96111
96221
  //#endregion
96112
96222
  //#region src/git-diff.schema.ts
@@ -96453,7 +96563,7 @@ const modeFromEnvironment = (command) => match$8(configured$1(command.envMode),
96453
96563
  const decideMode = (command) => value(command).pipe(when({
96454
96564
  text: true,
96455
96565
  json: true
96456
- }, () => fail$8(ModeConflictError.make({
96566
+ }, () => fail$9(ModeConflictError.make({
96457
96567
  option: "json",
96458
96568
  value: "text",
96459
96569
  expected: CONFLICT_EXPECTED
@@ -96784,8 +96894,8 @@ const stateAfter = (decision, fallback) => match$6(decision, {
96784
96894
  onSuccess: (d) => d.state
96785
96895
  });
96786
96896
  const framedEventOf = (decision) => match$8(decision, {
96787
- onNone: () => fail$8(void 0),
96788
- onSome: (d) => value(d).pipe(tag("EventFramed", (framed) => succeed$10(framed.event)), tag("EventSuppressed", () => fail$8(void 0)), exhaustive)
96897
+ onNone: () => fail$9(void 0),
96898
+ onSome: (d) => value(d).pipe(tag("EventFramed", (framed) => succeed$10(framed.event)), tag("EventSuppressed", () => fail$9(void 0)), exhaustive)
96789
96899
  });
96790
96900
  const DEFAULT_PROGRESS_STREAM_FILE = "reports/mutation-stream.jsonl";
96791
96901
  var RunEventDrain = class RunEventDrain extends Service$1()("@systemfsoftware/stryker-js/run-event-stream.service/RunEventDrain") {
@@ -97085,7 +97195,7 @@ const allowedSecondsOf = (baselineSeconds, tolerance) => baselineSeconds * (1 +
97085
97195
  const withinOrExceeded = (command, baseline) => {
97086
97196
  const allowedSeconds = allowedSecondsOf(baseline.actualSeconds, command.tolerance);
97087
97197
  return match$1(command.actualSeconds > allowedSeconds, {
97088
- onTrue: () => fail$8(BudgetExceeded.make({
97198
+ onTrue: () => fail$9(BudgetExceeded.make({
97089
97199
  baselineSeconds: baseline.actualSeconds,
97090
97200
  allowedSeconds,
97091
97201
  actualSeconds: command.actualSeconds,
@@ -97099,10 +97209,10 @@ const updated = (command) => BudgetWithin.make({ baseline: BudgetBaseline.make({
97099
97209
  actualSeconds: command.actualSeconds
97100
97210
  }) });
97101
97211
  const baselineUnusable$1 = (baselineFile) => BudgetInputUnusable.make({ reason: `no usable budget baseline at ${baselineFile} (missing or undecodable); write one with \`stryker gate --update-budget-baseline\`` });
97102
- const decide$20 = (command) => match$1(command.updateBaseline, {
97212
+ const decide$21 = (command) => match$1(command.updateBaseline, {
97103
97213
  onTrue: () => succeed$10(updated(command)),
97104
97214
  onFalse: () => match$8(fromNullishOr(command.baseline), {
97105
- onNone: () => fail$8(baselineUnusable$1(command.baselineFile)),
97215
+ onNone: () => fail$9(baselineUnusable$1(command.baselineFile)),
97106
97216
  onSome: (baseline) => withinOrExceeded(command, baseline)
97107
97217
  })
97108
97218
  });
@@ -97110,7 +97220,7 @@ const budgetGate = Workflow_exports.make({
97110
97220
  command: BudgetGateCommand,
97111
97221
  decision: BudgetGateDecision,
97112
97222
  error: Union([BudgetExceeded, BudgetInputUnusable]),
97113
- decide: decide$20
97223
+ decide: decide$21
97114
97224
  });
97115
97225
  //#endregion
97116
97226
  //#region src/cli-route-fields.ts
@@ -97244,18 +97354,18 @@ const mismatchesOf = (command) => {
97244
97354
  const noise = fromIterable$2(command.noise);
97245
97355
  return [...fromIterable$2([...idsOf(command.baseline), ...idsOf(command.fresh)])].filter((id) => !has$1(noise, id)).sort().flatMap((id) => toArray(mismatchAt(id, baseline, fresh)));
97246
97356
  };
97247
- const decide$19 = (command) => {
97357
+ const decide$20 = (command) => {
97248
97358
  const mismatches = mismatchesOf(command);
97249
97359
  return match$8(fromUndefinedOr(mismatches[0]), {
97250
97360
  onNone: () => succeed$10(VerdictsMatch.make({})),
97251
- onSome: () => fail$8(VerdictsDiffer.make({ mismatches }))
97361
+ onSome: () => fail$9(VerdictsDiffer.make({ mismatches }))
97252
97362
  });
97253
97363
  };
97254
97364
  const compareVerdicts = Workflow_exports.make({
97255
97365
  command: CompareVerdictsCommand,
97256
97366
  decision: VerdictsMatch,
97257
97367
  error: VerdictsDiffer,
97258
- decide: decide$19
97368
+ decide: decide$20
97259
97369
  });
97260
97370
  //#endregion
97261
97371
  //#region src/Feedback/Feedback.schema.ts
@@ -97431,17 +97541,17 @@ const clearedOrRejected = (command, committed) => {
97431
97541
  baseline: null,
97432
97542
  unchecked
97433
97543
  })),
97434
- onSome: () => fail$8(GateRejected.make({
97544
+ onSome: () => fail$9(GateRejected.make({
97435
97545
  newSurvivors,
97436
97546
  unchecked
97437
97547
  }))
97438
97548
  });
97439
97549
  };
97440
97550
  const verdictOf = (command) => match$8(fromNullishOr(command.committed), {
97441
- onNone: () => fail$8(baselineUnusable(command.baselineFile)),
97551
+ onNone: () => fail$9(baselineUnusable(command.baselineFile)),
97442
97552
  onSome: (committed) => clearedOrRejected(command, committed)
97443
97553
  });
97444
- const decide$18 = (command) => match$1(command.updateBaseline, {
97554
+ const decide$19 = (command) => match$1(command.updateBaseline, {
97445
97555
  onTrue: () => succeed$10(clearedForUpdate(command)),
97446
97556
  onFalse: () => verdictOf(command)
97447
97557
  });
@@ -97449,7 +97559,7 @@ const gateNewSurvivors = Workflow_exports.make({
97449
97559
  command: GateNewSurvivorsCommand,
97450
97560
  decision: GateNewSurvivorsDecision,
97451
97561
  error: Union([GateRejected, GateInputUnusable]),
97452
- decide: decide$18
97562
+ decide: decide$19
97453
97563
  });
97454
97564
  //#endregion
97455
97565
  //#region ../../node_modules/.pnpm/effect@4.0.0/node_modules/effect/dist/ai/AiError.js
@@ -104588,12 +104698,12 @@ const splitOf = (details, checkerCount) => match$1(checkerCount > 0, {
104588
104698
  announcement: details.announcement
104589
104699
  })
104590
104700
  });
104591
- const decide$17 = (command) => succeed$10(splitOf(detailsOf(command.concurrency, command.availableParallelism), command.checkerCount));
104701
+ const decide$18 = (command) => succeed$10(splitOf(detailsOf(command.concurrency, command.availableParallelism), command.checkerCount));
104592
104702
  const resolveConcurrency = Workflow_exports.make({
104593
104703
  command: ResolveConcurrency,
104594
104704
  decision: ConcurrencySplit,
104595
104705
  error: Never,
104596
- decide: decide$17
104706
+ decide: decide$18
104597
104707
  });
104598
104708
  //#endregion
104599
104709
  //#region src/concurrency.cell.ts
@@ -104808,7 +104918,7 @@ const discardOf = (reason, actual, expected) => IncrementalReportDiscard.make({
104808
104918
  actual,
104809
104919
  expected
104810
104920
  });
104811
- const decide$16 = (command) => match$8(fromUndefinedOr(command.report), {
104921
+ const decide$17 = (command) => match$8(fromUndefinedOr(command.report), {
104812
104922
  onNone: () => discardOf("noPriorRecord", void 0, command.expectedIncrementalVersion),
104813
104923
  onSome: (report) => match$8(firstSomeOf(identityMismatchesOf(command, report).map(mismatchOptionOf)), {
104814
104924
  onNone: () => IncrementalReportKeep.make({ report }),
@@ -104819,7 +104929,7 @@ const admitIncrementalReport = Workflow_exports.make({
104819
104929
  command: AdmitIncrementalReportCommand,
104820
104930
  decision: Union([IncrementalReportKeep, IncrementalReportDiscard]),
104821
104931
  error: Never,
104822
- decide: (command) => succeed$10(decide$16(command))
104932
+ decide: (command) => succeed$10(decide$17(command))
104823
104933
  });
104824
104934
  //#endregion
104825
104935
  //#region src/git-diff.workflow.ts
@@ -105412,7 +105522,7 @@ const readProject = fn(SpanTaxonomy_exports.Spans.projectReadFromDisk.name)(func
105412
105522
  _tag: "AdmitIncrementalReportCommand",
105413
105523
  report: reportRead.report,
105414
105524
  expectedIncrementalVersion: "3",
105415
- verdictSemanticsVersion: 3,
105525
+ verdictSemanticsVersion: 4,
105416
105526
  mutantSetPolicy: options.mutator.mutantSetPolicy,
105417
105527
  runInputsDigest,
105418
105528
  options,
@@ -105740,7 +105850,7 @@ const decideComplete = (command) => value({
105740
105850
  testCount: command.testCount,
105741
105851
  failedTestCount: command.failedTestCount,
105742
105852
  failedTests: command.failedTests
105743
- }).pipe(when({ outcome: "noTests" }, () => fail$8(DryRunError.make({
105853
+ }).pipe(when({ outcome: "noTests" }, () => fail$9(DryRunError.make({
105744
105854
  stage: "dryRunNoTests",
105745
105855
  reason: "No tests were executed. Stryker will exit prematurely. Please check your configuration."
105746
105856
  }))), when({ outcome: "failed" }, ({ testCount, failedTestCount, failedTests }) => succeed$10(DryRunFailed.make({
@@ -105749,10 +105859,10 @@ const decideComplete = (command) => value({
105749
105859
  failedTests
105750
105860
  }))), when({ outcome: "passed" }, ({ testCount }) => succeed$10(DryRunPassed.make({ testCount }))), exhaustive);
105751
105861
  const reasonOrDefault = (reason, fallback) => value(reason).pipe(when(void 0, () => fallback), orElse$1((present) => present));
105752
- const decide$15 = (command) => value(command.status).pipe(when("Error", () => fail$8(DryRunError.make({
105862
+ const decide$16 = (command) => value(command.status).pipe(when("Error", () => fail$9(DryRunError.make({
105753
105863
  stage: "dryRun",
105754
105864
  reason: reasonOrDefault(command.errorMessage, "Dry run error")
105755
- }))), when("Timeout", () => fail$8(DryRunError.make({
105865
+ }))), when("Timeout", () => fail$9(DryRunError.make({
105756
105866
  stage: "dryRun",
105757
105867
  reason: reasonOrDefault(command.reason, "Initial test run timed out")
105758
105868
  }))), when("Complete", () => decideComplete(command)), exhaustive);
@@ -105760,7 +105870,7 @@ const dryRun = Workflow_exports.make({
105760
105870
  command: DryRunCommand,
105761
105871
  decision: Union([DryRunPassed, DryRunFailed]),
105762
105872
  error: DryRunError,
105763
- decide: decide$15
105873
+ decide: decide$16
105764
105874
  });
105765
105875
  //#endregion
105766
105876
  //#region src/import-closure.schema.ts
@@ -105822,12 +105932,12 @@ const closureOf = (command, testFile) => {
105822
105932
  open: closureOpen(command, files, testFile)
105823
105933
  });
105824
105934
  };
105825
- const decide$14 = (command) => succeed$10(command.testFiles.map((testFile) => closureOf(command, testFile)));
105935
+ const decide$15 = (command) => succeed$10(command.testFiles.map((testFile) => closureOf(command, testFile)));
105826
105936
  const importClosure = Workflow_exports.make({
105827
105937
  command: ImportClosureCommand,
105828
105938
  decision: ArraySchema(TestFileClosure),
105829
105939
  error: Never,
105830
- decide: decide$14
105940
+ decide: decide$15
105831
105941
  });
105832
105942
  //#endregion
105833
105943
  //#region src/import-closure.cell.ts
@@ -106239,7 +106349,7 @@ const failedTestSummariesOf = (tests) => tests.filter((test) => test.status ===
106239
106349
  name: test.name,
106240
106350
  failureMessage: test.failureMessage
106241
106351
  }));
106242
- const decide$13 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => succeed$10(DryRunObservedComplete.make({
106352
+ const decide$14 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => succeed$10(DryRunObservedComplete.make({
106243
106353
  testCount: complete.tests.length,
106244
106354
  failedTestCount: complete.tests.filter((test) => test.status === "failed").length,
106245
106355
  failedTests: failedTestSummariesOf(complete.tests)
@@ -106255,7 +106365,7 @@ const interpretDryRunObservation = Workflow_exports.make({
106255
106365
  DryRunObservedTimedOut
106256
106366
  ]),
106257
106367
  error: Never,
106258
- decide: decide$13
106368
+ decide: decide$14
106259
106369
  });
106260
106370
  //#endregion
106261
106371
  //#region src/PluginsError.schema.ts
@@ -106293,7 +106403,7 @@ var PluginLoadRefusedError = class extends TaggedError()("PluginLoadRefusedError
106293
106403
  const TypeId$9 = Symbol.for("~systemfsoftware/stryker-js/Sandbox");
106294
106404
  const SandboxHandle = Handle_exports.make()(TypeId$9);
106295
106405
  SandboxHandle.is;
106296
- const sandboxFileNameOf = (fileMap, fileName) => value(fileMap.get(fileName)).pipe(when(isString$1, (sandboxFileName) => succeed$10(sandboxFileName)), orElse$1(() => fail$8(StrykerError.make({ message: `Cannot find sandbox file for ${fileName}` }))));
106406
+ const sandboxFileNameOf = (fileMap, fileName) => value(fileMap.get(fileName)).pipe(when(isString$1, (sandboxFileName) => succeed$10(sandboxFileName)), orElse$1(() => fail$9(StrykerError.make({ message: `Cannot find sandbox file for ${fileName}` }))));
106297
106407
  const withoutLeadingSeparator = (suffix) => match$1(suffix.startsWith("/"), {
106298
106408
  onTrue: () => suffix.slice(1),
106299
106409
  onFalse: () => suffix
@@ -106387,7 +106497,7 @@ const executedTestsOf$1 = (tests) => tests.filter((test) => test.status !== "ski
106387
106497
  timeSpentMs: test.timeSpentMs
106388
106498
  }));
106389
106499
  const firstFailedTestOf = (failed) => fromUndefinedOr(failed.at(0));
106390
- const decide$12 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => {
106500
+ const decide$13 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => {
106391
106501
  const failed = failedTestsOf(complete.tests);
106392
106502
  const nrOfTests = countedTestsOf(complete.tests);
106393
106503
  const executedTests = executedTestsOf$1(complete.tests);
@@ -106416,7 +106526,7 @@ const interpretDryRunResult = Workflow_exports.make({
106416
106526
  MutantRunTimedOut
106417
106527
  ]),
106418
106528
  error: Never,
106419
- decide: decide$12
106529
+ decide: decide$13
106420
106530
  });
106421
106531
  //#endregion
106422
106532
  //#region src/pooled-test-runner.handle.ts
@@ -106429,6 +106539,43 @@ const make$1 = (runner) => PooledTestRunner.make({
106429
106539
  dryRun: runner.dryRun,
106430
106540
  mutantRun: runner.mutantRun
106431
106541
  });
106542
+ const wallClockTimeoutResult = {
106543
+ status: "timeout",
106544
+ reason: TestRunner_exports.WallClockTimeoutReason.literal
106545
+ };
106546
+ const endedWithoutResult = () => TestRunner_exports.TestRunnerFailed.make({
106547
+ runnerName: "test runner",
106548
+ phase: "mutantRun",
106549
+ cause: "the mutant run ended without reporting a result"
106550
+ });
106551
+ const deadlineArmedMutantRun = dual(2, (events, timeoutMs) => scoped$3(gen(function* () {
106552
+ const started = yield* make$67();
106553
+ const settled = yield* make$67();
106554
+ const pump = events.pipe(runForEach((event) => value(event).pipe(tag("MutantRunStarted", () => succeed$7(started, void 0)), tag("MutantRunSettled", ({ result }) => succeed$7(settled, result)), exhaustive, asVoid)), onExit((exit) => match$3(exit, {
106555
+ onFailure: (cause) => failCause$4(settled, cause),
106556
+ onSuccess: () => fail$6(settled, endedWithoutResult())
106557
+ }).pipe(asVoid)));
106558
+ yield* forkScoped(pump);
106559
+ const deadline = raceFirst(_await(started).pipe(as(true)), _await(settled).pipe(as(false))).pipe(timeoutOption(WORKER_BOOT_TIMEOUT), flatMap$4(match$8({
106560
+ onNone: () => succeed$5(wallClockTimeoutResult),
106561
+ onSome: (began) => began ? sleep(millis(timeoutMs)).pipe(as(wallClockTimeoutResult)) : _await(settled)
106562
+ })));
106563
+ return yield* raceFirst(deadline, _await(settled));
106564
+ })));
106565
+ /**
106566
+ * The dry run keeps the configured absolute budget. A mutant run is bounded from
106567
+ * its own start by {@link deadlineArmedMutantRun}, so it is not wrapped here.
106568
+ */
106569
+ const withDryRunTimeout = (inner) => make$1({
106570
+ ...inner,
106571
+ dryRun: (options) => inner.dryRun(options).pipe(timeoutOrElse({
106572
+ duration: millis(options.timeout),
106573
+ orElse: () => succeed$5({
106574
+ status: "timeout",
106575
+ reason: TestRunner_exports.WallClockTimeoutReason.literal
106576
+ })
106577
+ }))
106578
+ });
106432
106579
  const withTimeout = (inner) => make$1({
106433
106580
  ...inner,
106434
106581
  dryRun: (options) => inner.dryRun(options).pipe(timeoutOrElse({
@@ -106651,7 +106798,7 @@ const scopedOf = fnUntraced(function* (params) {
106651
106798
  capabilities: client.capabilities().pipe(mapError$3(toRunnerFailure(runnerName, "capabilities"))),
106652
106799
  init: void_$1,
106653
106800
  dryRun: (options) => client.dryRun({ options }).pipe(mapError$3(toRunnerFailure(runnerName, "dryRun"))),
106654
- mutantRun: (options) => client.mutantRun({ options }).pipe(mapError$3(toRunnerFailure(runnerName, "mutantRun")))
106801
+ mutantRun: (options) => deadlineArmedMutantRun(client.mutantRun({ options }).pipe(mapError$1(toRunnerFailure(runnerName, "mutantRun"))), options.timeout)
106655
106802
  });
106656
106803
  });
106657
106804
  const TestRunners = Blueprint_exports.make()(TypeId$6).steps({
@@ -106663,7 +106810,7 @@ const commandRunnerEffect = (context) => ChildProcessSpawner.pipe(map$7((spawner
106663
106810
  const inProcessRunner = (context) => value(context.options.testRunner).pipe(when(isCommandRunner, () => some$1(commandRunnerEffect(context))), orElse$1(() => none()));
106664
106811
  const decorateChildRunner = fnUntraced(function* (context, childProcessRunner) {
106665
106812
  const base = yield* childProcessRunner;
106666
- const timed = withTimeout(base);
106813
+ const timed = withDryRunTimeout(base);
106667
106814
  const limited = yield* withMaxReuse(context.options, context.retire)(timed);
106668
106815
  const reloading = yield* withEnvironmentReload(context.retire)(limited);
106669
106816
  return withRetry(reloading);
@@ -106864,18 +107011,18 @@ const resolvedSpawnOf = (command, matches, label) => match$8(workerSourceOf(comm
106864
107011
  })),
106865
107012
  onNone: () => {
106866
107013
  const kindLabel = labelOfKind(command.kind);
106867
- return fail$8(WorkerSpawnMissing.make({
107014
+ return fail$9(WorkerSpawnMissing.make({
106868
107015
  reason: `the ${kindLabel} plugin "${label}" is not among the loaded plugins`,
106869
107016
  descriptor: `${command.kind}:${label}`
106870
107017
  }));
106871
107018
  }
106872
107019
  });
106873
- const decide$11 = (command) => value(command.configured).pipe(tag("ConfiguredPluginName", (configured) => resolvedSpawnOf(command, (worker) => worker.name.toLowerCase() === configured.name.toLowerCase(), configured.name)), tag("ConfiguredPluginModulePath", (configured) => resolvedSpawnOf(command, (worker) => worker.modulePath === configured.modulePath, configured.modulePath)), exhaustive);
107020
+ const decide$12 = (command) => value(command.configured).pipe(tag("ConfiguredPluginName", (configured) => resolvedSpawnOf(command, (worker) => worker.name.toLowerCase() === configured.name.toLowerCase(), configured.name)), tag("ConfiguredPluginModulePath", (configured) => resolvedSpawnOf(command, (worker) => worker.modulePath === configured.modulePath, configured.modulePath)), exhaustive);
106874
107021
  const resolveConfiguredPlugin = Workflow_exports.make({
106875
107022
  command: WorkerSpawnCommand,
106876
107023
  decision: WorkerSpawnResolved,
106877
107024
  error: WorkerSpawnMissing,
106878
- decide: decide$11
107025
+ decide: decide$12
106879
107026
  });
106880
107027
  //#endregion
106881
107028
  //#region src/run/dry-run.cell.ts
@@ -107250,7 +107397,7 @@ var EphemeralInstrument = class extends TaggedClass()("EphemeralInstrument", {
107250
107397
  }) {
107251
107398
  [InstrumentDecisionTypeId] = InstrumentDecisionTypeId;
107252
107399
  };
107253
- const decide$10 = (command) => value(command.inPlace).pipe(when(true, () => succeed$10(InPlaceInstrument.make({
107400
+ const decide$11 = (command) => value(command.inPlace).pipe(when(true, () => succeed$10(InPlaceInstrument.make({
107254
107401
  workingDirectoryHint: "inPlace",
107255
107402
  backupDirectoryHint: "backup",
107256
107403
  fileCount: command.fileCount
@@ -107262,7 +107409,7 @@ const planInstrumentation = Workflow_exports.make({
107262
107409
  command: InstrumentCommand,
107263
107410
  decision: Union([InPlaceInstrument, EphemeralInstrument]),
107264
107411
  error: Never,
107265
- decide: decide$10
107412
+ decide: decide$11
107266
107413
  });
107267
107414
  //#endregion
107268
107415
  //#region ../../node_modules/.pnpm/@jsr+std__jsonc@1.0.2/node_modules/@jsr/std__jsonc/parse.js
@@ -108076,12 +108223,12 @@ var MutationTestDryRunOnly = class extends TaggedClass()("MutationTestDryRunOnly
108076
108223
  var MutationTestNoTests = class extends TaggedClass()("MutationTestNoTests", {}) {
108077
108224
  [MutationTestDecisionTypeId] = MutationTestDecisionTypeId;
108078
108225
  };
108079
- const decide$9 = (command) => value({
108226
+ const decide$10 = (command) => value({
108080
108227
  invalid: command.testCount < 0,
108081
108228
  dryRunOnly: command.dryRunOnly,
108082
108229
  isZero: command.isZero,
108083
108230
  allowEmpty: command.allowEmpty
108084
- }).pipe(when({ invalid: true }, () => fail$8(MutationTestError.make({
108231
+ }).pipe(when({ invalid: true }, () => fail$9(MutationTestError.make({
108085
108232
  stage: "mutationTest",
108086
108233
  reason: "Invalid test count"
108087
108234
  }))), when({ dryRunOnly: true }, () => succeed$10(MutationTestDryRunOnly.make({}))), when({
@@ -108096,7 +108243,7 @@ const admitMutationTest = Workflow_exports.make({
108096
108243
  MutationTestNoTests
108097
108244
  ]),
108098
108245
  error: MutationTestError,
108099
- decide: decide$9
108246
+ decide: decide$10
108100
108247
  });
108101
108248
  //#endregion
108102
108249
  //#region src/admit-checker-answer.workflow.ts
@@ -108154,7 +108301,7 @@ const skippedRequested = (command, acknowledged) => liftPredicate(isReadonlyArra
108154
108301
  const contractBreach = (command, requested, submitted) => firstSomeOf([answeredUnrequested(command, submitted, requested), skippedRequested(command, acknowledgedIds(submitted, requested))]);
108155
108302
  const admit = (command, requested, submitted, decision) => match$8(contractBreach(command, requested, submitted), {
108156
108303
  onNone: () => succeed$10(decision),
108157
- onSome: (breach) => fail$8(breach)
108304
+ onSome: (breach) => fail$9(breach)
108158
108305
  });
108159
108306
  const idGroupsOf = (command) => getOrElse$1(() => [])(fromUndefinedOr(command.idGroups));
108160
108307
  const answersOf = (command) => getOrElse$1(() => ({}))(fromUndefinedOr(command.answers));
@@ -108263,7 +108410,7 @@ const lookupOf = (partitioned) => ({
108263
108410
  wireById: new Map(partitioned.wire.map((mutant) => [mutant.id, mutant])),
108264
108411
  undescribableById: new Map(partitioned.undescribable.map((mutant) => [mutant.id, mutant]))
108265
108412
  });
108266
- const wireOrFallbackOf = (mutant, lookup) => getOrElse$1(map$13(fromUndefinedOr(lookup.wireById.get(mutant.id)), succeed$10), () => getOrElse$1(map$13(fromUndefinedOr(lookup.undescribableById.get(mutant.id)), fail$8), () => wireRecordOf(mutant)));
108413
+ const wireOrFallbackOf = (mutant, lookup) => getOrElse$1(map$13(fromUndefinedOr(lookup.wireById.get(mutant.id)), succeed$10), () => getOrElse$1(map$13(fromUndefinedOr(lookup.undescribableById.get(mutant.id)), fail$9), () => wireRecordOf(mutant)));
108267
108414
  const selectedFromLookup = (plans, lookup) => {
108268
108415
  const [wire, undescribable] = separate(map$10(plans, (plan) => wireOrFallbackOf(plan.mutant, lookup)));
108269
108416
  return {
@@ -108452,7 +108599,7 @@ const decideCheckedPlan = (mutantId, result, entryIndex) => match$8(liftPredicat
108452
108599
  })
108453
108600
  })
108454
108601
  });
108455
- const decide$8 = (command) => succeed$10(command.checked.map(([mutantId, result], entryIndex) => decideCheckedPlan(mutantId, result, entryIndex)));
108602
+ const decide$9 = (command) => succeed$10(command.checked.map(([mutantId, result], entryIndex) => decideCheckedPlan(mutantId, result, entryIndex)));
108456
108603
  const partitionCheckedPlans = Workflow_exports.make({
108457
108604
  command: PartitionCheckedPlansCommand,
108458
108605
  decision: ArraySchema(Union([
@@ -108461,7 +108608,7 @@ const partitionCheckedPlans = Workflow_exports.make({
108461
108608
  CheckedPlanIgnored
108462
108609
  ])),
108463
108610
  error: Never,
108464
- decide: decide$8
108611
+ decide: decide$9
108465
108612
  });
108466
108613
  //#endregion
108467
108614
  //#region src/Checker/checker-pool.handle.ts
@@ -108817,7 +108964,7 @@ const decideChanged = (command) => {
108817
108964
  const recordsById = recordsByIdOf(command.previousRecords);
108818
108965
  return command.currentMutants.map((mutant) => decideForMutant(mutant, command, recordsById));
108819
108966
  };
108820
- const decide$7 = (command) => match$1(command.force, {
108967
+ const decide$8 = (command) => match$1(command.force, {
108821
108968
  onTrue: () => succeed$10(command.currentMutants.map(forcedRun)),
108822
108969
  onFalse: () => succeed$10(decideChanged(command))
108823
108970
  });
@@ -108825,7 +108972,7 @@ const incrementalDiff = Workflow_exports.make({
108825
108972
  command: IncrementalDiffCommand,
108826
108973
  decision: ArraySchema(Union([MutantRemembered, MutantToRun])),
108827
108974
  error: Never,
108828
- decide: decide$7
108975
+ decide: decide$8
108829
108976
  });
108830
108977
  //#endregion
108831
108978
  //#region src/report-test-ids.workflow.ts
@@ -108847,12 +108994,12 @@ const testIdsOfFile = (file, testFile) => testFile.tests.map((test) => ReportTes
108847
108994
  }));
108848
108995
  const testIdsOfFiles = (testFiles) => Object.entries(testFiles).flatMap(([file, testFile]) => testIdsOfFile(file, testFile));
108849
108996
  const tableOf = (testFiles) => testIdsOfFiles(getOrElse$1(fromUndefinedOr(testFiles), () => EMPTY_TEST_FILES));
108850
- const decide$6 = (command) => succeed$10(tableOf(command.testFiles));
108997
+ const decide$7 = (command) => succeed$10(tableOf(command.testFiles));
108851
108998
  const reportTestIds = Workflow_exports.make({
108852
108999
  command: ResolveReportTestIds,
108853
109000
  decision: ArraySchema(ReportTestId),
108854
109001
  error: Never,
108855
- decide: decide$6
109002
+ decide: decide$7
108856
109003
  });
108857
109004
  //#endregion
108858
109005
  //#region src/run/incremental-reuse.cell.ts
@@ -108982,7 +109129,7 @@ const readIncrementalReuseCommand = fn(SpanTaxonomy_exports.Spans.incrementalReu
108982
109129
  previousRecords: [...previousRecords],
108983
109130
  closureDigestsByMutantId: closures.digests,
108984
109131
  closureAnalysisFailed: closures.failed,
108985
- verdictSemanticsVersion: 3,
109132
+ verdictSemanticsVersion: 4,
108986
109133
  mutantSetPolicy: input.options.mutator.mutantSetPolicy,
108987
109134
  runInputsDigest,
108988
109135
  force: input.force,
@@ -109125,7 +109272,7 @@ const decideGuard = (command) => match$1(coveringTestMissing(command), {
109125
109272
  onTrue: () => decideRetry(command),
109126
109273
  onFalse: () => succeed$10(MutantRunSettled.make({}))
109127
109274
  });
109128
- const decide$5 = (command) => match$1(command.wallClockTimeout, {
109275
+ const decide$6 = (command) => match$1(command.wallClockTimeout, {
109129
109276
  onTrue: () => succeed$10(MutantRunPoolInvalidated.make({})),
109130
109277
  onFalse: () => decideGuard(command)
109131
109278
  });
@@ -109138,7 +109285,7 @@ const interpretMutantRun = Workflow_exports.make({
109138
109285
  MutantRunRetryExhausted
109139
109286
  ]),
109140
109287
  error: Never,
109141
- decide: decide$5
109288
+ decide: decide$6
109142
109289
  });
109143
109290
  //#endregion
109144
109291
  //#region src/mutant-run-span.ts
@@ -109526,7 +109673,7 @@ const toRunPlan = (mutant, command, netTime, testFilter, isStatic, coveredBy) =>
109526
109673
  ...staticField(isStatic),
109527
109674
  ...coveredByField(coveredBy)
109528
109675
  })),
109529
- onFalse: () => fail$8(MutantTimeoutNotFinite.make({ mutantId: mutant.id }))
109676
+ onFalse: () => fail$9(MutantTimeoutNotFinite.make({ mutantId: mutant.id }))
109530
109677
  });
109531
109678
  };
109532
109679
  const toEarlyResultPlan = (mutant, isStatic, status, statusReason, coveredBy) => PlannedEarlyResultMutant.make({
@@ -109609,15 +109756,15 @@ const missingHitCountIds = (command) => openMutantsOf(command.mutants).flatMap((
109609
109756
  onFalse: () => []
109610
109757
  }));
109611
109758
  const plannedMutantsOf = (command) => command.mutants.reduce((planned, mutant) => flatMap$8(planned, (soFar) => map$12(decidePlanForMutant(mutant, command), (next) => [...soFar, next])), succeed$10([]));
109612
- const decide$4 = (command) => match$8(fromUndefinedOr(missingHitCountIds(command)[0]), {
109759
+ const decide$5 = (command) => match$8(fromUndefinedOr(missingHitCountIds(command)[0]), {
109613
109760
  onNone: () => plannedMutantsOf(command),
109614
- onSome: (first) => fail$8(CoveredMutantHitCountMissing.make({ missingIds: [first, ...missingHitCountIds(command).slice(1)] }))
109761
+ onSome: (first) => fail$9(CoveredMutantHitCountMissing.make({ missingIds: [first, ...missingHitCountIds(command).slice(1)] }))
109615
109762
  });
109616
109763
  const planMutantTests = Workflow_exports.make({
109617
109764
  command: MutantTestPlanCommand,
109618
109765
  decision: ArraySchema(Union([PlannedRunMutant, PlannedEarlyResultMutant])),
109619
109766
  error: Union([CoveredMutantHitCountMissing, MutantTimeoutNotFinite]),
109620
- decide: decide$4
109767
+ decide: decide$5
109621
109768
  });
109622
109769
  //#endregion
109623
109770
  //#region src/materialize-mutant-plans.workflow.ts
@@ -109728,12 +109875,12 @@ const earlyResultPlanOf = (mutant, early) => ({
109728
109875
  coveredBy: early.coveredBy
109729
109876
  })
109730
109877
  });
109731
- const decide$3 = (command) => value(command.plan).pipe(tag("PlannedRunMutant", (run) => succeed$10(MutantRunPlanMaterialized.make({ plan: runPlanOf(command.mutant, run) }))), tag("PlannedEarlyResultMutant", (early) => succeed$10(MutantEarlyResultPlanMaterialized.make({ plan: earlyResultPlanOf(command.mutant, early) }))), exhaustive);
109878
+ const decide$4 = (command) => value(command.plan).pipe(tag("PlannedRunMutant", (run) => succeed$10(MutantRunPlanMaterialized.make({ plan: runPlanOf(command.mutant, run) }))), tag("PlannedEarlyResultMutant", (early) => succeed$10(MutantEarlyResultPlanMaterialized.make({ plan: earlyResultPlanOf(command.mutant, early) }))), exhaustive);
109732
109879
  const materializeMutantPlans = Workflow_exports.make({
109733
109880
  command: MaterializeMutantPlanCommand,
109734
109881
  decision: Union([MutantRunPlanMaterialized, MutantEarlyResultPlanMaterialized]),
109735
109882
  error: Never,
109736
- decide: decide$3
109883
+ decide: decide$4
109737
109884
  });
109738
109885
  //#endregion
109739
109886
  //#region src/MutantsError.schema.ts
@@ -109767,12 +109914,12 @@ const orderedOf = (plans) => [...plans].sort(comparePlans).map((plan) => Ordered
109767
109914
  netTime: plan.netTime,
109768
109915
  reloadEnvironment: plan.reloadEnvironment
109769
109916
  }));
109770
- const decide$2 = (command) => succeed$10(orderedOf(command.plans));
109917
+ const decide$3 = (command) => succeed$10(orderedOf(command.plans));
109771
109918
  const sortRunPlans = Workflow_exports.make({
109772
109919
  command: SortRunPlans,
109773
109920
  decision: ArraySchema(OrderedRunPlan),
109774
109921
  error: Never,
109775
- decide: decide$2
109922
+ decide: decide$3
109776
109923
  });
109777
109924
  //#endregion
109778
109925
  //#region src/run/mutation-test-plan.cell.ts
@@ -110253,7 +110400,7 @@ const catalogsOf = (command) => [command.stock, ...command.providers.map((provid
110253
110400
  }))];
110254
110401
  const planCatalogs = (command) => match$8(refusalOf(command), {
110255
110402
  onNone: () => succeed$10(MutatorCatalogsPlanned.make({ catalogs: [...catalogsOf(command)] })),
110256
- onSome: (refused) => fail$8(refused)
110403
+ onSome: (refused) => fail$9(refused)
110257
110404
  });
110258
110405
  const planMutatorCatalogs = Workflow_exports.make({
110259
110406
  command: PlanMutatorCatalogsCommand,
@@ -110299,19 +110446,19 @@ const reasonFor = (index, name) => match$1(index.declared.includes(name), {
110299
110446
  });
110300
110447
  const excludedRefusalOf = (index, command) => match$8(refusedNameIn(index.declared, command.excludedMutations), {
110301
110448
  onNone: () => succeed$10(void 0),
110302
- onSome: (name) => fail$8(MutatorSelectionRefused.make({
110449
+ onSome: (name) => fail$9(MutatorSelectionRefused.make({
110303
110450
  reason: "UnknownName",
110304
110451
  name
110305
110452
  }))
110306
110453
  });
110307
110454
  const optInRefusalOf = (index, command) => match$8(refusedNameIn(index.optIn, command.optInMutations), {
110308
110455
  onNone: () => succeed$10(void 0),
110309
- onSome: (name) => fail$8(MutatorSelectionRefused.make({
110456
+ onSome: (name) => fail$9(MutatorSelectionRefused.make({
110310
110457
  reason: reasonFor(index, name),
110311
110458
  name
110312
110459
  }))
110313
110460
  });
110314
- const decide$1 = (command) => {
110461
+ const decide$2 = (command) => {
110315
110462
  const index = indexOf(command.catalogs);
110316
110463
  return map$12(flatMap$8(excludedRefusalOf(index, command), () => optInRefusalOf(index, command)), () => MutatorSelectionDecoded.make({
110317
110464
  excludedMutations: [...command.excludedMutations],
@@ -110322,7 +110469,7 @@ const decodeMutatorSelection = Workflow_exports.make({
110322
110469
  command: DecodeMutatorSelectionCommand,
110323
110470
  decision: MutatorSelectionDecoded,
110324
110471
  error: MutatorSelectionRefused,
110325
- decide: decide$1
110472
+ decide: decide$2
110326
110473
  });
110327
110474
  //#endregion
110328
110475
  //#region src/framework-claimant.service.ts
@@ -110857,12 +111004,12 @@ var KeepTempDirCommand = class extends TaggedClass()("KeepTempDirCommand", {
110857
111004
  static [Workflow_exports.InstrumentationBrand] = {};
110858
111005
  };
110859
111006
  const keptIff = (kept) => value(kept).pipe(when(true, () => TempDirKept.make({})), when(false, () => TempDirRemoved.make({})), exhaustive);
110860
- const decide = (command) => value(command.cleanTempDir).pipe(when(false, () => TempDirKept.make({})), when(true, () => keptIff(command.failed)), when("always", () => TempDirRemoved.make({})), exhaustive, succeed$10);
111007
+ const decide$1 = (command) => value(command.cleanTempDir).pipe(when(false, () => TempDirKept.make({})), when(true, () => keptIff(command.failed)), when("always", () => TempDirRemoved.make({})), exhaustive, succeed$10);
110861
111008
  const keepTempDir = Workflow_exports.make({
110862
111009
  command: KeepTempDirCommand,
110863
111010
  decision: Union([TempDirKept, TempDirRemoved]),
110864
111011
  error: Never,
110865
- decide
111012
+ decide: decide$1
110866
111013
  });
110867
111014
  //#endregion
110868
111015
  //#region src/Sandbox.service.ts
@@ -111324,7 +111471,7 @@ const applyPrepare = fn(SpanTaxonomy_exports.Spans.prepareApply.name)(function*
111324
111471
  })));
111325
111472
  const admission = admitNonEmptyProject(NonEmptyProjectCommand.make({ fileCount: pipe(raw.project.files, size$3) }));
111326
111473
  const emptyAdmission = filter$7(getSuccess(admission), is$2(ProjectEmpty));
111327
- const emptyProjectGuard = getOrElse$1(map$13(emptyAdmission, () => fail$8(StageError.make({
111474
+ const emptyProjectGuard = getOrElse$1(map$13(emptyAdmission, () => fail$9(StageError.make({
111328
111475
  stage: "prepare",
111329
111476
  reason: "No input files found.",
111330
111477
  cause: PrepareError.make({
@@ -111370,7 +111517,7 @@ const prepareCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.prepare.na
111370
111517
  });
111371
111518
  //#endregion
111372
111519
  //#region src/run/run-stages.cell.ts
111373
- const configReadReasonOf = (cause) => value(cause).pipe(tag("ConfigError", (refused) => refused.message), orElse$1(() => "Failed to read config"));
111520
+ const configReadReasonOf = (cause) => cause.message;
111374
111521
  const mutationTestCell = Cell_exports.andThen(Cell_exports.andThen(Cell_exports.andThen(Cell_exports.andThen(Cell_exports.mapError(loadConfigCell, (cause) => StageError.make({
111375
111522
  stage: "prepare",
111376
111523
  reason: configReadReasonOf(cause),
@@ -112541,7 +112688,7 @@ const selectShard = Workflow_exports.make({
112541
112688
  decision: SelectedShard,
112542
112689
  error: ShardUnknown,
112543
112690
  decide: (command) => match$8(fromUndefinedOr(command.plan.shards.find((candidate) => labelOf(candidate) === command.shard)), {
112544
- onNone: () => fail$8(ShardUnknown.make({
112691
+ onNone: () => fail$9(ShardUnknown.make({
112545
112692
  shard: command.shard,
112546
112693
  reason: `unknown shard ${command.shard}; plan has ${command.plan.shards.map(labelOf).join(", ")}`
112547
112694
  })),
@@ -112722,7 +112869,7 @@ const mergeShardReports = Workflow_exports.make({
112722
112869
  command: MergeShardReportsCommand,
112723
112870
  decision: MergedShardReports,
112724
112871
  error: Union([ShardReportGap, ShardReportOverlap]),
112725
- decide: (command) => value(completenessOf(command)).pipe(tag("ShardReportOverlap", (overlap) => fail$8(overlap)), tag("ShardReportGap", (gap) => fail$8(gap)), tag("ShardReportsComplete", () => succeed$10(MergedShardReports.make({ projects: mergedProjectsOf(command) }))), exhaustive)
112872
+ decide: (command) => value(completenessOf(command)).pipe(tag("ShardReportOverlap", (overlap) => fail$9(overlap)), tag("ShardReportGap", (gap) => fail$9(gap)), tag("ShardReportsComplete", () => succeed$10(MergedShardReports.make({ projects: mergedProjectsOf(command) }))), exhaustive)
112726
112873
  });
112727
112874
  //#endregion
112728
112875
  //#region src/shard/shard-merge.schema.ts
@@ -112750,6 +112897,19 @@ const rebuiltReportOf = (text) => flatMap$9(fromUndefinedOr(text), (present) =>
112750
112897
  onSuccess: (decision) => map$13(liftPredicate(decision, is$2(ReportFromStreamRebuilt)), (rebuilt) => rebuilt.report)
112751
112898
  }));
112752
112899
  const resultOfReport = (text) => reportFromStream(ReportFromStreamCommand.make({ text }));
112900
+ const decodeVerdictLine = decodeOption(fromJsonString(RunEvent_exports.VerdictReached));
112901
+ const budgetOfStream = (text) => map$13(last$1(match$8(fromUndefinedOr(text), {
112902
+ onNone: () => [],
112903
+ onSome: (present) => present.split("\n").flatMap((line) => toArray(decodeVerdictLine(line.trim())))
112904
+ })), (verdict) => verdict.budget);
112905
+ const shardBudgetOf = (budgets) => map$13(all$4(budgets), (present) => ({
112906
+ predictedSeconds: reduce$2(present, 0, (total, budget) => total + budget.predictedSeconds),
112907
+ actualSeconds: reduce$2(present, 0, (total, budget) => total + budget.actualSeconds)
112908
+ }));
112909
+ const mergedBudgetOf = (plan, shardBudgets) => map$13(all$4(shardBudgets), (present) => ({
112910
+ predictedSeconds: reduce$2(plan.shards, 0, (slowest, shard) => Math.max(slowest, shard.predictedSeconds)),
112911
+ actualSeconds: reduce$2(present, 0, (slowest, budget) => Math.max(slowest, budget.actualSeconds))
112912
+ }));
112753
112913
  const incrementalTextsOf = (dir) => gen(function* () {
112754
112914
  const candidates = [...yield* (yield* FileSystem).readDirectory(dir).pipe(orElseSucceed(() => []))].filter((name) => INCREMENTAL_PART_NAME.test(name)).sort();
112755
112915
  return (yield* forEach$1(candidates, (name) => readText(`${dir}/${name}`), { concurrency: 1 })).filter((text) => text !== void 0);
@@ -112774,11 +112934,15 @@ const mergeFiles = (reports) => reduce$2(reports.flatMap(({ project, report }) =
112774
112934
  const headReportOf = (reports) => head(reports);
112775
112935
  const schemaVersionOf = (reports) => getOrElse$1(map$13(headReportOf(reports), (first) => first.report.schemaVersion), () => DEFAULT_SCHEMA_VERSION);
112776
112936
  const thresholdsOf = (reports) => getOrElse$1(map$13(headReportOf(reports), (first) => first.report.thresholds), () => DEFAULT_THRESHOLDS);
112777
- const mergedReportOf = (reports) => ({
112937
+ const mergedReportOf = (reports, budget) => ({
112778
112938
  files: mergeFiles(reports),
112779
112939
  schemaVersion: schemaVersionOf(reports),
112780
112940
  thresholds: thresholdsOf(reports),
112781
- config: {}
112941
+ config: {},
112942
+ ...match$8(budget, {
112943
+ onNone: () => ({}),
112944
+ onSome: (present) => ({ budget: present })
112945
+ })
112782
112946
  });
112783
112947
  const mutantsOfReport = (report) => Object.values(report.files).flatMap((file) => file.mutants);
112784
112948
  const verdictsOf = (report) => mutantsOfReport(report).map((mutant) => ({
@@ -112799,7 +112963,8 @@ const reportedOf = (shard, project, report) => match$8(report, {
112799
112963
  });
112800
112964
  const collectProject = (input, path, dir, shard, project) => gen(function* () {
112801
112965
  const projectDir = path.join(path.resolve(input.basePath, dir), project.project);
112802
- const report = rebuiltReportOf(yield* readText(path.join(projectDir, STREAM_FILE$1)));
112966
+ const stream = yield* readText(path.join(projectDir, STREAM_FILE$1));
112967
+ const report = rebuiltReportOf(stream);
112803
112968
  const incrementalTexts = yield* incrementalTextsOf(projectDir);
112804
112969
  return {
112805
112970
  reported: reportedOf(shard, project.project, report),
@@ -112810,13 +112975,15 @@ const collectProject = (input, path, dir, shard, project) => gen(function* () {
112810
112975
  incremental: {
112811
112976
  project: project.project,
112812
112977
  texts: incrementalTexts
112813
- }
112978
+ },
112979
+ budget: budgetOfStream(stream)
112814
112980
  };
112815
112981
  });
112816
112982
  const collectShardReports = (input, path, dir, shard) => forEach$1(shard.projects, (project) => collectProject(input, path, dir, shard.index, project), { concurrency: 1 }).pipe(map$7((parts) => ({
112817
112983
  reports: parts.map((part) => part.reported),
112818
112984
  projectReports: getSomes(parts.map((part) => part.projectReport)),
112819
- incrementals: parts.map((part) => part.incremental)
112985
+ incrementals: parts.map((part) => part.incremental),
112986
+ shardBudgets: [shardBudgetOf(parts.map((part) => part.budget))]
112820
112987
  })));
112821
112988
  const collectProjectReports = (input, path) => forEach$1(input.shardDirs.map((dir, index) => ({
112822
112989
  dir,
@@ -112827,7 +112994,8 @@ const collectProjectReports = (input, path) => forEach$1(input.shardDirs.map((di
112827
112994
  }), { concurrency: 1 }).pipe(map$7((parts) => ({
112828
112995
  reports: parts.flatMap((part) => part.reports),
112829
112996
  projectReports: parts.flatMap((part) => part.projectReports),
112830
- incrementals: parts.flatMap((part) => part.incrementals)
112997
+ incrementals: parts.flatMap((part) => part.incrementals),
112998
+ shardBudgets: parts.flatMap((part) => part.shardBudgets)
112831
112999
  })));
112832
113000
  const shardsOf = (input) => input.plan.shards.map((shard) => ({
112833
113001
  index: shard.index,
@@ -112858,7 +113026,7 @@ const mergeShards = (input) => gen(function* () {
112858
113026
  })));
112859
113027
  const outDir = outputDirOf(input, path);
112860
113028
  yield* fs.makeDirectory(outDir, { recursive: true });
112861
- const json = yield* orDie(encodeEffect(fromJsonString(Unknown, { space: 2 }))(mergedReportOf(collected.projectReports)));
113029
+ const json = yield* orDie(encodeEffect(fromJsonString(Unknown, { space: 2 }))(mergedReportOf(collected.projectReports, mergedBudgetOf(input.plan, collected.shardBudgets))));
112862
113030
  yield* writeFileAtomic({
112863
113031
  fs,
112864
113032
  path
@@ -112898,15 +113066,50 @@ const loadShardPlan = dual(2, (basePath, file) => gen(function* () {
112898
113066
  };
112899
113067
  }));
112900
113068
  //#endregion
113069
+ //#region src/shard/settle-shard-child.workflow.ts
113070
+ const SettleShardChildTypeId = Symbol.for("@systemfsoftware/stryker-js/SettleShardChild");
113071
+ const COMPLETED_CODE = 0;
113072
+ const verdictFailCode = getOrUndefined$1(decodeOption(Plugin_exports.ExitCodeFromClass)("VerdictFail"));
113073
+ var SettleShardChildCommand = class extends TaggedClass()("SettleShardChildCommand", { exitCode: Int$4 }) {
113074
+ static [Workflow_exports.InstrumentationBrand] = {};
113075
+ };
113076
+ var ShardChildCompleted = class extends TaggedClass()("ShardChildCompleted", {}) {
113077
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
113078
+ };
113079
+ var ShardChildVerdictFailed = class extends TaggedClass()("ShardChildVerdictFailed", {}) {
113080
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
113081
+ };
113082
+ var ShardChildAborted = class extends TaggedClass()("ShardChildAborted", { exitCode: Int$4 }) {
113083
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
113084
+ };
113085
+ const SettleShardChildDecision = Union([
113086
+ ShardChildCompleted,
113087
+ ShardChildVerdictFailed,
113088
+ ShardChildAborted
113089
+ ]);
113090
+ const decide = (command) => match$1(command.exitCode === COMPLETED_CODE, {
113091
+ onTrue: () => succeed$10(ShardChildCompleted.make({})),
113092
+ onFalse: () => match$1(command.exitCode === verdictFailCode, {
113093
+ onTrue: () => succeed$10(ShardChildVerdictFailed.make({})),
113094
+ onFalse: () => succeed$10(ShardChildAborted.make({ exitCode: command.exitCode }))
113095
+ })
113096
+ });
113097
+ const settleShardChild = Workflow_exports.make({
113098
+ command: SettleShardChildCommand,
113099
+ decision: SettleShardChildDecision,
113100
+ error: Never,
113101
+ decide
113102
+ });
113103
+ //#endregion
112901
113104
  //#region src/shard/shard-run.schema.ts
112902
113105
  var ShardChildFailed = class extends TaggedError()("ShardChildFailed", {
112903
113106
  project: String$7,
112904
113107
  exitCode: Int$4,
112905
- reason: String$7
113108
+ childOutput: String$7
112906
113109
  }) {
112907
113110
  exitClass = "RuntimeError";
112908
113111
  get message() {
112909
- return `shard child for ${this.project} failed with exit code ${this.exitCode}: ${this.reason}`;
113112
+ return `shard child for ${this.project} failed with exit code ${this.exitCode}: ${this.childOutput}`;
112910
113113
  }
112911
113114
  };
112912
113115
  //#endregion
@@ -112914,7 +113117,6 @@ var ShardChildFailed = class extends TaggedError()("ShardChildFailed", {
112914
113117
  const SHARD_OUT_MARKER = "reports/shards";
112915
113118
  const STREAM_FILE = "mutation-stream.jsonl";
112916
113119
  const INCREMENTAL_FILE = "stryker-incremental.json";
112917
- const STDERR_LIMIT = 4096;
112918
113120
  const childArgsOf = (input, project, projectOut, path) => [
112919
113121
  globalThis.process.argv[1] ?? "",
112920
113122
  "run",
@@ -112938,6 +113140,13 @@ const seedIncremental = (path, fs, projectDir, projectOut) => gen(function* () {
112938
113140
  const hasTarget = yield* fs.exists(target);
112939
113141
  yield* when$2(fs.copyFile(cached, target), succeed$5(hasCached && !hasTarget));
112940
113142
  });
113143
+ const settlementOf$1 = (exitCode) => getOrElse(settleShardChild(SettleShardChildCommand.make({ exitCode })), (neverError) => neverError);
113144
+ const subThresholdLine = (project) => `stryker shard: ${project} scored below thresholds.break over this shard's mutants; the merged report carries the project verdict`;
113145
+ const missingStreamFailure = (project, exitCode, streamFile) => ShardChildFailed.make({
113146
+ project,
113147
+ exitCode,
113148
+ childOutput: `the shard child completed without leaving its progress stream at ${streamFile}`
113149
+ });
112941
113150
  const runShard = (input) => gen(function* () {
112942
113151
  const selected = yield* fromResult(selectShard(SelectShardCommand.make({
112943
113152
  plan: input.plan,
@@ -112950,6 +113159,7 @@ const runShard = (input) => gen(function* () {
112950
113159
  yield* forEach$1(selected.projects, (project) => gen(function* () {
112951
113160
  const projectDir = path.resolve(input.planDirectory, project.project);
112952
113161
  const projectOut = path.join(outDir, project.project);
113162
+ const streamFile = path.join(projectOut, STREAM_FILE);
112953
113163
  yield* fs.makeDirectory(projectOut, { recursive: true });
112954
113164
  yield* seedIncremental(path, fs, projectDir, projectOut);
112955
113165
  const handle = yield* spawner.spawn(make$14(globalThis.process.execPath, childArgsOf(input, project.project, projectOut, path), {
@@ -112961,15 +113171,17 @@ const runShard = (input) => gen(function* () {
112961
113171
  }));
112962
113172
  const stderr = yield* handle.stderr.pipe(decodeText$1, mkString);
112963
113173
  const exitCode = Number(yield* handle.exitCode);
112964
- yield* exitCode === 0 ? void_$1 : fail$4(ShardChildFailed.make({
113174
+ yield* value(settlementOf$1(exitCode)).pipe(tag("ShardChildCompleted", () => void_$1), tag("ShardChildVerdictFailed", () => logInfo(subThresholdLine(project.project))), tag("ShardChildAborted", () => fail$4(ShardChildFailed.make({
112965
113175
  project: project.project,
112966
113176
  exitCode,
112967
- reason: stderr.slice(0, STDERR_LIMIT)
112968
- }));
113177
+ childOutput: stderr.slice(-4096)
113178
+ }))), exhaustive);
113179
+ const streamPresent = yield* fs.exists(streamFile);
113180
+ yield* value(streamPresent).pipe(when(true, () => void_$1), when(false, () => fail$4(missingStreamFailure(project.project, exitCode, streamFile))), exhaustive);
112969
113181
  }).pipe(catchTag("PlatformError", (cause) => fail$4(ShardChildFailed.make({
112970
113182
  project: project.project,
112971
113183
  exitCode: -1,
112972
- reason: cause.message
113184
+ childOutput: cause.message
112973
113185
  })))), {
112974
113186
  concurrency: 1,
112975
113187
  discard: true
@@ -113104,10 +113316,10 @@ const runBudgetGate = (gate, report, basePath) => forEach$1(toArray(fromUndefine
113104
113316
  }), { discard: true });
113105
113317
  const reportUnchecked = (unchecked) => logInfo(`stryker gate: ${unchecked.length} mutant(s) unchecked (in scope with no verdict)`);
113106
113318
  const GATE_REMEDIATION_LINE = "accept the new survivors with `stryker gate --update-baseline`, or kill them before the next run";
113107
- const explainGateRefusal = (failure) => andThen$1(logError(failure.message), match$1(is$2(BudgetExceeded)(failure) || is$2(BudgetInputUnusable)(failure), {
113319
+ const remediateGateRefusal = (failure) => match$1(is$2(BudgetExceeded)(failure) || is$2(BudgetInputUnusable)(failure), {
113108
113320
  onTrue: () => void_$1,
113109
113321
  onFalse: () => logInfo(GATE_REMEDIATION_LINE)
113110
- }));
113322
+ });
113111
113323
  const gateReport = (gate, channel) => gen(function* () {
113112
113324
  const path = yield* Path$1;
113113
113325
  const basePath = channel.environment.basePath;
@@ -113204,7 +113416,7 @@ const runRequestCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runRequ
113204
113416
  });
113205
113417
  }),
113206
113418
  CliCompareRequested: (compare) => compareReports(compare),
113207
- CliGateRequested: (gate, channel) => gateReport(gate, channel).pipe(tapError(explainGateRefusal)),
113419
+ CliGateRequested: (gate, channel) => gateReport(gate, channel).pipe(tapError(remediateGateRefusal)),
113208
113420
  CliAnnotateRequested: (annotate, channel) => annotateReport(annotate, channel),
113209
113421
  CliPlanRequested: (plan, channel) => planRequest({
113210
113422
  request: plan,
@@ -113215,7 +113427,7 @@ const runRequestCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runRequ
113215
113427
  CliServeRequested: (serve, channel) => serveMutationServer(serveRequestOf(serve, channel.options)).pipe(scoped$3),
113216
113428
  CliRunRequested: (_, channel) => runStage(channel),
113217
113429
  CliSurvivorsRequested: (_, channel) => survivorsAdmissionCell.run(survivorsInputOf(channel)),
113218
- CliRerunRequested: (rerun, channel) => mutantRerunAdmissionCell.run(rerunInputOf(channel, rerun.ids)).pipe(tapError((failure) => forEach$1(toArray(liftPredicate(failure, is$2(RerunRefused))), (refusal) => logError(refusal.reason), { discard: true }))),
113430
+ CliRerunRequested: (rerun, channel) => mutantRerunAdmissionCell.run(rerunInputOf(channel, rerun.ids)),
113219
113431
  CommandRejected: ({ issue }) => fail$4(StrykerError.make({ message: `the CLI read resolved a command the route schema rejects: ${issue}` }))
113220
113432
  });
113221
113433
  //#endregion
@@ -113696,6 +113908,13 @@ const servedInvocation = (argv) => exists$1(fromUndefinedOr(argv.find((argument)
113696
113908
  const SPAN_ERROR_LIMIT = 1024;
113697
113909
  const TRUNCATION_SUFFIX = "…[truncated]";
113698
113910
  const boundedErrorText = (text) => text.length > SPAN_ERROR_LIMIT ? text.slice(0, SPAN_ERROR_LIMIT) + TRUNCATION_SUFFIX : text;
113911
+ const failureTextOf = (failure, captured) => {
113912
+ const envelope = errorEnvelopeFromOutcome({
113913
+ error: failure,
113914
+ captured
113915
+ });
113916
+ return value(envelope.remediation).pipe(when("", () => boundedErrorText(envelope.error)), when((remediation) => remediation.includes(envelope.error), (remediation) => boundedErrorText(remediation)), orElse$1((remediation) => `${boundedErrorText(envelope.error)} — ${remediation}`));
113917
+ };
113699
113918
  const strykerProgram = gen(function* () {
113700
113919
  const args = [...yield* (yield* Stdio).args];
113701
113920
  const probeMode = gen(function* () {
@@ -113747,10 +113966,7 @@ const strykerProgram = gen(function* () {
113747
113966
  const outcome = classifyRunOutcome(conclusionCommand);
113748
113967
  const classified = getOrElse(outcome, (interrupted) => interrupted);
113749
113968
  const machineConsoleService = yield* MachineConsole;
113750
- const errorText = getOrElse$1(map$13(liftPredicate(is$2(FailedRunOutcomeSchema))(classified), (failure) => boundedErrorText(errorEnvelopeFromOutcome({
113751
- error: failure,
113752
- captured: machineConsoleService.read()
113753
- }).error)), () => "");
113969
+ const errorText = getOrElse$1(map$13(liftPredicate(is$2(FailedRunOutcomeSchema))(classified), (failure) => failureTextOf(failure, machineConsoleService.read())), () => "");
113754
113970
  yield* annotateCurrentSpan({
113755
113971
  "stryker.run.outcome": classified._tag,
113756
113972
  "stryker.run.exit_code": runExitCodeFromOutcome(classified).code,