fallow 3.35.0 → 3.37.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.
@@ -164,6 +164,10 @@ export type AuditWorsened = ("warn" | "error" | "off")
164
164
  * is decided here.
165
165
  */
166
166
  export type GateStatus = ("pass" | "warn" | "fail" | "skipped")
167
+ /**
168
+ * Why a file counts for the `parse-error` gate, other than a parser error.
169
+ */
170
+ export type GateFileReason = "nesting-too-deep"
167
171
  /**
168
172
  * Analysis mode stored with baselines, snapshots, audit sides, and impact data.
169
173
  */
@@ -411,6 +415,7 @@ export type PolicyViolationSeverity = ("error" | "warn")
411
415
  * The origin of a stale suppression: inline comment or JSDoc tag.
412
416
  */
413
417
  export type SuppressionOrigin = ({
418
+ type: "comment"
414
419
  /**
415
420
  * The issue kind token from the comment (e.g., "unused-exports"), or None for blanket.
416
421
  */
@@ -432,8 +437,8 @@ is_file_level: boolean
432
437
  * adopted the field stay byte-compatible. See issue #449.
433
438
  */
434
439
  kind_known?: boolean
435
- type: "comment"
436
440
  } | {
441
+ type: "jsdoc_tag"
437
442
  /**
438
443
  * The name of the export that was tagged.
439
444
  */
@@ -442,7 +447,6 @@ export_name: string
442
447
  * Human-authored reason after `--`, when present.
443
448
  */
444
449
  reason?: (string | null)
445
- type: "jsdoc_tag"
446
450
  })
447
451
  /**
448
452
  * Where an override entry was declared. Serialized as the filename label
@@ -564,66 +568,67 @@ degrades_analysis?: boolean
564
568
  export type WorkspaceDiagnostic1 = ({
565
569
  kind: "undeclared-workspace"
566
570
  } | {
571
+ kind: "malformed-package-json"
567
572
  /**
568
573
  * `serde_json` parse error text.
569
574
  */
570
575
  error: string
571
- kind: "malformed-package-json"
572
576
  } | {
577
+ kind: "glob-matched-no-package-json"
573
578
  /**
574
579
  * The glob pattern that matched the directory.
575
580
  */
576
581
  pattern: string
577
- kind: "glob-matched-no-package-json"
578
582
  } | {
583
+ kind: "workspace-glob-outside-root"
579
584
  /**
580
585
  * The workspace entry, as written in the file.
581
586
  */
582
587
  pattern: string
583
- kind: "workspace-glob-outside-root"
584
588
  } | {
589
+ kind: "workspace-pattern-dir-missing"
585
590
  /**
586
591
  * The workspace pattern, as written in the file.
587
592
  */
588
593
  pattern: string
589
- kind: "workspace-pattern-dir-missing"
590
594
  } | {
591
595
  kind: "nested-project-root"
592
596
  } | {
597
+ kind: "malformed-tsconfig"
593
598
  /**
594
599
  * JSONC parse error text.
595
600
  */
596
601
  error: string
597
- kind: "malformed-tsconfig"
598
602
  } | {
599
603
  kind: "tsconfig-reference-dir-missing"
600
604
  } | {
605
+ kind: "malformed-pnpm-workspace-yaml"
601
606
  /**
602
607
  * YAML parse error text.
603
608
  */
604
609
  error: string
605
- kind: "malformed-pnpm-workspace-yaml"
606
610
  } | {
611
+ kind: "skipped-large-file"
607
612
  /**
608
613
  * On-disk size of the skipped file in bytes.
609
614
  */
610
615
  size_bytes: number
611
- kind: "skipped-large-file"
612
616
  } | {
617
+ kind: "skipped-minified-file"
613
618
  /**
614
619
  * On-disk size of the skipped file in bytes.
615
620
  */
616
621
  size_bytes: number
617
- kind: "skipped-minified-file"
618
622
  } | {
619
623
  kind: "skipped-source-dotdir"
620
624
  } | {
625
+ kind: "source-read-failure"
621
626
  /**
622
627
  * Filesystem or UTF-8 decoding error from `read_to_string`.
623
628
  */
624
629
  error: string
625
- kind: "source-read-failure"
626
630
  } | {
631
+ kind: "source-parse-degraded"
627
632
  /**
628
633
  * Number of parser diagnostics reported for the file.
629
634
  */
@@ -633,7 +638,12 @@ error_count: number
633
638
  * the extracted module is a fragment at best.
634
639
  */
635
640
  panicked: boolean
636
- kind: "source-parse-degraded"
641
+ } | {
642
+ kind: "source-nesting-too-deep"
643
+ /**
644
+ * The bracket nesting cap of the pre-parse scan.
645
+ */
646
+ limit: number
637
647
  } | {
638
648
  kind: "bun-lockb-override-resolution-skipped"
639
649
  } | {
@@ -645,8 +655,8 @@ kind: "npm-lock-override-resolution-skipped"
645
655
  } | {
646
656
  kind: "bun-resolutions-shadowed-by-overrides"
647
657
  } | {
648
- cause: PnpmWorkspaceOverridesIgnoredCause
649
658
  kind: "pnpm-workspace-overrides-ignored"
659
+ cause: PnpmWorkspaceOverridesIgnoredCause
650
660
  } | {
651
661
  kind: "node-modules-missing"
652
662
  } | {
@@ -654,6 +664,7 @@ kind: "boundaries-not-configured"
654
664
  } | {
655
665
  kind: "rule-packs-not-configured"
656
666
  } | {
667
+ kind: "excluded-by-default-ignore"
657
668
  /**
658
669
  * The built-in glob that matched, verbatim (for example
659
670
  * `** /build/**`).
@@ -677,22 +688,22 @@ file_count: number
677
688
  * one matched location out of several.
678
689
  */
679
690
  directory_count: number
680
- kind: "excluded-by-default-ignore"
681
691
  } | {
692
+ kind: "no-source-files-analyzed"
682
693
  /**
683
694
  * Candidate source files the built-in ignore patterns removed from
684
695
  * this walk, summed across every pattern. `0` when the walk found no
685
696
  * candidate to exclude in the first place.
686
697
  */
687
698
  excluded_file_count: number
688
- kind: "no-source-files-analyzed"
689
699
  } | {
700
+ kind: "file-scores-unavailable"
690
701
  /**
691
702
  * Scoring error text.
692
703
  */
693
704
  error: string
694
- kind: "file-scores-unavailable"
695
705
  } | {
706
+ kind: "hotspots-skipped"
696
707
  /**
697
708
  * Which input stopped it, as a kebab-case token: `not-a-repository`,
698
709
  * `no-commits`, `invalid-since` or `churn-file-unreadable`. The set is
@@ -706,25 +717,25 @@ kind: "file-scores-unavailable"
706
717
  * remedy for all four.
707
718
  */
708
719
  cause: string
709
- kind: "hotspots-skipped"
710
720
  } | {
721
+ kind: "change-coupling-skipped"
711
722
  /**
712
723
  * Kebab-case token: `shallow-clone` (the fetched history is
713
724
  * incomplete) or `too-few-commits` (fewer analyzed commits than the
714
725
  * minimum revisions of one file). The set is open.
715
726
  */
716
727
  cause: string
717
- kind: "change-coupling-skipped"
718
728
  } | {
729
+ kind: "shallow-clone"
719
730
  /**
720
731
  * `true` when the run also asked for ownership attribution, which a
721
732
  * shallow clone skews further by inflating single-author dominance.
722
733
  */
723
734
  ownership_requested: boolean
724
- kind: "shallow-clone"
725
735
  } | {
726
736
  kind: "unpinned-clock"
727
737
  } | {
738
+ kind: "ownership-unavailable"
728
739
  /**
729
740
  * Which input failed, as a kebab-case token: `invalid-bot-pattern` or
730
741
  * `codeowners-parse-failed`. The set is open.
@@ -734,21 +745,21 @@ cause: string
734
745
  * Underlying error text.
735
746
  */
736
747
  error: string
737
- kind: "ownership-unavailable"
738
748
  } | {
749
+ kind: "trend-snapshot-unreadable"
739
750
  /**
740
751
  * Filesystem or JSON error text.
741
752
  */
742
753
  error: string
743
- kind: "trend-snapshot-unreadable"
744
754
  } | {
755
+ kind: "trend-group-baseline-unavailable"
745
756
  /**
746
757
  * Why the groups have no baseline, as a kebab-case token:
747
758
  * `snapshot-has-no-groups` or `grouped-by-mismatch`. The set is open.
748
759
  */
749
760
  cause: string
750
- kind: "trend-group-baseline-unavailable"
751
761
  } | {
762
+ kind: "plugin-config-unreadable"
752
763
  /**
753
764
  * The plugin that read the config, as it labels itself:
754
765
  * `module-federation` for a standalone `module-federation.config.*`,
@@ -775,8 +786,8 @@ key: string
775
786
  * option the message points at.
776
787
  */
777
788
  reason: string
778
- kind: "plugin-config-unreadable"
779
789
  } | {
790
+ kind: "plugin-effect-not-modeled"
780
791
  /**
781
792
  * The plugin that read the config, as it labels itself (`nuxt`).
782
793
  */
@@ -795,34 +806,51 @@ key: string
795
806
  * be classified at all. The set is open.
796
807
  */
797
808
  reason: string
798
- kind: "plugin-effect-not-modeled"
799
809
  } | {
800
810
  kind: "coverage-auto-detected"
801
811
  } | {
802
812
  kind: "flag-age-shallow-clone"
803
813
  } | {
814
+ kind: "flag-age-unavailable"
804
815
  /**
805
816
  * Why no history is available, as a kebab-case token:
806
817
  * `not-a-repository` or `no-commits`. The set is open.
807
818
  */
808
819
  cause: string
809
- kind: "flag-age-unavailable"
810
820
  } | {
821
+ kind: "ignore-dependencies-glob-unmatched"
811
822
  /**
812
823
  * The `ignoreDependencies` entry, as written in the config.
813
824
  */
814
825
  pattern: string
815
- kind: "ignore-dependencies-glob-unmatched"
816
826
  } | {
827
+ kind: "ignore-findings-pattern-unmatched"
817
828
  /**
818
829
  * The `ignoreFindings` entry, as written in the config.
819
830
  */
820
831
  pattern: string
821
- kind: "ignore-findings-pattern-unmatched"
822
832
  } | {
833
+ kind: "entry-pattern-redundant"
834
+ /**
835
+ * The `entry` pattern, as written in the config.
836
+ */
837
+ pattern: string
838
+ } | {
839
+ kind: "ignore-dependencies-entry-redundant"
840
+ /**
841
+ * The `ignoreDependencies` entry, as written in the config.
842
+ */
843
+ pattern: string
844
+ } | {
845
+ kind: "ignore-patterns-entry-redundant"
846
+ /**
847
+ * The `ignorePatterns` glob, as written in the config.
848
+ */
849
+ pattern: string
850
+ } | {
851
+ kind: "baseline-install-state-mismatch"
823
852
  baseline_node_modules: NodeModulesState
824
853
  run_node_modules: NodeModulesState
825
- kind: "baseline-install-state-mismatch"
826
854
  })
827
855
  /**
828
856
  * Why the declared pnpm version ignores the `overrides` section of
@@ -922,6 +950,15 @@ export type WorsenedMetricKind = ("cyclomatic" | "cognitive" | "crap" | "line_co
922
950
  * Audit-mode reason why a complexity finding does not gate the verdict.
923
951
  */
924
952
  export type AuditGateExemption = "test-file"
953
+ /**
954
+ * How `fallow health` counts cyclomatic complexity for its gates.
955
+ *
956
+ * The policy changes the cyclomatic value that the `maxCyclomatic` gate reads
957
+ * and the cyclomatic value in every CRAP score. It does not change the health
958
+ * score, the complexity density, or the hotspot ranking: those keep the
959
+ * standard count so that grades stay comparable across projects.
960
+ */
961
+ export type CyclomaticPolicy = ("standard" | "literal-membership")
925
962
  /**
926
963
  * Coverage model used for CRAP score computation.
927
964
  */
@@ -1189,12 +1226,13 @@ export type DiffRiskActionType = ("suppress-line" | "suppress-file" | "suppress-
1189
1226
  * `target` block of [`InspectOutput`], tagged by `type`.
1190
1227
  */
1191
1228
  export type InspectTargetDescriptor = ({
1229
+ type: "file"
1192
1230
  /**
1193
1231
  * File path relative to the analysed root.
1194
1232
  */
1195
1233
  file: string
1196
- type: "file"
1197
1234
  } | {
1235
+ type: "symbol"
1198
1236
  /**
1199
1237
  * File path relative to the analysed root.
1200
1238
  */
@@ -1203,7 +1241,6 @@ file: string
1203
1241
  * Name of the inspected export.
1204
1242
  */
1205
1243
  export_name: string
1206
- type: "symbol"
1207
1244
  })
1208
1245
  /**
1209
1246
  * `identity` block of [`InspectOutput`]; shape follows the target type.
@@ -2031,7 +2068,8 @@ files?: GateFile[]
2031
2068
  *
2032
2069
  * Today only `parse-error` emits it. The item carries the same facts as the
2033
2070
  * `source-parse-degraded` entry in `workspace_diagnostics[]` for that file,
2034
- * so a consumer can act on the gate without a join.
2071
+ * so a consumer can act on the gate without a join. With `reason` set, the
2072
+ * count and the parser outcome are placeholders.
2035
2073
  */
2036
2074
  export interface GateFile {
2037
2075
  /**
@@ -2039,14 +2077,19 @@ export interface GateFile {
2039
2077
  */
2040
2078
  path: string
2041
2079
  /**
2042
- * The number of parser errors for the file.
2080
+ * The number of parser errors for the file. `1` when `reason` is set.
2043
2081
  */
2044
2082
  error_count: number
2045
2083
  /**
2046
2084
  * True when the parser stopped in the file instead of recovering, so the
2047
- * analysis saw only the part before the error.
2085
+ * analysis saw only the part before the error. `true` when `reason` is set.
2048
2086
  */
2049
2087
  panicked: boolean
2088
+ /**
2089
+ * Why the file counts when it is not a parser error. Absent for a parser
2090
+ * error, the only reason before this field existed.
2091
+ */
2092
+ reason?: (GateFileReason | null)
2050
2093
  }
2051
2094
  /**
2052
2095
  * Metric and rule definitions emitted under `_meta` when `--explain` is
@@ -3431,7 +3474,7 @@ _meta?: (Meta | null)
3431
3474
  * - source discovery, during the file walk: `skipped-large-file`,
3432
3475
  * `skipped-minified-file`, `skipped-source-dotdir`,
3433
3476
  * `excluded-by-default-ignore`, `source-read-failure`,
3434
- * `source-parse-degraded`;
3477
+ * `source-parse-degraded`, `source-nesting-too-deep`;
3435
3478
  * - dead-code analysis, from the dependency-catalog and override
3436
3479
  * detectors: `malformed-pnpm-workspace-yaml`,
3437
3480
  * `bun-lockb-override-resolution-skipped`;
@@ -3450,10 +3493,11 @@ _meta?: (Meta | null)
3450
3493
  *
3451
3494
  * A diagnostic here is advisory and never withholds a finding. Where an
3452
3495
  * entry reports a source file this run never fully analyzed
3453
- * (`source-parse-degraded`, `source-read-failure`, `skipped-large-file`,
3454
- * `skipped-minified-file`, `skipped-source-dotdir`) it can distort a
3455
- * verdict, so the affected `unused_files[]`, `unused_exports[]`, and
3456
- * dependency entries additionally carry the caveat themselves in their own
3496
+ * (`source-parse-degraded`, `source-nesting-too-deep`,
3497
+ * `source-read-failure`, `skipped-large-file`, `skipped-minified-file`,
3498
+ * `skipped-source-dotdir`) it can distort a verdict, so the affected
3499
+ * `unused_files[]`, `unused_exports[]`, and dependency entries
3500
+ * additionally carry the caveat themselves in their own
3457
3501
  * optional `reachability_caveats[]` array, and a reader who never scrolls
3458
3502
  * back up to this list still sees it. `fallow fix` reads the same array
3459
3503
  * and withholds the removal while a caveat stands.
@@ -3513,6 +3557,14 @@ total_issues: number
3513
3557
  * Prop chains whose saved effective severity explicitly enforces error policy.
3514
3558
  */
3515
3559
  prop_drilling_chains?: number
3560
+ /**
3561
+ * Thin wrappers whose saved effective severity explicitly enforces error policy.
3562
+ */
3563
+ thin_wrappers?: number
3564
+ /**
3565
+ * Duplicate prop shapes whose saved effective severity explicitly enforces error policy.
3566
+ */
3567
+ duplicate_prop_shapes?: number
3516
3568
  /**
3517
3569
  * Unused source files.
3518
3570
  */
@@ -6904,11 +6956,11 @@ actions: IssueAction[]
6904
6956
  */
6905
6957
  introduced?: (AuditIntroduced | null)
6906
6958
  /**
6907
- * Rule severity of this finding. This type never gates the run, so the
6908
- * value does not change the exit code. `fallow report --from` reads it
6909
- * for the SARIF level, so the level does not depend on the config at
6910
- * render time. Absent in output from older versions. Not part of the
6911
- * finding identity, baseline keys or fingerprints.
6959
+ * Rule severity of this finding. Explicit errors enforce analysis gates;
6960
+ * warnings stay advisory, including under strict flags. Saved reports
6961
+ * retain this value for CI levels without the original config. Absent
6962
+ * in output from older versions. Not part of finding identity, baseline
6963
+ * keys or fingerprints.
6912
6964
  */
6913
6965
  effective_severity?: (EffectiveSeverity | null)
6914
6966
  }
@@ -6970,11 +7022,11 @@ actions: IssueAction[]
6970
7022
  */
6971
7023
  introduced?: (AuditIntroduced | null)
6972
7024
  /**
6973
- * Rule severity of this finding. This type never gates the run, so the
6974
- * value does not change the exit code. `fallow report --from` reads it
6975
- * for the SARIF level, so the level does not depend on the config at
6976
- * render time. Absent in output from older versions. Not part of the
6977
- * finding identity, baseline keys or fingerprints.
7025
+ * Rule severity of this finding. Explicit errors enforce analysis gates;
7026
+ * warnings stay advisory, including under strict flags. Saved reports
7027
+ * retain this value for CI levels without the original config. Absent
7028
+ * in output from older versions. Not part of finding identity, baseline
7029
+ * keys or fingerprints.
6978
7030
  */
6979
7031
  effective_severity?: (EffectiveSeverity | null)
6980
7032
  }
@@ -7987,9 +8039,17 @@ line: number
7987
8039
  */
7988
8040
  col: number
7989
8041
  /**
7990
- * Cyclomatic complexity of the function.
8042
+ * Cyclomatic complexity of the function, as the cyclomatic gate and the
8043
+ * CRAP score read it. Under the `literal-membership` value of
8044
+ * `health.cyclomaticPolicy`, this is the value after literal membership
8045
+ * chains count as one predicate.
7991
8046
  */
7992
8047
  cyclomatic: number
8048
+ /**
8049
+ * Standard `McCabe` cyclomatic complexity, present only when the
8050
+ * `health.cyclomaticPolicy` value gave `cyclomatic` a different value.
8051
+ */
8052
+ standard_cyclomatic?: (number | null)
7993
8053
  /**
7994
8054
  * Cognitive complexity of the function.
7995
8055
  */
@@ -8305,6 +8365,15 @@ weight: number
8305
8365
  * consumer explain a cognitive `+3` as "+1 base, +2 nesting".
8306
8366
  */
8307
8367
  nesting: number
8368
+ /**
8369
+ * This cyclomatic `||` increment is part of a literal membership chain:
8370
+ * strict equality checks of one identifier against primitive literals
8371
+ * (`kind === "a" || kind === "b"`). The `literal-membership` value of
8372
+ * `health.cyclomaticPolicy` removes these increments from the effective
8373
+ * cyclomatic value. Omitted when `false`, and always `false` under the
8374
+ * default `standard` policy.
8375
+ */
8376
+ literal_membership?: boolean
8308
8377
  }
8309
8378
  /**
8310
8379
  * Resolved thresholds used to evaluate a health finding.
@@ -8435,6 +8504,11 @@ functions_above_threshold: number
8435
8504
  * Global cyclomatic-complexity ceiling for this run.
8436
8505
  */
8437
8506
  max_cyclomatic_threshold: number
8507
+ /**
8508
+ * Cyclomatic policy of the gates (`health.cyclomaticPolicy`). Absent
8509
+ * under the default `standard` policy.
8510
+ */
8511
+ cyclomatic_policy?: (CyclomaticPolicy | null)
8438
8512
  /**
8439
8513
  * Global cognitive-complexity ceiling for this run.
8440
8514
  */
@@ -16769,7 +16843,7 @@ _meta?: (Meta | null)
16769
16843
  * - source discovery, during the file walk: `skipped-large-file`,
16770
16844
  * `skipped-minified-file`, `skipped-source-dotdir`,
16771
16845
  * `excluded-by-default-ignore`, `source-read-failure`,
16772
- * `source-parse-degraded`;
16846
+ * `source-parse-degraded`, `source-nesting-too-deep`;
16773
16847
  * - dead-code analysis, from the dependency-catalog and override
16774
16848
  * detectors: `malformed-pnpm-workspace-yaml`,
16775
16849
  * `bun-lockb-override-resolution-skipped`;
@@ -16788,10 +16862,11 @@ _meta?: (Meta | null)
16788
16862
  *
16789
16863
  * A diagnostic here is advisory and never withholds a finding. Where an
16790
16864
  * entry reports a source file this run never fully analyzed
16791
- * (`source-parse-degraded`, `source-read-failure`, `skipped-large-file`,
16792
- * `skipped-minified-file`, `skipped-source-dotdir`) it can distort a
16793
- * verdict, so the affected `unused_files[]`, `unused_exports[]`, and
16794
- * dependency entries additionally carry the caveat themselves in their own
16865
+ * (`source-parse-degraded`, `source-nesting-too-deep`,
16866
+ * `source-read-failure`, `skipped-large-file`, `skipped-minified-file`,
16867
+ * `skipped-source-dotdir`) it can distort a verdict, so the affected
16868
+ * `unused_files[]`, `unused_exports[]`, and dependency entries
16869
+ * additionally carry the caveat themselves in their own
16795
16870
  * optional `reachability_caveats[]` array, and a reader who never scrolls
16796
16871
  * back up to this list still sees it. `fallow fix` reads the same array
16797
16872
  * and withholds the removal while a caveat stands.
@@ -16829,10 +16904,12 @@ elapsed_ms: ElapsedMs
16829
16904
  /**
16830
16905
  * The verdict of every gate this run evaluated, keyed by name. The CLI
16831
16906
  * always emits it, with the default exit rule of each section that ran
16832
- * (`error-severity-findings`, `health-findings`). Without
16907
+ * (`error-severity-findings`, `health-findings`). A `coverage-gaps` rule
16908
+ * at `error` adds `health-coverage-gaps`. Without
16833
16909
  * `--fail-on-issues` or `--ci`, the machine formats of the combined run
16834
16910
  * exit 0 for findings, so most entries have `enforced: false`. With one of
16835
- * these flags, the findings rules and `duplication-threshold` are
16911
+ * these flags, the findings rules, `health-coverage-gaps` and
16912
+ * `duplication-threshold` are
16836
16913
  * `enforced`, the dupes section adds an enforced `duplication-findings`
16837
16914
  * entry, and every format exits 1 when one fails. For the default
16838
16915
  * exit rules (`error-severity-findings`,
@@ -16984,8 +17061,8 @@ total_flags: number
16984
17061
  * A flags run walks and parses the project like every other analysis, so
16985
17062
  * it records the same discovery kinds: a `skipped-large-file`,
16986
17063
  * `skipped-minified-file`, or `source-read-failure` file was never
16987
- * scanned for flags, and a `source-parse-degraded` file was scanned from
16988
- * a partial module. Each is a reason a flag can be missing from
17064
+ * scanned for flags, a `source-parse-degraded` file was scanned from a
17065
+ * partial module, and a `source-nesting-too-deep` file was not scanned. Each is a reason a flag can be missing from
16989
17066
  * `feature_flags[]`, which is exactly what a consumer reading a
16990
17067
  * zero-result run needs to know. The analysis-stage kinds appear here
16991
17068
  * too: the scan correlates flags with dead exports, so it runs the
@@ -19845,6 +19922,10 @@ runner?: (MutationRunnerOutput | null)
19845
19922
  * started.
19846
19923
  */
19847
19924
  cache?: (MutationCacheOutput | null)
19925
+ /**
19926
+ * The resume facts. Absent without `--resume`.
19927
+ */
19928
+ resume?: (MutationResumeOutput | null)
19848
19929
  summary: MutationSummary
19849
19930
  /**
19850
19931
  * Each mutant, ranked mutants first.
@@ -19979,6 +20060,36 @@ stored: number
19979
20060
  */
19980
20061
  not_keyed: string[]
19981
20062
  }
20063
+ /**
20064
+ * The resume facts of a `--resume` run.
20065
+ */
20066
+ export interface MutationResumeOutput {
20067
+ /**
20068
+ * The path of the outcome journal, relative to the project root. When
20069
+ * the cache directory is outside the root, the path is absolute: the
20070
+ * report has no other cache path, so no other rule applies. The file
20071
+ * stays only when the run did not complete. A run with
20072
+ * `completion.status: complete` removes it.
20073
+ */
20074
+ journal: string
20075
+ /**
20076
+ * The mutants whose status came from the journal. They did not run.
20077
+ */
20078
+ reused: number
20079
+ /**
20080
+ * The journal results whose key does not match this run, because an
20081
+ * input of the mutant changed. These results were not reused from the
20082
+ * journal. The mutant ran again, or its status came from the result
20083
+ * cache.
20084
+ */
20085
+ rejected: number
20086
+ /**
20087
+ * Why the run did not read a journal and started from the beginning,
20088
+ * for example because no journal exists. Absent when the run read the
20089
+ * journal.
20090
+ */
20091
+ note?: (string | null)
20092
+ }
19982
20093
  /**
19983
20094
  * The totals of a run.
19984
20095
  */
@@ -20104,6 +20215,11 @@ attempts?: MutantAttempt[]
20104
20215
  * The mutant did not run in this run. `--no-cache` runs each mutant.
20105
20216
  */
20106
20217
  cached?: boolean
20218
+ /**
20219
+ * True when the status comes from the journal of an interrupted run
20220
+ * (`--resume`). The mutant did not run in this run.
20221
+ */
20222
+ resumed?: boolean
20107
20223
  /**
20108
20224
  * The TypeScript diagnostic codes of the new errors of a
20109
20225
  * `compile_error` mutant, sorted, at most 8.
@@ -20286,7 +20402,8 @@ changed_paths: string[]
20286
20402
  */
20287
20403
  export interface MutationRunIssue {
20288
20404
  /**
20289
- * A stable kebab-case code: `runtime-error`, `static-map-miss`,
20405
+ * A stable kebab-case code: `cache-write-failed`,
20406
+ * `journal-write-failed`, `runtime-error`, `static-map-miss`,
20290
20407
  * `test-files-not-discovered`, `typecheck-failed`, `worktree-changed`
20291
20408
  * or `worktree-check-failed`.
20292
20409
  */