fallow 3.41.0 → 3.43.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.
@@ -228,7 +228,15 @@ export type TypeAwareAbstentionReason = ("no-project" | "ambiguous-project" | "b
228
228
  /**
229
229
  * Schema projection for the dead-code envelope's exact version.
230
230
  */
231
- export type CheckSchemaVersion = 10
231
+ export type CheckSchemaVersion = 11
232
+ /**
233
+ * A direct property operation. Calls are not classified as writes.
234
+ */
235
+ export type StateOperation = ("read" | "assign" | "read_modify_write" | "update" | "delete")
236
+ /**
237
+ * Runtime relationships that static observations cannot establish.
238
+ */
239
+ export type UnknownStateRelation = "unknown"
232
240
  /**
233
241
  * A suggested action attached to a finding in the JSON output. Each finding
234
242
  * carries an `actions` array; consumers (agents, IDE clients, CI bots) can
@@ -285,7 +293,7 @@ export type IssueAction = (FixAction | SuppressLineAction | SuppressFileAction |
285
293
  * Discriminant string for [`FixAction`]. Kebab-case per the JSON output
286
294
  * contract.
287
295
  */
288
- export type FixActionType = ("remove-export" | "delete-file" | "remove-dependency" | "move-dependency" | "remove-enum-member" | "remove-class-member" | "resolve-import" | "install-dependency" | "remove-duplicate" | "move-to-dev" | "move-to-prod" | "refactor-cycle" | "refactor-re-export-cycle" | "refactor-boundary" | "export-type" | "migrate-deprecated-export" | "remove-catalog-entry" | "remove-empty-catalog-group" | "update-catalog-reference" | "add-catalog-entry" | "remove-catalog-reference" | "remove-dependency-override" | "fix-dependency-override" | "resolve-policy-violation" | "move-to-server-module" | "split-mixed-barrel" | "hoist-directive" | "wire-server-action" | "provide-inject" | "use-load-data" | "render-component" | "use-component-prop" | "review-component-prop" | "emit-component-event" | "wire-svelte-event" | "compose-effect-layer" | "fail-tagged-error" | "remove-catch-tag-handler" | "resolve-route-collision" | "resolve-dynamic-segment-name-conflict" | "add-suppression-reason" | "remove-stale-suppression")
296
+ export type FixActionType = ("remove-export" | "delete-file" | "remove-dependency" | "move-dependency" | "remove-enum-member" | "remove-class-member" | "resolve-import" | "install-dependency" | "remove-duplicate" | "move-to-dev" | "move-to-prod" | "refactor-cycle" | "refactor-re-export-cycle" | "refactor-boundary" | "export-type" | "migrate-deprecated-export" | "remove-catalog-entry" | "remove-empty-catalog-group" | "update-catalog-reference" | "add-catalog-entry" | "remove-catalog-reference" | "remove-dependency-override" | "fix-dependency-override" | "resolve-policy-violation" | "move-to-server-module" | "split-mixed-barrel" | "hoist-directive" | "wire-server-action" | "provide-inject" | "use-load-data" | "render-component" | "use-component-prop" | "review-component-prop" | "review-constant-parameter" | "emit-component-event" | "wire-svelte-event" | "compose-effect-layer" | "fail-tagged-error" | "remove-catch-tag-handler" | "resolve-route-collision" | "resolve-dynamic-segment-name-conflict" | "add-suppression-reason" | "remove-stale-suppression")
289
297
  /**
290
298
  * Singleton discriminant for [`SuppressLineAction`].
291
299
  */
@@ -461,6 +469,19 @@ export type DependencyOverrideSource = ("pnpm-workspace.yaml" | "package.json")
461
469
  * surfacing them statically catches the issue first.
462
470
  */
463
471
  export type DependencyOverrideMisconfigReason = ("unparsable-key" | "empty-value")
472
+ /**
473
+ * Why the rule reports a parameter.
474
+ */
475
+ export type ConstantParameterReason = ("identical-argument" | "never-passed" | "unused-default")
476
+ /**
477
+ * The evidence that a [`ConstantParameter`] finding needs beyond the
478
+ * syntactic call facts.
479
+ */
480
+ export type ConstantParameterEvidence = "type-aware"
481
+ /**
482
+ * The type of a [`ConstantParameterValue`].
483
+ */
484
+ export type ConstantParameterValueKind = ("boolean" | "null" | "undefined" | "number" | "string" | "binding")
464
485
  /**
465
486
  * Kind of an Effect layer definition.
466
487
  */
@@ -666,6 +687,8 @@ kind: "boundaries-not-configured"
666
687
  } | {
667
688
  kind: "rule-packs-not-configured"
668
689
  } | {
690
+ kind: "client-server-leak-no-client-roots"
691
+ } | {
669
692
  kind: "excluded-by-default-ignore"
670
693
  /**
671
694
  * The built-in glob that matched, verbatim (for example
@@ -1452,7 +1475,7 @@ export type DupesSchemaVersion = (4 | 10)
1452
1475
  * The schema emitter registers this type by name and points the
1453
1476
  * `ArchitectureOutput` and `ArchitectureGroupedOutput` definitions at it.
1454
1477
  */
1455
- export type ArchitectureSchemaVersion = 1
1478
+ export type ArchitectureSchemaVersion = 2
1456
1479
  /**
1457
1480
  * Wire-version discriminator for [`ImpactReport`]. Independent from the global
1458
1481
  * `SchemaVersion` (the impact report versions on its own cadence) and from the
@@ -1715,7 +1738,7 @@ export type DoctorStatus = ("pass" | "warn" | "fail")
1715
1738
  /**
1716
1739
  * Stable identifier for a doctor check. Declaration order is output order.
1717
1740
  */
1718
- export type DoctorCheckId = ("root" | "config" | "workspaces" | "plugins" | "type-aware" | "dependencies" | "cache" | "graph-cache")
1741
+ export type DoctorCheckId = ("root" | "config" | "workspaces" | "plugins" | "type-aware" | "dependencies" | "cache" | "graph-cache" | "mutation-runner")
1719
1742
  /**
1720
1743
  * Stable category for a doctor check.
1721
1744
  */
@@ -1811,7 +1834,7 @@ export type MutationSchemaVersion = "2"
1811
1834
  /**
1812
1835
  * Why a run is partial.
1813
1836
  */
1814
- export type MutationIncompleteReason = ("runtime-error" | "mutant-limit" | "time-budget" | "skipped-files" | "unloaded-files" | "test-files-not-discovered" | "baseline-failure" | "worktree-changed" | "typecheck-failed" | "worktree-unchecked")
1837
+ export type MutationIncompleteReason = ("runtime-error" | "mutant-limit" | "sampled-out" | "time-budget" | "skipped-files" | "unloaded-files" | "test-files-not-discovered" | "baseline-failure" | "worktree-changed" | "typecheck-failed" | "worktree-unchecked")
1815
1838
  /**
1816
1839
  * The quality of observed test-to-mutant evidence.
1817
1840
  */
@@ -1832,6 +1855,17 @@ export type MutantStatus = ("killed" | "timeout" | "survived" | "no_coverage" |
1832
1855
  * How a run detected a mutant.
1833
1856
  */
1834
1857
  export type MutantFailureKind = ("assertion" | "error" | "timeout")
1858
+ /**
1859
+ * Why a survivor may be equivalent: a fact of the type check or of the
1860
+ * call evidence. The hint is advisory and never changes the status.
1861
+ */
1862
+ export type MutantEquivalenceHint = ("type-non-nullish" | "constant-parameter")
1863
+ /**
1864
+ * The verdict of one replay. A replay never decides that a mutant is
1865
+ * equivalent: equal results on both sides give `no_witness_found`, which
1866
+ * says only that this input shows no difference.
1867
+ */
1868
+ export type MutationReplayVerdict = ("witness" | "no_witness_found" | "unstable" | "timeout" | "not_callable" | "not_replayable")
1835
1869
  /**
1836
1870
  * Why the type check did not check a survivor.
1837
1871
  */
@@ -1844,6 +1878,10 @@ export type MutationRecheckOutcome = ("killed" | "survived" | "no_coverage" | "t
1844
1878
  * How one mutant of a compare differs from the saved report.
1845
1879
  */
1846
1880
  export type MutationCompareChange = ("regressed" | "inconclusive" | "added" | "removed")
1881
+ /**
1882
+ * What a record pass keeps of the arguments.
1883
+ */
1884
+ export type MutationRecordMode = ("shapes" | "values")
1847
1885
  /**
1848
1886
  * Version singleton for a mutation plan.
1849
1887
  */
@@ -1864,6 +1902,18 @@ export type MutationInspectStatus = ("fresh" | "stale")
1864
1902
  * Why an inspect packet is stale.
1865
1903
  */
1866
1904
  export type MutationStaleReason = ("file-missing" | "no-digest" | "source-changed" | "mutant-not-reproduced")
1905
+ /**
1906
+ * Where the arguments of a replay come from.
1907
+ */
1908
+ export type MutationReplayInputSource = ("argument" | "recorded")
1909
+ /**
1910
+ * The side of one replay call.
1911
+ */
1912
+ export type MutationReplaySide = ("original" | "mutant")
1913
+ /**
1914
+ * The outcome of one replay call.
1915
+ */
1916
+ export type MutationReplayOutcome = ("returned" | "threw" | "timed_out" | "not_callable")
1867
1917
  /**
1868
1918
  * Version singleton for the open tasks of a mutation report.
1869
1919
  */
@@ -2054,7 +2104,7 @@ diff_risk_introduced: number
2054
2104
  * The key set is OPEN. A name that a consumer does not recognize means "some
2055
2105
  * gate", not an error.
2056
2106
  *
2057
- * The names that this build can emit are `error-severity-findings`, `regression`, `stale-baseline`, `baseline-growth`, `duplication-threshold`, `duplication-findings`, `health-min-score`, `health-min-severity`, `health-findings`, `health-coverage-gaps`, `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`, `type-aware-require` and `parse-error`. `GateName` describes each name and the default entries of each command.
2107
+ * The names that this build can emit are `error-severity-findings`, `regression`, `stale-baseline`, `baseline-growth`, `duplication-threshold`, `duplication-findings`, `health-min-score`, `health-min-severity`, `health-findings`, `health-coverage-gaps`, `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`, `type-aware-require`, `parse-error` and `mutation-min-score`. `GateName` describes each name and the default entries of each command.
2058
2108
  */
2059
2109
  export interface GateOutcomes {
2060
2110
  [k: string]: GateOutcome
@@ -2220,6 +2270,11 @@ symbol_impacts?: SemanticSymbolImpact[]
2220
2270
  * Advisory project-local public-signature coupling.
2221
2271
  */
2222
2272
  type_coupling?: (TypeCouplingReport | null)
2273
+ /**
2274
+ * The call evidence of the `constant-parameter` rule. Present when the
2275
+ * rule sent candidates to the companion.
2276
+ */
2277
+ call_evidence?: (TypeAwareCallEvidenceMeta | null)
2223
2278
  /**
2224
2279
  * Whether the semantic companion executed at least one query.
2225
2280
  */
@@ -2890,6 +2945,36 @@ export interface TypeCouplingCycle {
2890
2945
  */
2891
2946
  files: string[]
2892
2947
  }
2948
+ /**
2949
+ * The call evidence that the `constant-parameter` rule asked the companion
2950
+ * for.
2951
+ */
2952
+ export interface TypeAwareCallEvidenceMeta {
2953
+ /**
2954
+ * Parameters with a default whose arguments the companion typed.
2955
+ */
2956
+ default_candidates: number
2957
+ /**
2958
+ * Methods of exported classes whose calls the companion read.
2959
+ */
2960
+ method_candidates: number
2961
+ /**
2962
+ * Findings that the evidence proved.
2963
+ */
2964
+ findings: number
2965
+ /**
2966
+ * The count of each reason that a candidate got no evidence, such as
2967
+ * `outside-program` or `decorator`. An open set: a later version can
2968
+ * add a reason.
2969
+ */
2970
+ abstention_reasons?: {
2971
+ [k: string]: number
2972
+ }
2973
+ /**
2974
+ * Duration of the request as reported by the companion.
2975
+ */
2976
+ elapsed_ms: number
2977
+ }
2893
2978
  /**
2894
2979
  * Closed abstention reason counts for stable machine consumption.
2895
2980
  */
@@ -3075,6 +3160,10 @@ total_issues: number
3075
3160
  */
3076
3161
  entry_points?: (EntryPoints | null)
3077
3162
  summary: CheckSummary
3163
+ /**
3164
+ * Optional architecture inventory, excluded from issue totals and gates.
3165
+ */
3166
+ shared_state?: (SharedStateInventory | null)
3078
3167
  /**
3079
3168
  * Files not reachable from any entry point. Wrapped in
3080
3169
  * [`UnusedFileFinding`] so each entry carries a typed `actions` array
@@ -3360,6 +3449,10 @@ unused_component_props?: UnusedComponentPropFinding[]
3360
3449
  * Used optional component inputs absent from inspected reachable callers. Off by default.
3361
3450
  */
3362
3451
  absent_component_props?: AbsentComponentPropFinding[]
3452
+ /**
3453
+ * Parameters that each visible call passes in one way. Off by default.
3454
+ */
3455
+ constant_parameters?: ConstantParameterFinding[]
3363
3456
  /**
3364
3457
  * Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
3365
3458
  * (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
@@ -3686,6 +3779,11 @@ unused_component_props?: number
3686
3779
  * Optional consumed props omitted by known reachable callers, for manual review.
3687
3780
  */
3688
3781
  absent_component_props?: number
3782
+ /**
3783
+ * Parameters that each visible call passes in one way, for manual review.
3784
+ * Absent while zero, so a run with the opt-in rule off keeps its shape.
3785
+ */
3786
+ constant_parameters?: number
3689
3787
  /**
3690
3788
  * Vue `<script setup>` emits emitted nowhere inside their own SFC.
3691
3789
  */
@@ -3841,6 +3939,131 @@ route_collisions?: number
3841
3939
  */
3842
3940
  dynamic_segment_name_conflicts?: number
3843
3941
  }
3942
+ /**
3943
+ * Versioned advisory inventory. Its observations are never counted as findings.
3944
+ */
3945
+ export interface SharedStateInventory {
3946
+ /**
3947
+ * Inventory contract version.
3948
+ */
3949
+ version: number
3950
+ /**
3951
+ * False if source parsing or retention limits omitted supported evidence.
3952
+ */
3953
+ complete: boolean
3954
+ /**
3955
+ * Whether bounded fact retention omitted sites.
3956
+ */
3957
+ truncated: boolean
3958
+ /**
3959
+ * Imported value property writes.
3960
+ */
3961
+ imported_writes: ImportedStateWrite[]
3962
+ /**
3963
+ * Exact global root/slot groups.
3964
+ */
3965
+ globals: GlobalStateGroup[]
3966
+ }
3967
+ /**
3968
+ * A write through an imported value binding with one declaration origin.
3969
+ */
3970
+ export interface ImportedStateWrite {
3971
+ /**
3972
+ * Stable observation identity.
3973
+ */
3974
+ id: string
3975
+ writer: StateSite
3976
+ declaration: StateSite
3977
+ /**
3978
+ * Canonical exported name.
3979
+ */
3980
+ binding: string
3981
+ /**
3982
+ * Exact property segments relative to the imported value.
3983
+ */
3984
+ property: string[]
3985
+ operation: StateOperation
3986
+ /**
3987
+ * Manual guidance.
3988
+ */
3989
+ actions: StateAction[]
3990
+ }
3991
+ /**
3992
+ * A retained source location.
3993
+ */
3994
+ export interface StateSite {
3995
+ /**
3996
+ * Project-relative source path.
3997
+ */
3998
+ path: string
3999
+ /**
4000
+ * One-based source line.
4001
+ */
4002
+ line: number
4003
+ /**
4004
+ * One-based byte column.
4005
+ */
4006
+ column: number
4007
+ /**
4008
+ * Original byte offset.
4009
+ */
4010
+ offset: number
4011
+ }
4012
+ /**
4013
+ * Manual review guidance. Inventory observations cannot be automatically fixed.
4014
+ */
4015
+ export interface StateAction {
4016
+ /**
4017
+ * Human-readable next step.
4018
+ */
4019
+ description: string
4020
+ /**
4021
+ * Always false.
4022
+ */
4023
+ auto_fixable: boolean
4024
+ }
4025
+ /**
4026
+ * One exact root and custom slot, with retained reads and writes across files.
4027
+ */
4028
+ export interface GlobalStateGroup {
4029
+ /**
4030
+ * Stable observation identity.
4031
+ */
4032
+ id: string
4033
+ /**
4034
+ * Exact root spelling. Roots are never normalized across runtimes.
4035
+ */
4036
+ root: string
4037
+ /**
4038
+ * Direct custom slot.
4039
+ */
4040
+ slot: string
4041
+ /**
4042
+ * Sorted read sites.
4043
+ */
4044
+ reads: GlobalStateAccess[]
4045
+ /**
4046
+ * Sorted write sites.
4047
+ */
4048
+ writes: GlobalStateAccess[]
4049
+ same_runtime: UnknownStateRelation
4050
+ execution_order: UnknownStateRelation
4051
+ /**
4052
+ * Manual guidance.
4053
+ */
4054
+ actions: StateAction[]
4055
+ }
4056
+ /**
4057
+ * A source access within a global group.
4058
+ */
4059
+ export interface GlobalStateAccess {
4060
+ site: StateSite
4061
+ /**
4062
+ * Full path, including the direct slot.
4063
+ */
4064
+ property: string[]
4065
+ operation: StateOperation
4066
+ }
3844
4067
  /**
3845
4068
  * Wire-shape envelope for an [`UnusedFile`] finding. The bare finding
3846
4069
  * flattens in via `#[serde(flatten)]`, with a typed `actions` array
@@ -6631,6 +6854,141 @@ line: number
6631
6854
  */
6632
6855
  col: number
6633
6856
  }
6857
+ /**
6858
+ * Wire-shape envelope for a [`ConstantParameter`] finding. No action is
6859
+ * auto-fixable: a change of the function and each call is a refactor that
6860
+ * needs the tests, and a default that differs from the constant can change
6861
+ * behavior.
6862
+ */
6863
+ export interface ConstantParameterFinding {
6864
+ /**
6865
+ * Source path of the function.
6866
+ */
6867
+ path: string
6868
+ /**
6869
+ * The module-scope binding name of the function. For a method of an
6870
+ * exported class, which only type-aware mode reports, `Class.method`.
6871
+ */
6872
+ function_name: string
6873
+ /**
6874
+ * The parameter name. For an option key, the local binding of the key
6875
+ * in the object pattern: `abort` for `{ signal: abort }`.
6876
+ */
6877
+ parameter_name: string
6878
+ /**
6879
+ * 0-based index of the parameter. A TypeScript `this` parameter does
6880
+ * not count.
6881
+ */
6882
+ parameter_index: number
6883
+ /**
6884
+ * The property key, when the finding is about one key of an
6885
+ * object-pattern parameter: `retries` in `{ retries = 3 }`. Absent for
6886
+ * a plain parameter.
6887
+ */
6888
+ option_key?: (string | null)
6889
+ /**
6890
+ * 1-based line of the parameter, or of the key binding.
6891
+ */
6892
+ line: number
6893
+ /**
6894
+ * 0-based byte column of the parameter, or of the key binding.
6895
+ */
6896
+ col: number
6897
+ reason: ConstantParameterReason
6898
+ /**
6899
+ * The evidence that the finding needs beyond the syntactic call facts.
6900
+ * Absent for a finding that the call facts prove alone.
6901
+ */
6902
+ evidence?: (ConstantParameterEvidence | null)
6903
+ /**
6904
+ * The value that each call passes. Present if and only if `reason` is
6905
+ * `identical-argument`.
6906
+ */
6907
+ value?: (ConstantParameterValue | null)
6908
+ /**
6909
+ * `true` when the parameter has the TypeScript `?` marker.
6910
+ */
6911
+ optional: boolean
6912
+ /**
6913
+ * `true` when the parameter, or the option key, has a default value.
6914
+ */
6915
+ has_default: boolean
6916
+ /**
6917
+ * The count of conditional tests in the function whose test is the
6918
+ * parameter, `!parameter` or `!!parameter`: the test of an `if`, a
6919
+ * `?:`, a `while`, a `do` or a `for`. Nested functions count. A
6920
+ * comparison such as `parameter === true` and an operand of `&&` or
6921
+ * `||` do not count.
6922
+ */
6923
+ condition_reads: number
6924
+ /**
6925
+ * The count of calls that the rule read for this parameter. A
6926
+ * recursive call that passes the parameter on unchanged does not count.
6927
+ */
6928
+ call_site_count: number
6929
+ /**
6930
+ * The first calls in source order, at most 20. The list is never longer
6931
+ * than `call_site_count`.
6932
+ */
6933
+ inspected_call_sites: ConstantParameterCallSite[]
6934
+ /**
6935
+ * What the finding means and what static analysis does not prove.
6936
+ */
6937
+ explanation: string
6938
+ /**
6939
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6940
+ * `~<k>` suffix when several findings of one type share an identity.
6941
+ * Line and column are not inputs, so the id survives line shifts,
6942
+ * reformats and reorders. A rename of the file, the function or the
6943
+ * parameter gives a new id. Absent in output from older versions.
6944
+ */
6945
+ finding_id?: (string | null)
6946
+ /**
6947
+ * Suggested next steps. Always emitted.
6948
+ */
6949
+ actions: IssueAction[]
6950
+ /**
6951
+ * Set by the audit pass when this finding is introduced relative to
6952
+ * the merge-base.
6953
+ */
6954
+ introduced?: (AuditIntroduced | null)
6955
+ /**
6956
+ * Gate severity of this finding after `rules` and `overrides[].rules`
6957
+ * resolve for its path. Not part of the finding identity, baseline keys
6958
+ * or fingerprints.
6959
+ */
6960
+ effective_severity?: (EffectiveSeverity | null)
6961
+ }
6962
+ /**
6963
+ * The value that each call passes: a literal, or an immutable binding.
6964
+ */
6965
+ export interface ConstantParameterValue {
6966
+ kind: ConstantParameterValueKind
6967
+ /**
6968
+ * The value as text. A number uses the JavaScript `String(n)` form,
6969
+ * except that negative zero is `-0`. A string is the raw value with no
6970
+ * quotes. `null`, `undefined`, `true` and `false` are the keyword. A
6971
+ * binding is its name.
6972
+ */
6973
+ text: string
6974
+ }
6975
+ /**
6976
+ * One inspected call of the reported function.
6977
+ */
6978
+ export interface ConstantParameterCallSite {
6979
+ /**
6980
+ * Caller source path.
6981
+ */
6982
+ path: string
6983
+ /**
6984
+ * 1-based line of the call.
6985
+ */
6986
+ line: number
6987
+ /**
6988
+ * 0-based byte column of the call.
6989
+ */
6990
+ col: number
6991
+ }
6634
6992
  /**
6635
6993
  * Wire-shape envelope for an [`UnusedComponentEmit`] finding. There is no safe
6636
6994
  * auto-fix: removing a declared emit is judgement-bearing (the event may be
@@ -7928,11 +8286,11 @@ start_line: number
7928
8286
  */
7929
8287
  end_line: number
7930
8288
  /**
7931
- * 0-based start column.
8289
+ * 0-based byte column offset of the start.
7932
8290
  */
7933
8291
  start_col: number
7934
8292
  /**
7935
- * 0-based end column.
8293
+ * 0-based byte column offset of the end.
7936
8294
  */
7937
8295
  end_col: number
7938
8296
  /**
@@ -15236,11 +15594,11 @@ start_line: number
15236
15594
  */
15237
15595
  end_line: number
15238
15596
  /**
15239
- * 0-based start column.
15597
+ * 0-based byte column offset of the start.
15240
15598
  */
15241
15599
  start_col: number
15242
15600
  /**
15243
- * 0-based end column.
15601
+ * 0-based byte column offset of the end.
15244
15602
  */
15245
15603
  end_col: number
15246
15604
  /**
@@ -15378,6 +15736,10 @@ owners?: (string[] | null)
15378
15736
  * Findings in this group.
15379
15737
  */
15380
15738
  total_issues: number
15739
+ /**
15740
+ * Optional architecture inventory, excluded from issue totals and gates.
15741
+ */
15742
+ shared_state?: (SharedStateInventory | null)
15381
15743
  /**
15382
15744
  * Files not reachable from any entry point. Wrapped in
15383
15745
  * [`UnusedFileFinding`] so each entry carries a typed `actions` array
@@ -15663,6 +16025,10 @@ unused_component_props?: UnusedComponentPropFinding[]
15663
16025
  * Used optional component inputs absent from inspected reachable callers. Off by default.
15664
16026
  */
15665
16027
  absent_component_props?: AbsentComponentPropFinding[]
16028
+ /**
16029
+ * Parameters that each visible call passes in one way. Off by default.
16030
+ */
16031
+ constant_parameters?: ConstantParameterFinding[]
15666
16032
  /**
15667
16033
  * Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
15668
16034
  * (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
@@ -16277,13 +16643,13 @@ new_count: number
16277
16643
  */
16278
16644
  export interface SecurityFinding {
16279
16645
  /**
16280
- * Stable per-finding correlation id, identical across runs for the same
16281
- * rule + anchor path + line + column. An autonomous agent that triaged this
16282
- * candidate on a prior run uses it to correlate the candidate after a
16283
- * rebase. Equal to the SARIF `partialFingerprints["fallowSecurity/v2"]`
16284
- * value for the same finding (one shared helper computes both).
16646
+ * Location id (rule, path, line, column), equal to SARIF `fallowSecurity/v2`; edits move it.
16285
16647
  */
16286
16648
  finding_id: string
16649
+ /**
16650
+ * Line-independent id (`sec1:<hash>`, `~k` for repeats); a verdict may use it.
16651
+ */
16652
+ stable_finding_id?: (string | null)
16287
16653
  kind: SecurityFindingKind
16288
16654
  /**
16289
16655
  * The catalogue category id (e.g. `"dangerous-html"`). `Some` for
@@ -16366,9 +16732,8 @@ taint_flow?: (SecurityTaintFlow | null)
16366
16732
  */
16367
16733
  runtime?: (SecurityRuntimeContext | null)
16368
16734
  /**
16369
- * Internal projection used by `fallow security --surface`. The CLI strips
16370
- * this from per-finding JSON and promotes it to the top-level
16371
- * `attack_surface` field only when requested.
16735
+ * Internal projection used by `fallow security --surface`. The CLI strips this from
16736
+ * per-finding JSON and promotes it to the top-level `attack_surface` field only when requested.
16372
16737
  */
16373
16738
  attack_surface?: (SecurityAttackSurfaceEntry | null)
16374
16739
  }
@@ -16967,7 +17332,8 @@ elapsed_ms: ElapsedMs
16967
17332
  workspace_diagnostics?: WorkspaceDiagnostic[]
16968
17333
  summary: SecuritySurvivorsSummary
16969
17334
  /**
16970
- * Verifier-retained candidates keyed by finding id.
17335
+ * Verifier-retained candidates keyed by the candidate `finding_id`, also
17336
+ * when the verdict names the candidate by its `stable_finding_id`.
16971
17337
  */
16972
17338
  survivors: {
16973
17339
  [k: string]: SecuritySurvivor
@@ -17124,6 +17490,10 @@ total_issues: number
17124
17490
  */
17125
17491
  entry_points?: (EntryPoints | null)
17126
17492
  summary: CheckSummary
17493
+ /**
17494
+ * Optional architecture inventory, excluded from issue totals and gates.
17495
+ */
17496
+ shared_state?: (SharedStateInventory | null)
17127
17497
  /**
17128
17498
  * Files not reachable from any entry point. Wrapped in
17129
17499
  * [`UnusedFileFinding`] so each entry carries a typed `actions` array
@@ -17409,6 +17779,10 @@ unused_component_props?: UnusedComponentPropFinding[]
17409
17779
  * Used optional component inputs absent from inspected reachable callers. Off by default.
17410
17780
  */
17411
17781
  absent_component_props?: AbsentComponentPropFinding[]
17782
+ /**
17783
+ * Parameters that each visible call passes in one way. Off by default.
17784
+ */
17785
+ constant_parameters?: ConstantParameterFinding[]
17412
17786
  /**
17413
17787
  * Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
17414
17788
  * (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
@@ -18869,14 +19243,39 @@ change_shape: number
18869
19243
  /**
18870
19244
  * Runtime-weight component (paid): a hot path (runtime evidence of high
18871
19245
  * invocation) adds an invocation-bucketed weight so it amplifies the blast
18872
- * and outranks an otherwise-equal cold unit. `0` in free mode (no runtime
18873
- * input), so the free-tier total stays the four deterministic components and
18874
- * is byte-identical to the no-runtime baseline.
19246
+ * and outranks an otherwise-equal cold unit. `0` and omitted in free mode
19247
+ * (no runtime input).
18875
19248
  */
18876
19249
  runtime?: number
18877
19250
  /**
18878
- * The summed total of every present component (the four deterministic ones
18879
- * plus the runtime weight).
19251
+ * Churn component: the recency-weighted commit count of the file in the
19252
+ * churn window (90-day half-life), in capped bands. Omitted while it is
19253
+ * zero, which includes a test file and a run without a git history or on a
19254
+ * shallow clone.
19255
+ */
19256
+ churn?: number
19257
+ /**
19258
+ * Worsened component: the functions of the file whose complexity metrics
19259
+ * grew against the matched base finding (`worsened_metrics`), capped.
19260
+ * Omitted while it is zero, which includes a run without a base.
19261
+ */
19262
+ worsened?: number
19263
+ /**
19264
+ * Test-reach component: the changed exports of the file that no test
19265
+ * runs for real (`mocked-only`, `none`, or `none-file` in a project with
19266
+ * tests), capped. Omitted while it is zero.
19267
+ */
19268
+ test_reach?: number
19269
+ /**
19270
+ * Mutation component: the surviving mutants on the added lines of the
19271
+ * file, from the `--mutation-report` file, capped. Omitted while it is
19272
+ * zero. Without `--mutation-report` the component is not measured, which
19273
+ * does not mean that no mutant survives.
19274
+ */
19275
+ mutation?: number
19276
+ /**
19277
+ * The sum of every component, also of the components that the wire
19278
+ * omits because they are zero.
18880
19279
  */
18881
19280
  total: number
18882
19281
  }
@@ -20731,6 +21130,17 @@ recheck?: (MutationRecheck | null)
20731
21130
  * `--compare`, and absent when this run is not complete.
20732
21131
  */
20733
21132
  compare?: (MutationCompare | null)
21133
+ /**
21134
+ * The verdict of the `mutation-min-score` gate. Present only when a
21135
+ * minimum applies: from `--min-score`, or from `mutation.minScore` when
21136
+ * the run is not a recheck. The exit code of the run reads this entry.
21137
+ */
21138
+ gate_outcomes?: (GateOutcomes | null)
21139
+ /**
21140
+ * The argument recording of the dry run. Present only with
21141
+ * `--record-args`. It holds counts and reasons, never argument values.
21142
+ */
21143
+ recording?: (MutationRecordingOutput | null)
20734
21144
  }
20735
21145
  /**
20736
21146
  * The completion status of a run.
@@ -20836,12 +21246,22 @@ target: string
20836
21246
  test_ids: string[]
20837
21247
  status: MutationKillMatrixTargetStatus
20838
21248
  /**
20839
- * Why the evidence of this target is incomplete, sorted. The run-wide
20840
- * reasons `partial-mutation-run`, `baseline-failure`, and
20841
- * `missing-test-file-metadata` apply to each target.
21249
+ * Why the evidence of this target is incomplete, sorted.
21250
+ * `baseline-failure` means that a test failed with no active mutant, and
21251
+ * that the failure can affect this target: the failing test is a test
21252
+ * of the target or is in a test file of the target, or it covers, kills,
21253
+ * or ran without a mutant that a test of the target covers or kills.
21254
+ * `partial-mutation-run` means that the run is partial. When baseline
21255
+ * failures are the only cause of a partial run, only the targets with
21256
+ * `baseline-failure` get it. Each other cause applies to each target,
21257
+ * and so does `missing-test-file-metadata`.
20842
21258
  * `incomplete-mutant-results` means that a test of this target covers a
20843
21259
  * mutant with incomplete evidence. `unmatched-target` means that the
20844
- * target selects no test.
21260
+ * target selects no test. With it, `not-a-test-file` means that the
21261
+ * runner does not list the file of the target as a test file, and
21262
+ * `no-planned-code` means that the file reaches no planned code, so
21263
+ * the dry run does not run it. A run stops only when no target selects
21264
+ * a test.
20845
21265
  */
20846
21266
  reasons: string[]
20847
21267
  }
@@ -20969,6 +21389,11 @@ score?: (number | null)
20969
21389
  * mutants never count. `null` when no mutant is covered or unreached.
20970
21390
  */
20971
21391
  coverage?: (number | null)
21392
+ /**
21393
+ * The `pending` mutants that the `--mutants-per-line` limit left out of
21394
+ * the plan. They are part of `counts.pending`.
21395
+ */
21396
+ sampled_out: number
20972
21397
  }
20973
21398
  /**
20974
21399
  * One mutant of a run.
@@ -21023,6 +21448,13 @@ status: MutantStatus
21023
21448
  * The static rule of a `pruned` mutant, kebab-case.
21024
21449
  */
21025
21450
  prune_reason?: (string | null)
21451
+ /**
21452
+ * Why a `pending` mutant did not run, kebab-case. Only `sampled-out` has
21453
+ * a reason: the `--mutants-per-line` limit left the mutant out of the
21454
+ * plan. A mutant that the mutant limit or the time budget left out has
21455
+ * no reason.
21456
+ */
21457
+ pending_reason?: (string | null)
21026
21458
  /**
21027
21459
  * The test that killed the mutant in this run. Absent for a kill by an
21028
21460
  * error outside a test.
@@ -21087,19 +21519,42 @@ cached?: boolean
21087
21519
  * (`--resume`). The mutant did not run in this run.
21088
21520
  */
21089
21521
  resumed?: boolean
21522
+ /**
21523
+ * True when the status and its evidence come from the earlier report
21524
+ * of a `--recheck` run: the recheck did not select the mutant, its file
21525
+ * has the digest of that report, and each test file of its killing
21526
+ * tests exists. The mutant did not run in this run, and the kill matrix
21527
+ * of this run has no evidence of it.
21528
+ */
21529
+ carried?: boolean
21090
21530
  /**
21091
21531
  * The TypeScript diagnostic codes of the new errors of a
21092
21532
  * `compile_error` mutant, sorted, at most 8.
21093
21533
  */
21094
21534
  type_error_codes?: number[]
21535
+ /**
21536
+ * An advisory hint that the mutant may be equivalent to the original
21537
+ * code. The hint never changes the status: the mutant stays `survived`
21538
+ * and counts in the score. A person decides, and records the decision in
21539
+ * a verdict file. The hint can be wrong.
21540
+ */
21541
+ equivalence_hint?: (MutantEquivalenceHint | null)
21542
+ /**
21543
+ * The replay of a recorded input. Present only after a `--record-args
21544
+ * values` run, for a survived or uncovered mutant with a recorded input
21545
+ * of its export.
21546
+ */
21547
+ witness?: (MutantWitness | null)
21095
21548
  }
21096
21549
  /**
21097
21550
  * The edit of a mutant, without project text.
21098
21551
  *
21099
21552
  * Each side is an operator token (for example `??` or `<=`), a fixed literal
21100
21553
  * (`true`, `undefined`, `""`, `"fallow"`, `void 0`), a regular expression
21101
- * token (`^`, `$`, `[`, `[^`, `\d`), or a placeholder for a side that is
21102
- * project code: `<condition>`, `<call>`, `<expression>` or `<string>`. An
21554
+ * token (`^`, `$`, `[`, `[^`, `+`, `{n,m}`, `\d`), or a placeholder for a
21555
+ * side that is project code: `<condition>`, `<call>`, `<expression>`,
21556
+ * `<string>`, `<template>`, `<statement>`, `<statements>`, `<array>` or
21557
+ * `<object>`. An
21103
21558
  * empty side means that the edit removes the token.
21104
21559
  */
21105
21560
  export interface MutantChange {
@@ -21173,6 +21628,28 @@ failure_kind?: (MutantFailureKind | null)
21173
21628
  */
21174
21629
  detail?: (string | null)
21175
21630
  }
21631
+ /**
21632
+ * The replay of a recorded input against a survived or uncovered mutant,
21633
+ * after a `fallow mutation --record-args values` run. It holds no argument
21634
+ * value: the values stay in the gitignored cache directory.
21635
+ */
21636
+ export interface MutantWitness {
21637
+ verdict: MutationReplayVerdict
21638
+ /**
21639
+ * The recorded input of the verdict. `fallow mutation tasks` joins its
21640
+ * values from the cache.
21641
+ */
21642
+ input_id?: (string | null)
21643
+ /**
21644
+ * The recorded inputs that the replay ran.
21645
+ */
21646
+ inputs_checked: number
21647
+ /**
21648
+ * Why the replay gave no witness, for example `no witness found (2
21649
+ * inputs, recorded, 3 calls of each side)`. Absent for a witness.
21650
+ */
21651
+ reason?: (string | null)
21652
+ }
21176
21653
  /**
21177
21654
  * The results of the mutants of one function.
21178
21655
  */
@@ -21284,9 +21761,9 @@ changed_paths: string[]
21284
21761
  export interface MutationRunIssue {
21285
21762
  /**
21286
21763
  * A stable kebab-case code: `cache-write-failed`,
21287
- * `journal-write-failed`, `runtime-error`, `static-map-miss`,
21288
- * `test-files-not-discovered`, `typecheck-failed`, `worktree-changed`
21289
- * or `worktree-check-failed`.
21764
+ * `duplicate-test-ids`, `journal-write-failed`, `runtime-error`,
21765
+ * `skipped-tests`, `static-map-miss`, `test-files-not-discovered`,
21766
+ * `typecheck-failed`, `worktree-changed` or `worktree-check-failed`.
21290
21767
  */
21291
21768
  code: string
21292
21769
  /**
@@ -21401,6 +21878,12 @@ checked: number
21401
21878
  * `compile_error`.
21402
21879
  */
21403
21880
  compile_errors: number
21881
+ /**
21882
+ * The mutants of the final report that have the `type-non-nullish`
21883
+ * hint. They keep the status `survived`. A verdict that makes a mutant
21884
+ * `equivalent` removes its hint and lowers this count.
21885
+ */
21886
+ hinted?: number
21404
21887
  /**
21405
21888
  * The survivors that the checker did not check, by reason.
21406
21889
  */
@@ -21448,6 +21931,22 @@ unsettled: number
21448
21931
  * The rechecked mutants, sorted by file, line and mutant id.
21449
21932
  */
21450
21933
  mutants: MutationRecheckMutant[]
21934
+ /**
21935
+ * The mutants of the report that keep their result from the earlier
21936
+ * report (`carried`), because the recheck did not select them. The
21937
+ * summary counts them. The recheck does not run them again, so a test
21938
+ * that became weaker does not change their result.
21939
+ */
21940
+ carried?: number
21941
+ /**
21942
+ * The files of the earlier report outside this run whose earlier
21943
+ * results do not apply, sorted: the source changed after the report,
21944
+ * the test file of a killing test is gone, or the report has no digest
21945
+ * or no readable entry for the file. The report leaves out their
21946
+ * mutants. Run `fallow mutation` on them for new
21947
+ * results.
21948
+ */
21949
+ stale_files?: string[]
21451
21950
  }
21452
21951
  /**
21453
21952
  * One rechecked mutant.
@@ -21535,6 +22034,66 @@ status?: (MutantStatus | null)
21535
22034
  */
21536
22035
  previous_killing_tests: string[]
21537
22036
  }
22037
+ /**
22038
+ * The argument recording of a run.
22039
+ */
22040
+ export interface MutationRecordingOutput {
22041
+ mode: MutationRecordMode
22042
+ /**
22043
+ * True when the inputs are in the cache file
22044
+ * `<cache dir>/mutation/recorded-args.json`.
22045
+ */
22046
+ saved: boolean
22047
+ /**
22048
+ * Why the run recorded nothing or saved nothing, for example a runner
22049
+ * that records no arguments. Absent when the inputs are saved.
22050
+ */
22051
+ error?: (string | null)
22052
+ /**
22053
+ * The recorded exported functions, sorted by file and export.
22054
+ */
22055
+ functions: MutationRecordedFunction[]
22056
+ }
22057
+ /**
22058
+ * The recorded arguments of one exported function.
22059
+ */
22060
+ export interface MutationRecordedFunction {
22061
+ /**
22062
+ * The project-root-relative path of the file.
22063
+ */
22064
+ file: string
22065
+ /**
22066
+ * The export name. `fallow mutation inspect --replay` calls it.
22067
+ */
22068
+ export: string
22069
+ /**
22070
+ * The number of distinct inputs that the cache keeps.
22071
+ */
22072
+ input_count: number
22073
+ /**
22074
+ * The calls whose arguments the cache does not keep, by reason.
22075
+ */
22076
+ not_replayable: MutationNotReplayable[]
22077
+ }
22078
+ /**
22079
+ * The calls of one reason whose arguments a recording did not keep.
22080
+ */
22081
+ export interface MutationNotReplayable {
22082
+ /**
22083
+ * Why the arguments cannot be replayed. One of a fixed set: `a
22084
+ * function`, `a symbol`, `a proxy`, `a cyclic value`, `a class
22085
+ * instance`, `a value that is too large`, `an accessor property`, `an
22086
+ * object with a symbol key`, `an object that this runtime cannot check
22087
+ * for a proxy`, `a value that cannot be read`, `a value under a secret
22088
+ * key name` or `a string that looks like a secret`. It never holds text
22089
+ * of the code or of a value.
22090
+ */
22091
+ reason: string
22092
+ /**
22093
+ * The number of calls.
22094
+ */
22095
+ count: number
22096
+ }
21538
22097
  /**
21539
22098
  * The envelope of `fallow mutation --plan`. It runs no user code.
21540
22099
  */
@@ -21561,7 +22120,8 @@ test_files: string[]
21561
22120
  */
21562
22121
  no_test_files: boolean
21563
22122
  /**
21564
- * True when the plan applied the `framework-config` prune rule.
22123
+ * True when the plan applied the `framework-config` and
22124
+ * `build-tool-only` prune rules.
21565
22125
  */
21566
22126
  framework_config_checked: boolean
21567
22127
  /**
@@ -21572,6 +22132,7 @@ skipped_files: MutationSkippedFile[]
21572
22132
  * The paths of a `paths` scope that select no file.
21573
22133
  */
21574
22134
  unmatched_paths: string[]
22135
+ runner: MutationPlanRunner
21575
22136
  }
21576
22137
  /**
21577
22138
  * The totals of a plan.
@@ -21586,9 +22147,13 @@ total: number
21586
22147
  */
21587
22148
  planned: number
21588
22149
  /**
21589
- * Mutants after the mutant limit.
22150
+ * Mutants after the mutant limit, and the sampled-out mutants.
21590
22151
  */
21591
22152
  pending: number
22153
+ /**
22154
+ * The `pending` mutants that the `--mutants-per-line` limit left out.
22155
+ */
22156
+ sampled_out: number
21592
22157
  /**
21593
22158
  * Mutants that no test file reaches.
21594
22159
  */
@@ -21609,6 +22174,10 @@ pruned_side_effect_sink: number
21609
22174
  * Mutants in framework config exports.
21610
22175
  */
21611
22176
  pruned_framework_config: number
22177
+ /**
22178
+ * Mutants in files that only tool config files reach. Absent when 0.
22179
+ */
22180
+ pruned_build_tool_only?: number
21612
22181
  }
21613
22182
  /**
21614
22183
  * One mutant of a plan.
@@ -21663,6 +22232,13 @@ disposition: MutationPlanDisposition
21663
22232
  * The static rule of a `pruned` mutant, kebab-case.
21664
22233
  */
21665
22234
  prune_reason?: (string | null)
22235
+ /**
22236
+ * Why a `pending` mutant did not run, kebab-case. Only `sampled-out` has
22237
+ * a reason: the `--mutants-per-line` limit left the mutant out of the
22238
+ * plan. A mutant that the mutant limit or the time budget left out has
22239
+ * no reason.
22240
+ */
22241
+ pending_reason?: (string | null)
21666
22242
  /**
21667
22243
  * How tests reach the code of the mutant in the module graph. Only a
21668
22244
  * `no_coverage` mutant has this field.
@@ -21670,7 +22246,50 @@ prune_reason?: (string | null)
21670
22246
  test_reach?: (MutantTestReach | null)
21671
22247
  }
21672
22248
  /**
21673
- * The envelope of `fallow mutation inspect`. It runs no user code.
22249
+ * The test runner of a plan. The plan reads the `package.json` of the
22250
+ * installed runner package and runs no code. A run that starts the runner
22251
+ * stops when `supported` is false: with `FALLOW_MUTATION_RUNNER_UNSUPPORTED`
22252
+ * for a version outside the range, and with the companion error
22253
+ * `runner-not-found` for a runner that is not installed. A run of a plan
22254
+ * with no test file or no mutant starts no runner.
22255
+ */
22256
+ export interface MutationPlanRunner {
22257
+ /**
22258
+ * The runner: `vitest`, `node-test` or `bun-test`.
22259
+ */
22260
+ name: string
22261
+ /**
22262
+ * The package or runtime that the supported range applies to.
22263
+ */
22264
+ package: string
22265
+ /**
22266
+ * The installed version of the package. `null` when the package is not
22267
+ * installed, or when `supported` is `null`.
22268
+ */
22269
+ installed_version?: (string | null)
22270
+ /**
22271
+ * The supported range, for example `>=4.1.0 <6.0.0`.
22272
+ */
22273
+ supported_range: string
22274
+ /**
22275
+ * True when the installed version is in the range. False when it is
22276
+ * outside the range or when the package is not installed. `null` for
22277
+ * `node-test` and `bun-test`: their range applies to the runtime, and a
22278
+ * run selects the runtime when it starts.
22279
+ */
22280
+ supported?: (boolean | null)
22281
+ /**
22282
+ * The problem when `supported` is false, else `null`.
22283
+ */
22284
+ message?: (string | null)
22285
+ /**
22286
+ * The install step when `supported` is false, else `null`.
22287
+ */
22288
+ help?: (string | null)
22289
+ }
22290
+ /**
22291
+ * The envelope of `fallow mutation inspect`. It runs no user code, except
22292
+ * with `--replay`.
21674
22293
  */
21675
22294
  export interface MutationInspectOutput {
21676
22295
  schema_version: MutationInspectSchemaVersion
@@ -21762,6 +22381,10 @@ killing_tests: string[]
21762
22381
  * True only for exact requested membership with terminal pass or fail results.
21763
22382
  */
21764
22383
  kill_matrix_complete: boolean
22384
+ /**
22385
+ * The replay of the mutant. Present only with `--replay`.
22386
+ */
22387
+ replay?: (MutationReplayOutput | null)
21765
22388
  }
21766
22389
  /**
21767
22390
  * The code of one mutant, from the current file.
@@ -21784,6 +22407,95 @@ original_lines: string
21784
22407
  */
21785
22408
  mutated_lines: string
21786
22409
  }
22410
+ /**
22411
+ * The replay of one export on the original and on one mutant (replay
22412
+ * contract 1).
22413
+ */
22414
+ export interface MutationReplayOutput {
22415
+ /**
22416
+ * The version of the replay contract of the runner companion.
22417
+ */
22418
+ contract_version: number
22419
+ verdict: MutationReplayVerdict
22420
+ /**
22421
+ * Why the replay did not run or did not end. Absent otherwise.
22422
+ */
22423
+ reason?: (string | null)
22424
+ /**
22425
+ * The export that the replay called. `null` when no export holds the
22426
+ * mutant.
22427
+ */
22428
+ export?: (string | null)
22429
+ input: MutationReplayInput
22430
+ /**
22431
+ * The inputs that the replay ran, in order, up to the first witness.
22432
+ */
22433
+ inputs_checked: number
22434
+ /**
22435
+ * The calls of each side. The sides take turns.
22436
+ */
22437
+ calls_per_side: number
22438
+ /**
22439
+ * The time limit of one call, in milliseconds.
22440
+ */
22441
+ call_timeout_ms: number
22442
+ /**
22443
+ * The fixed value of `Date.now()` in each call.
22444
+ */
22445
+ clock_ms: number
22446
+ /**
22447
+ * The seed of `Math.random` in each call.
22448
+ */
22449
+ seed: number
22450
+ /**
22451
+ * Each call, in call order.
22452
+ */
22453
+ calls: MutationReplayCall[]
22454
+ /**
22455
+ * The wall time of the replay request, in milliseconds. It differs
22456
+ * between two replays of the same input.
22457
+ */
22458
+ duration_ms: number
22459
+ }
22460
+ /**
22461
+ * The input of a replay.
22462
+ */
22463
+ export interface MutationReplayInput {
22464
+ source: MutationReplayInputSource
22465
+ /**
22466
+ * The id of a recorded input. Absent for `--args`.
22467
+ */
22468
+ input_id?: (string | null)
22469
+ /**
22470
+ * The arguments in the replay encoding: JSON values, and objects with a
22471
+ * `$replay` tag for `undefined`, special numbers, bigints, dates,
22472
+ * regular expressions, maps, sets and typed arrays.
22473
+ */
22474
+ args: unknown[]
22475
+ }
22476
+ /**
22477
+ * One call of a replay.
22478
+ */
22479
+ export interface MutationReplayCall {
22480
+ side: MutationReplaySide
22481
+ /**
22482
+ * The 1-based number of the call on its side.
22483
+ */
22484
+ index: number
22485
+ outcome: MutationReplayOutcome
22486
+ /**
22487
+ * The returned or thrown value in the replay encoding. An error is
22488
+ * `{"$replay": "error", "name", "message"}`. `null` for a call that
22489
+ * timed out.
22490
+ */
22491
+ value: (null | boolean | number | string | unknown[] | {
22492
+
22493
+ })
22494
+ /**
22495
+ * A short text of the value for people, at most 200 characters.
22496
+ */
22497
+ text: string
22498
+ }
21787
22499
  /**
21788
22500
  * The envelope of `fallow mutation tasks`: the open tasks of one saved
21789
22501
  * report, as one batch. It runs no user code.
@@ -21864,6 +22576,12 @@ original_lines?: (string | null)
21864
22576
  * stale.
21865
22577
  */
21866
22578
  mutated_lines?: (string | null)
22579
+ /**
22580
+ * An advisory hint that the mutant may be equivalent. The task stays
22581
+ * open: a person decides, and records an equivalent mutant in a verdict
22582
+ * file.
22583
+ */
22584
+ equivalence_hint?: (MutantEquivalenceHint | null)
21867
22585
  /**
21868
22586
  * Why the current file no longer gives the mutant. Absent for a fresh
21869
22587
  * task.
@@ -21875,6 +22593,71 @@ stale_reason?: (MutationStaleReason | null)
21875
22593
  * test ids and the static test files of one mutant.
21876
22594
  */
21877
22595
  covering_test_files: string[]
22596
+ /**
22597
+ * The witness of the task: a recorded input that shows a difference, with
22598
+ * the results of both sides. Present only after a `--record-args
22599
+ * values` run.
22600
+ */
22601
+ witness?: (MutationTaskWitness | null)
22602
+ }
22603
+ /**
22604
+ * The witness of a task: the reference of the report, and the values from
22605
+ * the local cache when the cache still has them. Only the verdict
22606
+ * `witness` can have `args`, `original` and `mutant`.
22607
+ */
22608
+ export interface MutationTaskWitness {
22609
+ verdict: MutationReplayVerdict
22610
+ /**
22611
+ * The recorded input of the verdict.
22612
+ */
22613
+ input_id?: (string | null)
22614
+ /**
22615
+ * The recorded inputs that the replay ran.
22616
+ */
22617
+ inputs_checked: number
22618
+ /**
22619
+ * Why the replay gave no witness. Absent for a witness.
22620
+ */
22621
+ reason?: (string | null)
22622
+ /**
22623
+ * The command that replays the mutant again and shows both sides.
22624
+ */
22625
+ replay_command: string
22626
+ /**
22627
+ * The arguments of the input in the replay encoding: JSON, and objects
22628
+ * with a `$replay` tag for other values (`{"$replay": "undefined"}`,
22629
+ * `{"$replay": "bigint", "value": "12"}`, and `date`, `regexp`, `map`,
22630
+ * `set` and `bytes`). Absent for another verdict, for a stale task, when
22631
+ * the cache no longer has the input (7 days), and in the markdown
22632
+ * output.
22633
+ */
22634
+ args?: (unknown[] | null)
22635
+ /**
22636
+ * The result on the original code: the value that a new test asserts.
22637
+ * The replay ran with a fixed clock and seed, so run the new test on the
22638
+ * current code to confirm it.
22639
+ */
22640
+ original?: (MutationWitnessSide | null)
22641
+ /**
22642
+ * The result on the mutant.
22643
+ */
22644
+ mutant?: (MutationWitnessSide | null)
22645
+ }
22646
+ /**
22647
+ * The result of one side of a witness.
22648
+ */
22649
+ export interface MutationWitnessSide {
22650
+ outcome: MutationReplayOutcome
22651
+ /**
22652
+ * The returned or thrown value in the replay encoding.
22653
+ */
22654
+ value: (null | boolean | number | string | unknown[] | {
22655
+
22656
+ })
22657
+ /**
22658
+ * A short text of the value for people.
22659
+ */
22660
+ text: string
21878
22661
  }
21879
22662
  /**
21880
22663
  * Single CodeClimate-compatible issue inside [`CodeClimateOutput`].