@systemfsoftware/stryker-js 16.0.0 → 16.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  # @systemfsoftware/stryker-js
2
2
 
3
+ ## 16.0.1
4
+
5
+ ### Patch Changes
6
+
7
+ - A shard run keeps going when one of its projects scores under `thresholds.break` over the shard's mutants. It runs the remaining projects, exits 0, and notes that the merged report carries the project verdict. A shard fails only when a project fails for a real reason: another exit code, or no progress stream. Its error names the project, the exit code and the tail of that project's error output.
8
+
9
+ Every non-zero exit now says why in human mode. One final stderr line names the exit code, its class (`VerdictFail`, `ConfigError`, `RuntimeError`, `InternalError`) and the failure with its remediation. A rejected survivor check and a refused re-run no longer print it twice.
10
+
11
+ A config file that throws while loading now reports the thrown error instead of `Failed to read config`.
12
+
3
13
  ## 16.0.0
4
14
 
5
15
  ### Major Changes
package/dist/index.mjs CHANGED
@@ -1,6 +1,6 @@
1
1
  import { t as __exportAll } from "./rolldown-runtime-8H4AJuhK.mjs";
2
2
  import { i as Mutant_exports, l as Report_exports, n as mergeConfigs } from "./merge-config-BYhhPA7r.mjs";
3
- import { $ as WorkerLauncher, A as classifyWorkerExit, At as OutOfMemoryError, B as SurvivorRef, C as nodePlatformLayer, Ct as MergeResult, D as git_diff_schema_exports, Dt as survivorsPriorReport, E as git_diff_service_exports, Et as forkOptionsSchema, F as readConfig, Ft as CheckerAnsweredUnrequested, G as generateRunId, H as RunEvents, I as RunEnvironment, It as CheckerSkippedRequested, J as metricsResultFromFiles, K as VerdictEnvelope, L as IdGenerator, M as loadConfigCell, Mt as OutputMode_exports, N as describeErrors, Nt as RunEvent_exports$1, O as ClassifyWorkerExitCommand, Ot as checkGroupedPlans, P as forkCoreSchema, Pt as SpanTaxonomy_exports, Q as makeWorkerClient, R as surfacedSurvivorsOf, S as IncrementalReportSchema, St as MergeCommand, T as GitDiff, Tt as extendsPropertySchema, U as RunIdentity, V as StrykerPackage, W as buildVerdictEnvelope, X as reporterWorkerFactory, Y as MetricsResultFromReport, Z as spawnReporterWorker, _ as isCommandRunner, _t as defaultOptions, a as MachineConsole, at as initialExtendsStepState, b as readProjectCell, bt as ExtendsStepStateSchema, c as prepareCell, ct as ExtendsStepRead, d as buildTestRunner, dt as ConfigError, et as make, f as makeChildProcessTestRunner, ft as ConfigFileInvalidError, g as vmTestRunnerConfig, gt as createDefaultOptions, h as vmRunnerPluginUrl, ht as ConfigFileUnsupportedError, i as makeRunEventStream, it as importModule, j as validateOptions, jt as WorkerBootTimeoutError, k as ClassifyWorkerExitDecision, kt as ChildProcessCrashedError, l as mutantDetailEventsOf, lt as ExtendsStepRefused, m as testRunnerConfigOf, mt as ConfigFileUnreadableError, n as RunEventDrain, nt as FileMatcher, o as HtmlReporter_exports, ot as StrykerError, p as isVmRunner, pt as ConfigFileNotFoundError, q as staticVerdictOf, r as RunEventDrainLive, rt as decideExtendsStep, s as mutationTestCell, st as ExtendsStepDone, t as strykerCell, tt as ReproducerSchema, u as instrumentCell, ut as ExtendsStepResolve, v as import_closure_cell_exports, vt as ConfigDocumentSchema, w as layerWorkerProtocol, wt as ReadConfigCommand, x as concurrencyCell, xt as ImportedModuleSchema, y as relativeNormalizedFileName, yt as ExtendsStepDocumentSchema, z as SurfacingFields } from "./run-stages-k4L7ymmp.mjs";
3
+ import { $ as WorkerLauncher, A as classifyWorkerExit, At as OutOfMemoryError, B as SurvivorRef, C as nodePlatformLayer, Ct as MergeResult, D as git_diff_schema_exports, Dt as survivorsPriorReport, E as git_diff_service_exports, Et as forkOptionsSchema, F as readConfig, Ft as CheckerAnsweredUnrequested, G as generateRunId, H as RunEvents, I as RunEnvironment, It as CheckerSkippedRequested, J as metricsResultFromFiles, K as VerdictEnvelope, L as IdGenerator, M as loadConfigCell, Mt as OutputMode_exports, N as describeErrors, Nt as RunEvent_exports$1, O as ClassifyWorkerExitCommand, Ot as checkGroupedPlans, P as forkCoreSchema, Pt as SpanTaxonomy_exports, Q as makeWorkerClient, R as surfacedSurvivorsOf, S as IncrementalReportSchema, St as MergeCommand, T as GitDiff, Tt as extendsPropertySchema, U as RunIdentity, V as StrykerPackage, W as buildVerdictEnvelope, X as reporterWorkerFactory, Y as MetricsResultFromReport, Z as spawnReporterWorker, _ as isCommandRunner, _t as defaultOptions, a as MachineConsole, at as initialExtendsStepState, b as readProjectCell, bt as ExtendsStepStateSchema, c as prepareCell, ct as ExtendsStepRead, d as buildTestRunner, dt as ConfigError, et as make, f as makeChildProcessTestRunner, ft as ConfigFileInvalidError, g as vmTestRunnerConfig, gt as createDefaultOptions, h as vmRunnerPluginUrl, ht as ConfigFileUnsupportedError, i as makeRunEventStream, it as importModule, j as validateOptions, jt as WorkerBootTimeoutError, k as ClassifyWorkerExitDecision, kt as ChildProcessCrashedError, l as mutantDetailEventsOf, lt as ExtendsStepRefused, m as testRunnerConfigOf, mt as ConfigFileUnreadableError, n as RunEventDrain, nt as FileMatcher, o as HtmlReporter_exports, ot as StrykerError, p as isVmRunner, pt as ConfigFileNotFoundError, q as staticVerdictOf, r as RunEventDrainLive, rt as decideExtendsStep, s as mutationTestCell, st as ExtendsStepDone, t as strykerCell, tt as ReproducerSchema, u as instrumentCell, ut as ExtendsStepResolve, v as import_closure_cell_exports, vt as ConfigDocumentSchema, w as layerWorkerProtocol, wt as ReadConfigCommand, x as concurrencyCell, xt as ImportedModuleSchema, y as relativeNormalizedFileName, yt as ExtendsStepDocumentSchema, z as SurfacingFields } from "./run-stages-DYuRm353.mjs";
4
4
  import { n as StageError } from "./Run.schema-DuaneDGd.mjs";
5
5
  import { Cell, Sandwich, Workflow } from "@systemfsoftware/effect-cell-types";
6
6
  import * as S from "effect/Schema";
package/dist/main.mjs CHANGED
@@ -71540,7 +71540,7 @@ var ErrorText = class extends Class("ErrorText")({ text: NonEmptyString }) {};
71540
71540
  var CauseText = class extends Class("CauseText")({ text: NonEmptyString }) {};
71541
71541
  const nonEmptyText$2 = liftPredicate(is$2(NonEmptyString));
71542
71542
  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 }));
71543
+ const causeTextOf$2 = (cause) => flatMap$9(nonEmptyText$2(causeChainTextOf(cause)), (text) => CauseText.makeOption({ text }));
71544
71544
  function errorTextValueOf(error) {
71545
71545
  return value(error).pipe(when(isEmptyError, () => ""), when(instanceOf(Error), errorText), orElse$1(() => stringifyNonError(error)));
71546
71546
  }
@@ -71621,7 +71621,7 @@ function objectCauseTextOf(cause, depth) {
71621
71621
  var ErrorText_exports = /* @__PURE__ */ __exportAll$2({
71622
71622
  CauseText: () => CauseText,
71623
71623
  ErrorText: () => ErrorText,
71624
- causeTextOf: () => causeTextOf$1,
71624
+ causeTextOf: () => causeTextOf$2,
71625
71625
  errorTextOf: () => errorTextOf$2
71626
71626
  });
71627
71627
  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)));
@@ -76666,7 +76666,7 @@ const makeHtmlReporter = dual(2, (options, _init) => (events) => build(nodeFsPat
76666
76666
  var HtmlReporter_exports = /* @__PURE__ */ __exportAll$3({ makeHtmlReporter: () => makeHtmlReporter });
76667
76667
  //#endregion
76668
76668
  //#region package.json
76669
- var version = "16.0.0";
76669
+ var version = "16.0.1";
76670
76670
  //#endregion
76671
76671
  //#region ../../node_modules/.pnpm/effect@4.0.0/node_modules/effect/dist/cli/CliOutput.js
76672
76672
  /**
@@ -83307,7 +83307,7 @@ const refusedOutcome = (observation) => RunRefused.make({
83307
83307
  rule: observation.rule,
83308
83308
  message: observation.message
83309
83309
  });
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);
83310
+ const decide$30 = (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);
83311
83311
  const classifyRunOutcome = Workflow_exports.make({
83312
83312
  command: RunOutcomeCommand,
83313
83313
  decision: Union([
@@ -83319,7 +83319,7 @@ const classifyRunOutcome = Workflow_exports.make({
83319
83319
  RunFailed
83320
83320
  ]),
83321
83321
  error: RunInterrupted,
83322
- decide: decide$29
83322
+ decide: decide$30
83323
83323
  });
83324
83324
  //#endregion
83325
83325
  //#region src/plan-run-conclusion.workflow.ts
@@ -83367,7 +83367,11 @@ var RunConclusionEmittedFailed = class extends TaggedClass()("RunConclusionEmitt
83367
83367
  var RunConclusionQuietOk = class extends TaggedClass()("RunConclusionQuietOk", {}) {
83368
83368
  [PlanRunConclusionTypeId] = PlanRunConclusionTypeId;
83369
83369
  };
83370
- var RunConclusionQuietFailed = class extends TaggedClass()("RunConclusionQuietFailed", { exitCode: Plugin_exports.ExitCode }) {
83370
+ var RunConclusionQuietFailed = class extends TaggedClass()("RunConclusionQuietFailed", {
83371
+ exitCode: Plugin_exports.ExitCode,
83372
+ exitClass: Union([Plugin_exports.ExitClass, RunOutcomeTag]),
83373
+ error: String$7
83374
+ }) {
83371
83375
  [PlanRunConclusionTypeId] = PlanRunConclusionTypeId;
83372
83376
  };
83373
83377
  const PlanRunConclusionDecision = Union([
@@ -83383,11 +83387,18 @@ const emittedOf = (command) => match$1(command.exitCode === 0, {
83383
83387
  exitCode: command.exitCode
83384
83388
  })
83385
83389
  });
83390
+ const BASELINE_CLASSES = filterMap$3(Plugin_exports.ExitClass.literals, (exitClass) => fromOption$2(map$13(decodeOption(Plugin_exports.ExitCodeFromClass)(exitClass), (code) => [code, exitClass]), () => exitClass));
83391
+ const baselineClassOf = (exitCode) => map$13(findFirst(BASELINE_CLASSES, ([code]) => code === exitCode), ([, exitClass]) => exitClass);
83392
+ const exitClassNameOf = (command) => getOrElse$1(baselineClassOf(command.exitCode), () => command.outcome);
83386
83393
  const quietOf = (command) => match$1(command.exitCode === 0, {
83387
83394
  onTrue: () => RunConclusionQuietOk.make({}),
83388
- onFalse: () => RunConclusionQuietFailed.make({ exitCode: command.exitCode })
83395
+ onFalse: () => RunConclusionQuietFailed.make({
83396
+ exitCode: command.exitCode,
83397
+ exitClass: exitClassNameOf(command),
83398
+ error: command.error
83399
+ })
83389
83400
  });
83390
- const decide$28 = (command) => succeed$10(match$1(command.machine, {
83401
+ const decide$29 = (command) => succeed$10(match$1(command.machine, {
83391
83402
  onTrue: () => emittedOf(command),
83392
83403
  onFalse: () => quietOf(command)
83393
83404
  }));
@@ -83395,7 +83406,7 @@ const planRunConclusion = Workflow_exports.make({
83395
83406
  command: PlanRunConclusionCommand,
83396
83407
  decision: PlanRunConclusionDecision,
83397
83408
  error: Never,
83398
- decide: decide$28
83409
+ decide: decide$29
83399
83410
  });
83400
83411
  //#endregion
83401
83412
  //#region src/reporting/run-failure.schema.ts
@@ -83422,7 +83433,7 @@ const exitCodeOf = (outcome) => value(outcome).pipe(tag("RunOk", () => 0), tag("
83422
83433
  const nonEmptyText$1 = liftPredicate(is$2(NonEmptyString));
83423
83434
  const capturedOrUnknown = (captured) => getOrElse$1(nonEmptyText$1(captured), () => UNKNOWN_FAILURE$1);
83424
83435
  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);
83436
+ 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
83437
  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
83438
  onSome: (detail) => `check the config file: ${detail}`,
83428
83439
  onNone: () => "check the config file"
@@ -83430,7 +83441,7 @@ const remediationTextOf$1 = (error) => value(error).pipe(tag("RunInterrupted", (
83430
83441
  const errorEnvelopeFromOutcome = (input) => ErrorEnvelope.make({
83431
83442
  schemaVersion: RunEvent_exports.StreamSchemaVersion.literal,
83432
83443
  code: exitCodeOf(input.error),
83433
- error: failureTextOf(input.error, input.captured),
83444
+ error: failureTextOf$1(input.error, input.captured),
83434
83445
  remediation: remediationTextOf$1(input.error)
83435
83446
  });
83436
83447
  const runExitCodeFromOutcome = (outcome) => RunExitCode.make({ code: exitCodeOf(outcome) });
@@ -83469,6 +83480,7 @@ const readConclusion = fn(SpanTaxonomy_exports.Spans.runConclusionRead.name)(fun
83469
83480
  conclusion: input
83470
83481
  };
83471
83482
  });
83483
+ const writeStderrLine = (line) => flatMap$4(Stdio, (stdio) => run$4(succeed$3(`${line}\n`), stdio.stderr({ endOnDone: false })).pipe(ignore$1));
83472
83484
  const concludeRunCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runConclude.name)(readConclusion).decide(planRunConclusion).write({
83473
83485
  RunConclusionEmittedOk: (_decision, raw) => andThen$1(raw.conclusion.runEvents.emitMachineModeOutput({
83474
83486
  stream: raw.conclusion.stream,
@@ -83485,7 +83497,7 @@ const concludeRunCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runCon
83485
83497
  pathService: raw.conclusion.pathService
83486
83498
  }), andThen$1(raw.conclusion.stream.closeAndDrain, fail$4(RunExit.make({ code: decision.exitCode })))),
83487
83499
  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 }))),
83500
+ 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
83501
  CommandRejected: ({ issue }) => fail$4(StrykerError.make({ message: `the run conclusion command was rejected: ${issue}` }))
83490
83502
  });
83491
83503
  //#endregion
@@ -83505,7 +83517,7 @@ var LocalMutationRefused = class extends TaggedError()("LocalMutationRefused", {
83505
83517
  rule: RunEvent_exports.RefusalRule,
83506
83518
  message: String$7
83507
83519
  }) {};
83508
- const decide$27 = (command) => value({
83520
+ const decide$28 = (command) => value({
83509
83521
  dryRunOnly: command.dryRunOnly,
83510
83522
  githubActions: command.githubActions,
83511
83523
  allowLocalMutation: command.allowLocalMutation
@@ -83517,7 +83529,7 @@ const refuseLocalMutation = Workflow_exports.make({
83517
83529
  command: RefuseLocalMutationCommand,
83518
83530
  decision: LocalMutationAllowed,
83519
83531
  error: LocalMutationRefused,
83520
- decide: decide$27
83532
+ decide: decide$28
83521
83533
  });
83522
83534
  //#endregion
83523
83535
  //#region src/admit-survivors-run.workflow.ts
@@ -83645,6 +83657,13 @@ const admitSurvivorsRun = Workflow_exports.make({
83645
83657
  });
83646
83658
  //#endregion
83647
83659
  //#region src/ConfigError.schema.ts
83660
+ const CAUSE_DEPTH = 4;
83661
+ const ownMessageOf = (value) => filter$7(map$13(liftPredicate(value, hasProperty("message")), (carrier) => String(carrier.message)), is$2(NonEmptyString));
83662
+ const causeMessagesOf = (value, depth) => depth === 0 ? [] : [...toArray(ownMessageOf(value)), ...match$8(liftPredicate(value, hasProperty("cause")), {
83663
+ onNone: () => [],
83664
+ onSome: (carrier) => causeMessagesOf(carrier.cause, depth - 1)
83665
+ })];
83666
+ const causeTextOf$1 = (cause) => liftPredicate(causeMessagesOf(cause, CAUSE_DEPTH).join(": "), is$2(NonEmptyString));
83648
83667
  var ConfigFileNotFoundError = class extends TaggedError()("ConfigFileNotFoundError", { file: String$7 }) {
83649
83668
  exitClass = "ConfigError";
83650
83669
  get message() {
@@ -83666,7 +83685,10 @@ var ConfigFileUnreadableError = class extends TaggedError()("ConfigFileUnreadabl
83666
83685
  }) {
83667
83686
  exitClass = "ConfigError";
83668
83687
  get message() {
83669
- return `Config file is unreadable: ${this.file}`;
83688
+ return match$8(causeTextOf$1(this.cause), {
83689
+ onNone: () => `Config file is unreadable: ${this.file}`,
83690
+ onSome: (cause) => `Config file is unreadable: ${this.file}: ${cause}`
83691
+ });
83670
83692
  }
83671
83693
  };
83672
83694
  var ConfigFileInvalidError = class extends TaggedError()("ConfigFileInvalidError", {
@@ -84574,7 +84596,7 @@ const fileNameOrder = mapInput$2(String$10, (reproducer) => reproducer.fileName)
84574
84596
  const idOrder$3 = mapInput$2(String$10, (reproducer) => reproducer.id);
84575
84597
  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
84598
  const mutantsOf$1 = (report) => flatMap$7(Object.values(report.files), (file) => file.mutants);
84577
- const decide$26 = (command) => {
84599
+ const decide$27 = (command) => {
84578
84600
  const mutants = mutantsOf$1(command.report);
84579
84601
  return match$1(mutants.length === 0, {
84580
84602
  onTrue: () => NoMutantsToReproduce.make({}),
@@ -84585,7 +84607,7 @@ const buildReproducers = Workflow_exports.make({
84585
84607
  command: BuildReproducersCommand,
84586
84608
  decision: BuildReproducersDecision,
84587
84609
  error: Never,
84588
- decide: (command) => succeed$10(decide$26(command))
84610
+ decide: (command) => succeed$10(decide$27(command))
84589
84611
  });
84590
84612
  //#endregion
84591
84613
  //#region src/checkpoint-mutants.workflow.ts
@@ -84609,7 +84631,7 @@ var CheckpointMutantsCommand = class extends TaggedClass()("CheckpointMutantsCom
84609
84631
  };
84610
84632
  const settledByIdOf = (settled) => fromIterable$4(settled.map((row) => [row.mutant.id, row]));
84611
84633
  const rowOf = (mutant, settledById) => getOrElse$1(get$4(settledById, mutant.id), () => CheckpointPendingMutant.make({ mutant }));
84612
- const decide$25 = (command) => {
84634
+ const decide$26 = (command) => {
84613
84635
  const settledById = settledByIdOf(command.settled);
84614
84636
  return succeed$10(command.plannedMutants.map((mutant) => rowOf(mutant, settledById)));
84615
84637
  };
@@ -84617,7 +84639,7 @@ const checkpointMutants = Workflow_exports.make({
84617
84639
  command: CheckpointMutantsCommand,
84618
84640
  decision: ArraySchema(CheckpointMutantRow),
84619
84641
  error: Never,
84620
- decide: decide$25
84642
+ decide: decide$26
84621
84643
  });
84622
84644
  //#endregion
84623
84645
  //#region src/classify-exit.workflow.ts
@@ -84666,7 +84688,7 @@ const verdictExitClass = (score, breakingThreshold) => valueTags(score, {
84666
84688
  onSome: (threshold) => value(percentage < threshold).pipe(when(true, () => "VerdictFail"), when(false, () => null), exhaustive)
84667
84689
  })
84668
84690
  });
84669
- const decide$24 = (command) => match$8(fromNullishOr(verdictExitClass(command.score, command.breakingThreshold)), {
84691
+ const decide$25 = (command) => match$8(fromNullishOr(verdictExitClass(command.score, command.breakingThreshold)), {
84670
84692
  onNone: () => match$8(precedenceOf(command.pending), {
84671
84693
  onNone: () => succeed$10(ExitPassed.make({})),
84672
84694
  onSome: (exitClass) => succeed$10(decisionOf$2(exitClass))
@@ -84677,7 +84699,7 @@ const classifyExit = Workflow_exports.make({
84677
84699
  command: ClassifyExitCommand,
84678
84700
  decision: ClassifyExitDecision,
84679
84701
  error: Never,
84680
- decide: decide$24
84702
+ decide: decide$25
84681
84703
  });
84682
84704
  //#endregion
84683
84705
  //#region src/IncrementalDiff.schema.ts
@@ -90318,7 +90340,7 @@ const logOf = (command, results) => {
90318
90340
  }]
90319
90341
  };
90320
90342
  };
90321
- const decide$23 = (command) => {
90343
+ const decide$24 = (command) => {
90322
90344
  const surfaced = surfacedOf(command);
90323
90345
  const results = take$2(surfaced, command.maxResults);
90324
90346
  const log = logOf(command, results);
@@ -90334,7 +90356,7 @@ const sarifReport = Workflow_exports.make({
90334
90356
  command: SarifReportCommand,
90335
90357
  decision: SarifReportDecision,
90336
90358
  error: Never,
90337
- decide: (command) => succeed$10(decide$23(command))
90359
+ decide: (command) => succeed$10(decide$24(command))
90338
90360
  });
90339
90361
  //#endregion
90340
90362
  //#region src/cap-survivors.workflow.ts
@@ -90456,7 +90478,7 @@ const linesOf = (command) => {
90456
90478
  onFalse: () => flatMap$7(toArray(get$4(byId, ref.id)), (entry) => [lineOf(entry)])
90457
90479
  }));
90458
90480
  };
90459
- const decide$22 = (command) => {
90481
+ const decide$23 = (command) => {
90460
90482
  const lines = linesOf(command);
90461
90483
  return match$1(length(lines) === 0, {
90462
90484
  onTrue: () => NothingToAnnotate.make({ survivorCount: length(command.survivors) }),
@@ -90467,7 +90489,7 @@ const renderAnnotations = Workflow_exports.make({
90467
90489
  command: RenderAnnotationsCommand,
90468
90490
  decision: RenderAnnotationsDecision,
90469
90491
  error: Never,
90470
- decide: (command) => succeed$10(decide$22(command))
90492
+ decide: (command) => succeed$10(decide$23(command))
90471
90493
  });
90472
90494
  //#endregion
90473
90495
  //#region src/surfacing.ts
@@ -96092,7 +96114,7 @@ var WorkerCrashed = class extends TaggedClass()("WorkerCrashed", {
96092
96114
  };
96093
96115
  const ClassifyWorkerExitDecision = Union([WorkerOutOfMemory, WorkerCrashed]);
96094
96116
  const OutOfMemoryExitCode = Literals$3([134, 137]);
96095
- const decide$21 = (command) => match$1(is$2(OutOfMemoryExitCode)(command.exitCode), {
96117
+ const decide$22 = (command) => match$1(is$2(OutOfMemoryExitCode)(command.exitCode), {
96096
96118
  onTrue: () => succeed$10(WorkerOutOfMemory.make({
96097
96119
  pid: command.pid,
96098
96120
  exitCode: command.exitCode
@@ -96106,7 +96128,7 @@ const classifyWorkerExit = Workflow_exports.make({
96106
96128
  command: ClassifyWorkerExitCommand,
96107
96129
  decision: ClassifyWorkerExitDecision,
96108
96130
  error: Never,
96109
- decide: decide$21
96131
+ decide: decide$22
96110
96132
  });
96111
96133
  //#endregion
96112
96134
  //#region src/git-diff.schema.ts
@@ -97099,7 +97121,7 @@ const updated = (command) => BudgetWithin.make({ baseline: BudgetBaseline.make({
97099
97121
  actualSeconds: command.actualSeconds
97100
97122
  }) });
97101
97123
  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, {
97124
+ const decide$21 = (command) => match$1(command.updateBaseline, {
97103
97125
  onTrue: () => succeed$10(updated(command)),
97104
97126
  onFalse: () => match$8(fromNullishOr(command.baseline), {
97105
97127
  onNone: () => fail$8(baselineUnusable$1(command.baselineFile)),
@@ -97110,7 +97132,7 @@ const budgetGate = Workflow_exports.make({
97110
97132
  command: BudgetGateCommand,
97111
97133
  decision: BudgetGateDecision,
97112
97134
  error: Union([BudgetExceeded, BudgetInputUnusable]),
97113
- decide: decide$20
97135
+ decide: decide$21
97114
97136
  });
97115
97137
  //#endregion
97116
97138
  //#region src/cli-route-fields.ts
@@ -97244,7 +97266,7 @@ const mismatchesOf = (command) => {
97244
97266
  const noise = fromIterable$2(command.noise);
97245
97267
  return [...fromIterable$2([...idsOf(command.baseline), ...idsOf(command.fresh)])].filter((id) => !has$1(noise, id)).sort().flatMap((id) => toArray(mismatchAt(id, baseline, fresh)));
97246
97268
  };
97247
- const decide$19 = (command) => {
97269
+ const decide$20 = (command) => {
97248
97270
  const mismatches = mismatchesOf(command);
97249
97271
  return match$8(fromUndefinedOr(mismatches[0]), {
97250
97272
  onNone: () => succeed$10(VerdictsMatch.make({})),
@@ -97255,7 +97277,7 @@ const compareVerdicts = Workflow_exports.make({
97255
97277
  command: CompareVerdictsCommand,
97256
97278
  decision: VerdictsMatch,
97257
97279
  error: VerdictsDiffer,
97258
- decide: decide$19
97280
+ decide: decide$20
97259
97281
  });
97260
97282
  //#endregion
97261
97283
  //#region src/Feedback/Feedback.schema.ts
@@ -97441,7 +97463,7 @@ const verdictOf = (command) => match$8(fromNullishOr(command.committed), {
97441
97463
  onNone: () => fail$8(baselineUnusable(command.baselineFile)),
97442
97464
  onSome: (committed) => clearedOrRejected(command, committed)
97443
97465
  });
97444
- const decide$18 = (command) => match$1(command.updateBaseline, {
97466
+ const decide$19 = (command) => match$1(command.updateBaseline, {
97445
97467
  onTrue: () => succeed$10(clearedForUpdate(command)),
97446
97468
  onFalse: () => verdictOf(command)
97447
97469
  });
@@ -97449,7 +97471,7 @@ const gateNewSurvivors = Workflow_exports.make({
97449
97471
  command: GateNewSurvivorsCommand,
97450
97472
  decision: GateNewSurvivorsDecision,
97451
97473
  error: Union([GateRejected, GateInputUnusable]),
97452
- decide: decide$18
97474
+ decide: decide$19
97453
97475
  });
97454
97476
  //#endregion
97455
97477
  //#region ../../node_modules/.pnpm/effect@4.0.0/node_modules/effect/dist/ai/AiError.js
@@ -104588,12 +104610,12 @@ const splitOf = (details, checkerCount) => match$1(checkerCount > 0, {
104588
104610
  announcement: details.announcement
104589
104611
  })
104590
104612
  });
104591
- const decide$17 = (command) => succeed$10(splitOf(detailsOf(command.concurrency, command.availableParallelism), command.checkerCount));
104613
+ const decide$18 = (command) => succeed$10(splitOf(detailsOf(command.concurrency, command.availableParallelism), command.checkerCount));
104592
104614
  const resolveConcurrency = Workflow_exports.make({
104593
104615
  command: ResolveConcurrency,
104594
104616
  decision: ConcurrencySplit,
104595
104617
  error: Never,
104596
- decide: decide$17
104618
+ decide: decide$18
104597
104619
  });
104598
104620
  //#endregion
104599
104621
  //#region src/concurrency.cell.ts
@@ -104808,7 +104830,7 @@ const discardOf = (reason, actual, expected) => IncrementalReportDiscard.make({
104808
104830
  actual,
104809
104831
  expected
104810
104832
  });
104811
- const decide$16 = (command) => match$8(fromUndefinedOr(command.report), {
104833
+ const decide$17 = (command) => match$8(fromUndefinedOr(command.report), {
104812
104834
  onNone: () => discardOf("noPriorRecord", void 0, command.expectedIncrementalVersion),
104813
104835
  onSome: (report) => match$8(firstSomeOf(identityMismatchesOf(command, report).map(mismatchOptionOf)), {
104814
104836
  onNone: () => IncrementalReportKeep.make({ report }),
@@ -104819,7 +104841,7 @@ const admitIncrementalReport = Workflow_exports.make({
104819
104841
  command: AdmitIncrementalReportCommand,
104820
104842
  decision: Union([IncrementalReportKeep, IncrementalReportDiscard]),
104821
104843
  error: Never,
104822
- decide: (command) => succeed$10(decide$16(command))
104844
+ decide: (command) => succeed$10(decide$17(command))
104823
104845
  });
104824
104846
  //#endregion
104825
104847
  //#region src/git-diff.workflow.ts
@@ -105749,7 +105771,7 @@ const decideComplete = (command) => value({
105749
105771
  failedTests
105750
105772
  }))), when({ outcome: "passed" }, ({ testCount }) => succeed$10(DryRunPassed.make({ testCount }))), exhaustive);
105751
105773
  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({
105774
+ const decide$16 = (command) => value(command.status).pipe(when("Error", () => fail$8(DryRunError.make({
105753
105775
  stage: "dryRun",
105754
105776
  reason: reasonOrDefault(command.errorMessage, "Dry run error")
105755
105777
  }))), when("Timeout", () => fail$8(DryRunError.make({
@@ -105760,7 +105782,7 @@ const dryRun = Workflow_exports.make({
105760
105782
  command: DryRunCommand,
105761
105783
  decision: Union([DryRunPassed, DryRunFailed]),
105762
105784
  error: DryRunError,
105763
- decide: decide$15
105785
+ decide: decide$16
105764
105786
  });
105765
105787
  //#endregion
105766
105788
  //#region src/import-closure.schema.ts
@@ -105822,12 +105844,12 @@ const closureOf = (command, testFile) => {
105822
105844
  open: closureOpen(command, files, testFile)
105823
105845
  });
105824
105846
  };
105825
- const decide$14 = (command) => succeed$10(command.testFiles.map((testFile) => closureOf(command, testFile)));
105847
+ const decide$15 = (command) => succeed$10(command.testFiles.map((testFile) => closureOf(command, testFile)));
105826
105848
  const importClosure = Workflow_exports.make({
105827
105849
  command: ImportClosureCommand,
105828
105850
  decision: ArraySchema(TestFileClosure),
105829
105851
  error: Never,
105830
- decide: decide$14
105852
+ decide: decide$15
105831
105853
  });
105832
105854
  //#endregion
105833
105855
  //#region src/import-closure.cell.ts
@@ -106239,7 +106261,7 @@ const failedTestSummariesOf = (tests) => tests.filter((test) => test.status ===
106239
106261
  name: test.name,
106240
106262
  failureMessage: test.failureMessage
106241
106263
  }));
106242
- const decide$13 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => succeed$10(DryRunObservedComplete.make({
106264
+ const decide$14 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => succeed$10(DryRunObservedComplete.make({
106243
106265
  testCount: complete.tests.length,
106244
106266
  failedTestCount: complete.tests.filter((test) => test.status === "failed").length,
106245
106267
  failedTests: failedTestSummariesOf(complete.tests)
@@ -106255,7 +106277,7 @@ const interpretDryRunObservation = Workflow_exports.make({
106255
106277
  DryRunObservedTimedOut
106256
106278
  ]),
106257
106279
  error: Never,
106258
- decide: decide$13
106280
+ decide: decide$14
106259
106281
  });
106260
106282
  //#endregion
106261
106283
  //#region src/PluginsError.schema.ts
@@ -106387,7 +106409,7 @@ const executedTestsOf$1 = (tests) => tests.filter((test) => test.status !== "ski
106387
106409
  timeSpentMs: test.timeSpentMs
106388
106410
  }));
106389
106411
  const firstFailedTestOf = (failed) => fromUndefinedOr(failed.at(0));
106390
- const decide$12 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => {
106412
+ const decide$13 = (command) => value(command.dryRunResult).pipe(discriminator("status")("complete", (complete) => {
106391
106413
  const failed = failedTestsOf(complete.tests);
106392
106414
  const nrOfTests = countedTestsOf(complete.tests);
106393
106415
  const executedTests = executedTestsOf$1(complete.tests);
@@ -106416,7 +106438,7 @@ const interpretDryRunResult = Workflow_exports.make({
106416
106438
  MutantRunTimedOut
106417
106439
  ]),
106418
106440
  error: Never,
106419
- decide: decide$12
106441
+ decide: decide$13
106420
106442
  });
106421
106443
  //#endregion
106422
106444
  //#region src/pooled-test-runner.handle.ts
@@ -106870,12 +106892,12 @@ const resolvedSpawnOf = (command, matches, label) => match$8(workerSourceOf(comm
106870
106892
  }));
106871
106893
  }
106872
106894
  });
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);
106895
+ 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
106896
  const resolveConfiguredPlugin = Workflow_exports.make({
106875
106897
  command: WorkerSpawnCommand,
106876
106898
  decision: WorkerSpawnResolved,
106877
106899
  error: WorkerSpawnMissing,
106878
- decide: decide$11
106900
+ decide: decide$12
106879
106901
  });
106880
106902
  //#endregion
106881
106903
  //#region src/run/dry-run.cell.ts
@@ -107250,7 +107272,7 @@ var EphemeralInstrument = class extends TaggedClass()("EphemeralInstrument", {
107250
107272
  }) {
107251
107273
  [InstrumentDecisionTypeId] = InstrumentDecisionTypeId;
107252
107274
  };
107253
- const decide$10 = (command) => value(command.inPlace).pipe(when(true, () => succeed$10(InPlaceInstrument.make({
107275
+ const decide$11 = (command) => value(command.inPlace).pipe(when(true, () => succeed$10(InPlaceInstrument.make({
107254
107276
  workingDirectoryHint: "inPlace",
107255
107277
  backupDirectoryHint: "backup",
107256
107278
  fileCount: command.fileCount
@@ -107262,7 +107284,7 @@ const planInstrumentation = Workflow_exports.make({
107262
107284
  command: InstrumentCommand,
107263
107285
  decision: Union([InPlaceInstrument, EphemeralInstrument]),
107264
107286
  error: Never,
107265
- decide: decide$10
107287
+ decide: decide$11
107266
107288
  });
107267
107289
  //#endregion
107268
107290
  //#region ../../node_modules/.pnpm/@jsr+std__jsonc@1.0.2/node_modules/@jsr/std__jsonc/parse.js
@@ -108076,7 +108098,7 @@ var MutationTestDryRunOnly = class extends TaggedClass()("MutationTestDryRunOnly
108076
108098
  var MutationTestNoTests = class extends TaggedClass()("MutationTestNoTests", {}) {
108077
108099
  [MutationTestDecisionTypeId] = MutationTestDecisionTypeId;
108078
108100
  };
108079
- const decide$9 = (command) => value({
108101
+ const decide$10 = (command) => value({
108080
108102
  invalid: command.testCount < 0,
108081
108103
  dryRunOnly: command.dryRunOnly,
108082
108104
  isZero: command.isZero,
@@ -108096,7 +108118,7 @@ const admitMutationTest = Workflow_exports.make({
108096
108118
  MutationTestNoTests
108097
108119
  ]),
108098
108120
  error: MutationTestError,
108099
- decide: decide$9
108121
+ decide: decide$10
108100
108122
  });
108101
108123
  //#endregion
108102
108124
  //#region src/admit-checker-answer.workflow.ts
@@ -108452,7 +108474,7 @@ const decideCheckedPlan = (mutantId, result, entryIndex) => match$8(liftPredicat
108452
108474
  })
108453
108475
  })
108454
108476
  });
108455
- const decide$8 = (command) => succeed$10(command.checked.map(([mutantId, result], entryIndex) => decideCheckedPlan(mutantId, result, entryIndex)));
108477
+ const decide$9 = (command) => succeed$10(command.checked.map(([mutantId, result], entryIndex) => decideCheckedPlan(mutantId, result, entryIndex)));
108456
108478
  const partitionCheckedPlans = Workflow_exports.make({
108457
108479
  command: PartitionCheckedPlansCommand,
108458
108480
  decision: ArraySchema(Union([
@@ -108461,7 +108483,7 @@ const partitionCheckedPlans = Workflow_exports.make({
108461
108483
  CheckedPlanIgnored
108462
108484
  ])),
108463
108485
  error: Never,
108464
- decide: decide$8
108486
+ decide: decide$9
108465
108487
  });
108466
108488
  //#endregion
108467
108489
  //#region src/Checker/checker-pool.handle.ts
@@ -108817,7 +108839,7 @@ const decideChanged = (command) => {
108817
108839
  const recordsById = recordsByIdOf(command.previousRecords);
108818
108840
  return command.currentMutants.map((mutant) => decideForMutant(mutant, command, recordsById));
108819
108841
  };
108820
- const decide$7 = (command) => match$1(command.force, {
108842
+ const decide$8 = (command) => match$1(command.force, {
108821
108843
  onTrue: () => succeed$10(command.currentMutants.map(forcedRun)),
108822
108844
  onFalse: () => succeed$10(decideChanged(command))
108823
108845
  });
@@ -108825,7 +108847,7 @@ const incrementalDiff = Workflow_exports.make({
108825
108847
  command: IncrementalDiffCommand,
108826
108848
  decision: ArraySchema(Union([MutantRemembered, MutantToRun])),
108827
108849
  error: Never,
108828
- decide: decide$7
108850
+ decide: decide$8
108829
108851
  });
108830
108852
  //#endregion
108831
108853
  //#region src/report-test-ids.workflow.ts
@@ -108847,12 +108869,12 @@ const testIdsOfFile = (file, testFile) => testFile.tests.map((test) => ReportTes
108847
108869
  }));
108848
108870
  const testIdsOfFiles = (testFiles) => Object.entries(testFiles).flatMap(([file, testFile]) => testIdsOfFile(file, testFile));
108849
108871
  const tableOf = (testFiles) => testIdsOfFiles(getOrElse$1(fromUndefinedOr(testFiles), () => EMPTY_TEST_FILES));
108850
- const decide$6 = (command) => succeed$10(tableOf(command.testFiles));
108872
+ const decide$7 = (command) => succeed$10(tableOf(command.testFiles));
108851
108873
  const reportTestIds = Workflow_exports.make({
108852
108874
  command: ResolveReportTestIds,
108853
108875
  decision: ArraySchema(ReportTestId),
108854
108876
  error: Never,
108855
- decide: decide$6
108877
+ decide: decide$7
108856
108878
  });
108857
108879
  //#endregion
108858
108880
  //#region src/run/incremental-reuse.cell.ts
@@ -109125,7 +109147,7 @@ const decideGuard = (command) => match$1(coveringTestMissing(command), {
109125
109147
  onTrue: () => decideRetry(command),
109126
109148
  onFalse: () => succeed$10(MutantRunSettled.make({}))
109127
109149
  });
109128
- const decide$5 = (command) => match$1(command.wallClockTimeout, {
109150
+ const decide$6 = (command) => match$1(command.wallClockTimeout, {
109129
109151
  onTrue: () => succeed$10(MutantRunPoolInvalidated.make({})),
109130
109152
  onFalse: () => decideGuard(command)
109131
109153
  });
@@ -109138,7 +109160,7 @@ const interpretMutantRun = Workflow_exports.make({
109138
109160
  MutantRunRetryExhausted
109139
109161
  ]),
109140
109162
  error: Never,
109141
- decide: decide$5
109163
+ decide: decide$6
109142
109164
  });
109143
109165
  //#endregion
109144
109166
  //#region src/mutant-run-span.ts
@@ -109609,7 +109631,7 @@ const missingHitCountIds = (command) => openMutantsOf(command.mutants).flatMap((
109609
109631
  onFalse: () => []
109610
109632
  }));
109611
109633
  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]), {
109634
+ const decide$5 = (command) => match$8(fromUndefinedOr(missingHitCountIds(command)[0]), {
109613
109635
  onNone: () => plannedMutantsOf(command),
109614
109636
  onSome: (first) => fail$8(CoveredMutantHitCountMissing.make({ missingIds: [first, ...missingHitCountIds(command).slice(1)] }))
109615
109637
  });
@@ -109617,7 +109639,7 @@ const planMutantTests = Workflow_exports.make({
109617
109639
  command: MutantTestPlanCommand,
109618
109640
  decision: ArraySchema(Union([PlannedRunMutant, PlannedEarlyResultMutant])),
109619
109641
  error: Union([CoveredMutantHitCountMissing, MutantTimeoutNotFinite]),
109620
- decide: decide$4
109642
+ decide: decide$5
109621
109643
  });
109622
109644
  //#endregion
109623
109645
  //#region src/materialize-mutant-plans.workflow.ts
@@ -109728,12 +109750,12 @@ const earlyResultPlanOf = (mutant, early) => ({
109728
109750
  coveredBy: early.coveredBy
109729
109751
  })
109730
109752
  });
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);
109753
+ 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
109754
  const materializeMutantPlans = Workflow_exports.make({
109733
109755
  command: MaterializeMutantPlanCommand,
109734
109756
  decision: Union([MutantRunPlanMaterialized, MutantEarlyResultPlanMaterialized]),
109735
109757
  error: Never,
109736
- decide: decide$3
109758
+ decide: decide$4
109737
109759
  });
109738
109760
  //#endregion
109739
109761
  //#region src/MutantsError.schema.ts
@@ -109767,12 +109789,12 @@ const orderedOf = (plans) => [...plans].sort(comparePlans).map((plan) => Ordered
109767
109789
  netTime: plan.netTime,
109768
109790
  reloadEnvironment: plan.reloadEnvironment
109769
109791
  }));
109770
- const decide$2 = (command) => succeed$10(orderedOf(command.plans));
109792
+ const decide$3 = (command) => succeed$10(orderedOf(command.plans));
109771
109793
  const sortRunPlans = Workflow_exports.make({
109772
109794
  command: SortRunPlans,
109773
109795
  decision: ArraySchema(OrderedRunPlan),
109774
109796
  error: Never,
109775
- decide: decide$2
109797
+ decide: decide$3
109776
109798
  });
109777
109799
  //#endregion
109778
109800
  //#region src/run/mutation-test-plan.cell.ts
@@ -110311,7 +110333,7 @@ const optInRefusalOf = (index, command) => match$8(refusedNameIn(index.optIn, co
110311
110333
  name
110312
110334
  }))
110313
110335
  });
110314
- const decide$1 = (command) => {
110336
+ const decide$2 = (command) => {
110315
110337
  const index = indexOf(command.catalogs);
110316
110338
  return map$12(flatMap$8(excludedRefusalOf(index, command), () => optInRefusalOf(index, command)), () => MutatorSelectionDecoded.make({
110317
110339
  excludedMutations: [...command.excludedMutations],
@@ -110322,7 +110344,7 @@ const decodeMutatorSelection = Workflow_exports.make({
110322
110344
  command: DecodeMutatorSelectionCommand,
110323
110345
  decision: MutatorSelectionDecoded,
110324
110346
  error: MutatorSelectionRefused,
110325
- decide: decide$1
110347
+ decide: decide$2
110326
110348
  });
110327
110349
  //#endregion
110328
110350
  //#region src/framework-claimant.service.ts
@@ -110857,12 +110879,12 @@ var KeepTempDirCommand = class extends TaggedClass()("KeepTempDirCommand", {
110857
110879
  static [Workflow_exports.InstrumentationBrand] = {};
110858
110880
  };
110859
110881
  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);
110882
+ 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
110883
  const keepTempDir = Workflow_exports.make({
110862
110884
  command: KeepTempDirCommand,
110863
110885
  decision: Union([TempDirKept, TempDirRemoved]),
110864
110886
  error: Never,
110865
- decide
110887
+ decide: decide$1
110866
110888
  });
110867
110889
  //#endregion
110868
110890
  //#region src/Sandbox.service.ts
@@ -111370,7 +111392,7 @@ const prepareCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.prepare.na
111370
111392
  });
111371
111393
  //#endregion
111372
111394
  //#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"));
111395
+ const configReadReasonOf = (cause) => cause.message;
111374
111396
  const mutationTestCell = Cell_exports.andThen(Cell_exports.andThen(Cell_exports.andThen(Cell_exports.andThen(Cell_exports.mapError(loadConfigCell, (cause) => StageError.make({
111375
111397
  stage: "prepare",
111376
111398
  reason: configReadReasonOf(cause),
@@ -112898,15 +112920,50 @@ const loadShardPlan = dual(2, (basePath, file) => gen(function* () {
112898
112920
  };
112899
112921
  }));
112900
112922
  //#endregion
112923
+ //#region src/shard/settle-shard-child.workflow.ts
112924
+ const SettleShardChildTypeId = Symbol.for("@systemfsoftware/stryker-js/SettleShardChild");
112925
+ const COMPLETED_CODE = 0;
112926
+ const verdictFailCode = getOrUndefined$1(decodeOption(Plugin_exports.ExitCodeFromClass)("VerdictFail"));
112927
+ var SettleShardChildCommand = class extends TaggedClass()("SettleShardChildCommand", { exitCode: Int$4 }) {
112928
+ static [Workflow_exports.InstrumentationBrand] = {};
112929
+ };
112930
+ var ShardChildCompleted = class extends TaggedClass()("ShardChildCompleted", {}) {
112931
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
112932
+ };
112933
+ var ShardChildVerdictFailed = class extends TaggedClass()("ShardChildVerdictFailed", {}) {
112934
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
112935
+ };
112936
+ var ShardChildAborted = class extends TaggedClass()("ShardChildAborted", { exitCode: Int$4 }) {
112937
+ [SettleShardChildTypeId] = SettleShardChildTypeId;
112938
+ };
112939
+ const SettleShardChildDecision = Union([
112940
+ ShardChildCompleted,
112941
+ ShardChildVerdictFailed,
112942
+ ShardChildAborted
112943
+ ]);
112944
+ const decide = (command) => match$1(command.exitCode === COMPLETED_CODE, {
112945
+ onTrue: () => succeed$10(ShardChildCompleted.make({})),
112946
+ onFalse: () => match$1(command.exitCode === verdictFailCode, {
112947
+ onTrue: () => succeed$10(ShardChildVerdictFailed.make({})),
112948
+ onFalse: () => succeed$10(ShardChildAborted.make({ exitCode: command.exitCode }))
112949
+ })
112950
+ });
112951
+ const settleShardChild = Workflow_exports.make({
112952
+ command: SettleShardChildCommand,
112953
+ decision: SettleShardChildDecision,
112954
+ error: Never,
112955
+ decide
112956
+ });
112957
+ //#endregion
112901
112958
  //#region src/shard/shard-run.schema.ts
112902
112959
  var ShardChildFailed = class extends TaggedError()("ShardChildFailed", {
112903
112960
  project: String$7,
112904
112961
  exitCode: Int$4,
112905
- reason: String$7
112962
+ childOutput: String$7
112906
112963
  }) {
112907
112964
  exitClass = "RuntimeError";
112908
112965
  get message() {
112909
- return `shard child for ${this.project} failed with exit code ${this.exitCode}: ${this.reason}`;
112966
+ return `shard child for ${this.project} failed with exit code ${this.exitCode}: ${this.childOutput}`;
112910
112967
  }
112911
112968
  };
112912
112969
  //#endregion
@@ -112914,7 +112971,6 @@ var ShardChildFailed = class extends TaggedError()("ShardChildFailed", {
112914
112971
  const SHARD_OUT_MARKER = "reports/shards";
112915
112972
  const STREAM_FILE = "mutation-stream.jsonl";
112916
112973
  const INCREMENTAL_FILE = "stryker-incremental.json";
112917
- const STDERR_LIMIT = 4096;
112918
112974
  const childArgsOf = (input, project, projectOut, path) => [
112919
112975
  globalThis.process.argv[1] ?? "",
112920
112976
  "run",
@@ -112938,6 +112994,13 @@ const seedIncremental = (path, fs, projectDir, projectOut) => gen(function* () {
112938
112994
  const hasTarget = yield* fs.exists(target);
112939
112995
  yield* when$2(fs.copyFile(cached, target), succeed$5(hasCached && !hasTarget));
112940
112996
  });
112997
+ const settlementOf$1 = (exitCode) => getOrElse(settleShardChild(SettleShardChildCommand.make({ exitCode })), (neverError) => neverError);
112998
+ const subThresholdLine = (project) => `stryker shard: ${project} scored below thresholds.break over this shard's mutants; the merged report carries the project verdict`;
112999
+ const missingStreamFailure = (project, exitCode, streamFile) => ShardChildFailed.make({
113000
+ project,
113001
+ exitCode,
113002
+ childOutput: `the shard child completed without leaving its progress stream at ${streamFile}`
113003
+ });
112941
113004
  const runShard = (input) => gen(function* () {
112942
113005
  const selected = yield* fromResult(selectShard(SelectShardCommand.make({
112943
113006
  plan: input.plan,
@@ -112950,6 +113013,7 @@ const runShard = (input) => gen(function* () {
112950
113013
  yield* forEach$1(selected.projects, (project) => gen(function* () {
112951
113014
  const projectDir = path.resolve(input.planDirectory, project.project);
112952
113015
  const projectOut = path.join(outDir, project.project);
113016
+ const streamFile = path.join(projectOut, STREAM_FILE);
112953
113017
  yield* fs.makeDirectory(projectOut, { recursive: true });
112954
113018
  yield* seedIncremental(path, fs, projectDir, projectOut);
112955
113019
  const handle = yield* spawner.spawn(make$14(globalThis.process.execPath, childArgsOf(input, project.project, projectOut, path), {
@@ -112961,15 +113025,17 @@ const runShard = (input) => gen(function* () {
112961
113025
  }));
112962
113026
  const stderr = yield* handle.stderr.pipe(decodeText$1, mkString);
112963
113027
  const exitCode = Number(yield* handle.exitCode);
112964
- yield* exitCode === 0 ? void_$1 : fail$4(ShardChildFailed.make({
113028
+ yield* value(settlementOf$1(exitCode)).pipe(tag("ShardChildCompleted", () => void_$1), tag("ShardChildVerdictFailed", () => logInfo(subThresholdLine(project.project))), tag("ShardChildAborted", () => fail$4(ShardChildFailed.make({
112965
113029
  project: project.project,
112966
113030
  exitCode,
112967
- reason: stderr.slice(0, STDERR_LIMIT)
112968
- }));
113031
+ childOutput: stderr.slice(-4096)
113032
+ }))), exhaustive);
113033
+ const streamPresent = yield* fs.exists(streamFile);
113034
+ yield* value(streamPresent).pipe(when(true, () => void_$1), when(false, () => fail$4(missingStreamFailure(project.project, exitCode, streamFile))), exhaustive);
112969
113035
  }).pipe(catchTag("PlatformError", (cause) => fail$4(ShardChildFailed.make({
112970
113036
  project: project.project,
112971
113037
  exitCode: -1,
112972
- reason: cause.message
113038
+ childOutput: cause.message
112973
113039
  })))), {
112974
113040
  concurrency: 1,
112975
113041
  discard: true
@@ -113104,10 +113170,10 @@ const runBudgetGate = (gate, report, basePath) => forEach$1(toArray(fromUndefine
113104
113170
  }), { discard: true });
113105
113171
  const reportUnchecked = (unchecked) => logInfo(`stryker gate: ${unchecked.length} mutant(s) unchecked (in scope with no verdict)`);
113106
113172
  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), {
113173
+ const remediateGateRefusal = (failure) => match$1(is$2(BudgetExceeded)(failure) || is$2(BudgetInputUnusable)(failure), {
113108
113174
  onTrue: () => void_$1,
113109
113175
  onFalse: () => logInfo(GATE_REMEDIATION_LINE)
113110
- }));
113176
+ });
113111
113177
  const gateReport = (gate, channel) => gen(function* () {
113112
113178
  const path = yield* Path$1;
113113
113179
  const basePath = channel.environment.basePath;
@@ -113204,7 +113270,7 @@ const runRequestCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runRequ
113204
113270
  });
113205
113271
  }),
113206
113272
  CliCompareRequested: (compare) => compareReports(compare),
113207
- CliGateRequested: (gate, channel) => gateReport(gate, channel).pipe(tapError(explainGateRefusal)),
113273
+ CliGateRequested: (gate, channel) => gateReport(gate, channel).pipe(tapError(remediateGateRefusal)),
113208
113274
  CliAnnotateRequested: (annotate, channel) => annotateReport(annotate, channel),
113209
113275
  CliPlanRequested: (plan, channel) => planRequest({
113210
113276
  request: plan,
@@ -113215,7 +113281,7 @@ const runRequestCell = Sandwich_exports.named(SpanTaxonomy_exports.Spans.runRequ
113215
113281
  CliServeRequested: (serve, channel) => serveMutationServer(serveRequestOf(serve, channel.options)).pipe(scoped$3),
113216
113282
  CliRunRequested: (_, channel) => runStage(channel),
113217
113283
  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 }))),
113284
+ CliRerunRequested: (rerun, channel) => mutantRerunAdmissionCell.run(rerunInputOf(channel, rerun.ids)),
113219
113285
  CommandRejected: ({ issue }) => fail$4(StrykerError.make({ message: `the CLI read resolved a command the route schema rejects: ${issue}` }))
113220
113286
  });
113221
113287
  //#endregion
@@ -113696,6 +113762,13 @@ const servedInvocation = (argv) => exists$1(fromUndefinedOr(argv.find((argument)
113696
113762
  const SPAN_ERROR_LIMIT = 1024;
113697
113763
  const TRUNCATION_SUFFIX = "…[truncated]";
113698
113764
  const boundedErrorText = (text) => text.length > SPAN_ERROR_LIMIT ? text.slice(0, SPAN_ERROR_LIMIT) + TRUNCATION_SUFFIX : text;
113765
+ const failureTextOf = (failure, captured) => {
113766
+ const envelope = errorEnvelopeFromOutcome({
113767
+ error: failure,
113768
+ captured
113769
+ });
113770
+ 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}`));
113771
+ };
113699
113772
  const strykerProgram = gen(function* () {
113700
113773
  const args = [...yield* (yield* Stdio).args];
113701
113774
  const probeMode = gen(function* () {
@@ -113747,10 +113820,7 @@ const strykerProgram = gen(function* () {
113747
113820
  const outcome = classifyRunOutcome(conclusionCommand);
113748
113821
  const classified = getOrElse(outcome, (interrupted) => interrupted);
113749
113822
  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)), () => "");
113823
+ const errorText = getOrElse$1(map$13(liftPredicate(is$2(FailedRunOutcomeSchema))(classified), (failure) => failureTextOf(failure, machineConsoleService.read())), () => "");
113754
113824
  yield* annotateCurrentSpan({
113755
113825
  "stryker.run.outcome": classified._tag,
113756
113826
  "stryker.run.exit_code": runExitCodeFromOutcome(classified).code,
package/dist/promises.mjs CHANGED
@@ -1,4 +1,4 @@
1
- import { C as nodePlatformLayer, t as strykerCell } from "./run-stages-k4L7ymmp.mjs";
1
+ import { C as nodePlatformLayer, t as strykerCell } from "./run-stages-DYuRm353.mjs";
2
2
  import * as Effect from "effect/Effect";
3
3
  import { dual } from "effect/Function";
4
4
  //#region src/drivers/promise.ts
@@ -2154,6 +2154,13 @@ const createDefaultOptions = S.decodeEffect(Options_exports.StrykerOptionsSchema
2154
2154
  const defaultOptions = Effect$1.map(createDefaultOptions, (options) => deepFreeze(options));
2155
2155
  //#endregion
2156
2156
  //#region src/ConfigError.schema.ts
2157
+ const CAUSE_DEPTH = 4;
2158
+ const ownMessageOf = (value) => Option$1.filter(Option$1.map(Option$1.liftPredicate(value, Predicate$1.hasProperty("message")), (carrier) => String(carrier.message)), S.is(S.NonEmptyString));
2159
+ const causeMessagesOf = (value, depth) => depth === 0 ? [] : [...Option$1.toArray(ownMessageOf(value)), ...Option$1.match(Option$1.liftPredicate(value, Predicate$1.hasProperty("cause")), {
2160
+ onNone: () => [],
2161
+ onSome: (carrier) => causeMessagesOf(carrier.cause, depth - 1)
2162
+ })];
2163
+ const causeTextOf$1 = (cause) => Option$1.liftPredicate(causeMessagesOf(cause, CAUSE_DEPTH).join(": "), S.is(S.NonEmptyString));
2157
2164
  var ConfigFileNotFoundError = class extends S.TaggedError()("ConfigFileNotFoundError", { file: S.String }) {
2158
2165
  exitClass = "ConfigError";
2159
2166
  get message() {
@@ -2175,7 +2182,10 @@ var ConfigFileUnreadableError = class extends S.TaggedError()("ConfigFileUnreada
2175
2182
  }) {
2176
2183
  exitClass = "ConfigError";
2177
2184
  get message() {
2178
- return `Config file is unreadable: ${this.file}`;
2185
+ return Option$1.match(causeTextOf$1(this.cause), {
2186
+ onNone: () => `Config file is unreadable: ${this.file}`,
2187
+ onSome: (cause) => `Config file is unreadable: ${this.file}: ${cause}`
2188
+ });
2179
2189
  }
2180
2190
  };
2181
2191
  var ConfigFileInvalidError = class extends S.TaggedError()("ConfigFileInvalidError", {
@@ -11336,7 +11346,7 @@ const strykerOutputFilesOf = (options) => [
11336
11346
  ];
11337
11347
  //#endregion
11338
11348
  //#region package.json
11339
- var version = "16.0.0";
11349
+ var version = "16.0.1";
11340
11350
  //#endregion
11341
11351
  //#region src/stryker-package.schema.ts
11342
11352
  var StrykerPackage = class extends S.Class("StrykerPackage")({
@@ -20349,7 +20359,7 @@ const prepareCell = Sandwich.named(SpanTaxonomy_exports.Spans.prepare.name)(read
20349
20359
  });
20350
20360
  //#endregion
20351
20361
  //#region src/run/run-stages.cell.ts
20352
- const configReadReasonOf = (cause) => Match$1.value(cause).pipe(Match$1.tag("ConfigError", (refused) => refused.message), Match$1.orElse(() => "Failed to read config"));
20362
+ const configReadReasonOf = (cause) => cause.message;
20353
20363
  const mutationTestCell = Cell.andThen(Cell.andThen(Cell.andThen(Cell.andThen(Cell.mapError(loadConfigCell, (cause) => StageError.make({
20354
20364
  stage: "prepare",
20355
20365
  reason: configReadReasonOf(cause),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@systemfsoftware/stryker-js",
3
- "version": "16.0.0",
3
+ "version": "16.0.1",
4
4
  "repository": {
5
5
  "type": "git",
6
6
  "url": "git+https://github.com/systemfsoftware/stryker-js-effect.git",
@@ -72,14 +72,14 @@
72
72
  "vitest": "^5",
73
73
  "@systemfsoftware/stryker-config": "^0.1.0",
74
74
  "@systemfsoftware/stryker-framework-interface": "^0.0.0",
75
- "@systemfsoftware/stryker-js-cli-contract": "^0.3.0",
76
75
  "@systemfsoftware/stryker-ignorer-interface": "^0.1.1",
76
+ "@systemfsoftware/stryker-js-cli-contract": "^0.3.0",
77
+ "@systemfsoftware/stryker-js-plugin-interface": "^13.0.0",
77
78
  "@systemfsoftware/stryker-js-html-reporter": "^6.0.1",
78
- "@systemfsoftware/stryker-js-instrumenter": "^12.1.0",
79
79
  "@systemfsoftware/stryker-js-plugin-runtime": "^7.0.1",
80
- "@systemfsoftware/stryker-js-plugin-interface": "^13.0.0",
81
80
  "@systemfsoftware/tsdown-config": "^0.1.0",
82
- "@systemfsoftware/vitest-config": "^0.1.0"
81
+ "@systemfsoftware/vitest-config": "^0.1.0",
82
+ "@systemfsoftware/stryker-js-instrumenter": "^12.1.0"
83
83
  },
84
84
  "publishConfig": {
85
85
  "access": "public",