fallow 3.42.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.
- package/README.md +3 -1
- package/capabilities.json +127 -40
- package/issue-registry.json +68 -32
- package/package.json +9 -10
- package/schema.json +51 -4
- package/scripts/lazy-verify.js +5 -4
- package/scripts/platform-package.js +25 -0
- package/scripts/run-binary.js +149 -30
- package/scripts/verify-binary.js +25 -21
- package/skills/fallow/SKILL.md +25 -3
- package/skills/fallow/references/cli-reference.md +53 -29
- package/skills/fallow/references/gotchas.md +2 -0
- package/skills/fallow/references/issue-types.md +1 -0
- package/skills/fallow/references/mcp.md +3 -3
- package/skills/fallow/references/similar-code.md +1 -1
- package/types/output-contract.d.ts +758 -29
|
@@ -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 =
|
|
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 =
|
|
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
|
*/
|
|
@@ -1833,9 +1856,16 @@ export type MutantStatus = ("killed" | "timeout" | "survived" | "no_coverage" |
|
|
|
1833
1856
|
*/
|
|
1834
1857
|
export type MutantFailureKind = ("assertion" | "error" | "timeout")
|
|
1835
1858
|
/**
|
|
1836
|
-
* Why a survivor may be equivalent
|
|
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.
|
|
1837
1861
|
*/
|
|
1838
|
-
export type MutantEquivalenceHint = "type-non-nullish"
|
|
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")
|
|
1839
1869
|
/**
|
|
1840
1870
|
* Why the type check did not check a survivor.
|
|
1841
1871
|
*/
|
|
@@ -1848,6 +1878,10 @@ export type MutationRecheckOutcome = ("killed" | "survived" | "no_coverage" | "t
|
|
|
1848
1878
|
* How one mutant of a compare differs from the saved report.
|
|
1849
1879
|
*/
|
|
1850
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")
|
|
1851
1885
|
/**
|
|
1852
1886
|
* Version singleton for a mutation plan.
|
|
1853
1887
|
*/
|
|
@@ -1868,6 +1902,18 @@ export type MutationInspectStatus = ("fresh" | "stale")
|
|
|
1868
1902
|
* Why an inspect packet is stale.
|
|
1869
1903
|
*/
|
|
1870
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")
|
|
1871
1917
|
/**
|
|
1872
1918
|
* Version singleton for the open tasks of a mutation report.
|
|
1873
1919
|
*/
|
|
@@ -2224,6 +2270,11 @@ symbol_impacts?: SemanticSymbolImpact[]
|
|
|
2224
2270
|
* Advisory project-local public-signature coupling.
|
|
2225
2271
|
*/
|
|
2226
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)
|
|
2227
2278
|
/**
|
|
2228
2279
|
* Whether the semantic companion executed at least one query.
|
|
2229
2280
|
*/
|
|
@@ -2894,6 +2945,36 @@ export interface TypeCouplingCycle {
|
|
|
2894
2945
|
*/
|
|
2895
2946
|
files: string[]
|
|
2896
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
|
+
}
|
|
2897
2978
|
/**
|
|
2898
2979
|
* Closed abstention reason counts for stable machine consumption.
|
|
2899
2980
|
*/
|
|
@@ -3079,6 +3160,10 @@ total_issues: number
|
|
|
3079
3160
|
*/
|
|
3080
3161
|
entry_points?: (EntryPoints | null)
|
|
3081
3162
|
summary: CheckSummary
|
|
3163
|
+
/**
|
|
3164
|
+
* Optional architecture inventory, excluded from issue totals and gates.
|
|
3165
|
+
*/
|
|
3166
|
+
shared_state?: (SharedStateInventory | null)
|
|
3082
3167
|
/**
|
|
3083
3168
|
* Files not reachable from any entry point. Wrapped in
|
|
3084
3169
|
* [`UnusedFileFinding`] so each entry carries a typed `actions` array
|
|
@@ -3364,6 +3449,10 @@ unused_component_props?: UnusedComponentPropFinding[]
|
|
|
3364
3449
|
* Used optional component inputs absent from inspected reachable callers. Off by default.
|
|
3365
3450
|
*/
|
|
3366
3451
|
absent_component_props?: AbsentComponentPropFinding[]
|
|
3452
|
+
/**
|
|
3453
|
+
* Parameters that each visible call passes in one way. Off by default.
|
|
3454
|
+
*/
|
|
3455
|
+
constant_parameters?: ConstantParameterFinding[]
|
|
3367
3456
|
/**
|
|
3368
3457
|
* Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
|
|
3369
3458
|
* (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
|
|
@@ -3690,6 +3779,11 @@ unused_component_props?: number
|
|
|
3690
3779
|
* Optional consumed props omitted by known reachable callers, for manual review.
|
|
3691
3780
|
*/
|
|
3692
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
|
|
3693
3787
|
/**
|
|
3694
3788
|
* Vue `<script setup>` emits emitted nowhere inside their own SFC.
|
|
3695
3789
|
*/
|
|
@@ -3845,6 +3939,131 @@ route_collisions?: number
|
|
|
3845
3939
|
*/
|
|
3846
3940
|
dynamic_segment_name_conflicts?: number
|
|
3847
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
|
+
}
|
|
3848
4067
|
/**
|
|
3849
4068
|
* Wire-shape envelope for an [`UnusedFile`] finding. The bare finding
|
|
3850
4069
|
* flattens in via `#[serde(flatten)]`, with a typed `actions` array
|
|
@@ -6635,6 +6854,141 @@ line: number
|
|
|
6635
6854
|
*/
|
|
6636
6855
|
col: number
|
|
6637
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
|
+
}
|
|
6638
6992
|
/**
|
|
6639
6993
|
* Wire-shape envelope for an [`UnusedComponentEmit`] finding. There is no safe
|
|
6640
6994
|
* auto-fix: removing a declared emit is judgement-bearing (the event may be
|
|
@@ -15382,6 +15736,10 @@ owners?: (string[] | null)
|
|
|
15382
15736
|
* Findings in this group.
|
|
15383
15737
|
*/
|
|
15384
15738
|
total_issues: number
|
|
15739
|
+
/**
|
|
15740
|
+
* Optional architecture inventory, excluded from issue totals and gates.
|
|
15741
|
+
*/
|
|
15742
|
+
shared_state?: (SharedStateInventory | null)
|
|
15385
15743
|
/**
|
|
15386
15744
|
* Files not reachable from any entry point. Wrapped in
|
|
15387
15745
|
* [`UnusedFileFinding`] so each entry carries a typed `actions` array
|
|
@@ -15667,6 +16025,10 @@ unused_component_props?: UnusedComponentPropFinding[]
|
|
|
15667
16025
|
* Used optional component inputs absent from inspected reachable callers. Off by default.
|
|
15668
16026
|
*/
|
|
15669
16027
|
absent_component_props?: AbsentComponentPropFinding[]
|
|
16028
|
+
/**
|
|
16029
|
+
* Parameters that each visible call passes in one way. Off by default.
|
|
16030
|
+
*/
|
|
16031
|
+
constant_parameters?: ConstantParameterFinding[]
|
|
15670
16032
|
/**
|
|
15671
16033
|
* Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
|
|
15672
16034
|
* (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
|
|
@@ -16281,13 +16643,13 @@ new_count: number
|
|
|
16281
16643
|
*/
|
|
16282
16644
|
export interface SecurityFinding {
|
|
16283
16645
|
/**
|
|
16284
|
-
*
|
|
16285
|
-
* rule + anchor path + line + column. An autonomous agent that triaged this
|
|
16286
|
-
* candidate on a prior run uses it to correlate the candidate after a
|
|
16287
|
-
* rebase. Equal to the SARIF `partialFingerprints["fallowSecurity/v2"]`
|
|
16288
|
-
* 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.
|
|
16289
16647
|
*/
|
|
16290
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)
|
|
16291
16653
|
kind: SecurityFindingKind
|
|
16292
16654
|
/**
|
|
16293
16655
|
* The catalogue category id (e.g. `"dangerous-html"`). `Some` for
|
|
@@ -16370,9 +16732,8 @@ taint_flow?: (SecurityTaintFlow | null)
|
|
|
16370
16732
|
*/
|
|
16371
16733
|
runtime?: (SecurityRuntimeContext | null)
|
|
16372
16734
|
/**
|
|
16373
|
-
* Internal projection used by `fallow security --surface`. The CLI strips
|
|
16374
|
-
*
|
|
16375
|
-
* `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.
|
|
16376
16737
|
*/
|
|
16377
16738
|
attack_surface?: (SecurityAttackSurfaceEntry | null)
|
|
16378
16739
|
}
|
|
@@ -16971,7 +17332,8 @@ elapsed_ms: ElapsedMs
|
|
|
16971
17332
|
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
16972
17333
|
summary: SecuritySurvivorsSummary
|
|
16973
17334
|
/**
|
|
16974
|
-
* Verifier-retained candidates keyed by
|
|
17335
|
+
* Verifier-retained candidates keyed by the candidate `finding_id`, also
|
|
17336
|
+
* when the verdict names the candidate by its `stable_finding_id`.
|
|
16975
17337
|
*/
|
|
16976
17338
|
survivors: {
|
|
16977
17339
|
[k: string]: SecuritySurvivor
|
|
@@ -17128,6 +17490,10 @@ total_issues: number
|
|
|
17128
17490
|
*/
|
|
17129
17491
|
entry_points?: (EntryPoints | null)
|
|
17130
17492
|
summary: CheckSummary
|
|
17493
|
+
/**
|
|
17494
|
+
* Optional architecture inventory, excluded from issue totals and gates.
|
|
17495
|
+
*/
|
|
17496
|
+
shared_state?: (SharedStateInventory | null)
|
|
17131
17497
|
/**
|
|
17132
17498
|
* Files not reachable from any entry point. Wrapped in
|
|
17133
17499
|
* [`UnusedFileFinding`] so each entry carries a typed `actions` array
|
|
@@ -17413,6 +17779,10 @@ unused_component_props?: UnusedComponentPropFinding[]
|
|
|
17413
17779
|
* Used optional component inputs absent from inspected reachable callers. Off by default.
|
|
17414
17780
|
*/
|
|
17415
17781
|
absent_component_props?: AbsentComponentPropFinding[]
|
|
17782
|
+
/**
|
|
17783
|
+
* Parameters that each visible call passes in one way. Off by default.
|
|
17784
|
+
*/
|
|
17785
|
+
constant_parameters?: ConstantParameterFinding[]
|
|
17416
17786
|
/**
|
|
17417
17787
|
* Vue `<script setup>` `defineEmits` events emitted nowhere in their own SFC
|
|
17418
17788
|
* (no `emit('<name>')` call). Wrapped in [`UnusedComponentEmitFinding`] so
|
|
@@ -18873,14 +19243,39 @@ change_shape: number
|
|
|
18873
19243
|
/**
|
|
18874
19244
|
* Runtime-weight component (paid): a hot path (runtime evidence of high
|
|
18875
19245
|
* invocation) adds an invocation-bucketed weight so it amplifies the blast
|
|
18876
|
-
* and outranks an otherwise-equal cold unit. `0` in free mode
|
|
18877
|
-
* input)
|
|
18878
|
-
* 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).
|
|
18879
19248
|
*/
|
|
18880
19249
|
runtime?: number
|
|
18881
19250
|
/**
|
|
18882
|
-
*
|
|
18883
|
-
*
|
|
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.
|
|
18884
19279
|
*/
|
|
18885
19280
|
total: number
|
|
18886
19281
|
}
|
|
@@ -20741,6 +21136,11 @@ compare?: (MutationCompare | null)
|
|
|
20741
21136
|
* the run is not a recheck. The exit code of the run reads this entry.
|
|
20742
21137
|
*/
|
|
20743
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)
|
|
20744
21144
|
}
|
|
20745
21145
|
/**
|
|
20746
21146
|
* The completion status of a run.
|
|
@@ -20846,12 +21246,22 @@ target: string
|
|
|
20846
21246
|
test_ids: string[]
|
|
20847
21247
|
status: MutationKillMatrixTargetStatus
|
|
20848
21248
|
/**
|
|
20849
|
-
* Why the evidence of this target is incomplete, sorted.
|
|
20850
|
-
*
|
|
20851
|
-
*
|
|
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`.
|
|
20852
21258
|
* `incomplete-mutant-results` means that a test of this target covers a
|
|
20853
21259
|
* mutant with incomplete evidence. `unmatched-target` means that the
|
|
20854
|
-
* 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.
|
|
20855
21265
|
*/
|
|
20856
21266
|
reasons: string[]
|
|
20857
21267
|
}
|
|
@@ -21109,6 +21519,14 @@ cached?: boolean
|
|
|
21109
21519
|
* (`--resume`). The mutant did not run in this run.
|
|
21110
21520
|
*/
|
|
21111
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
|
|
21112
21530
|
/**
|
|
21113
21531
|
* The TypeScript diagnostic codes of the new errors of a
|
|
21114
21532
|
* `compile_error` mutant, sorted, at most 8.
|
|
@@ -21121,6 +21539,12 @@ type_error_codes?: number[]
|
|
|
21121
21539
|
* a verdict file. The hint can be wrong.
|
|
21122
21540
|
*/
|
|
21123
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)
|
|
21124
21548
|
}
|
|
21125
21549
|
/**
|
|
21126
21550
|
* The edit of a mutant, without project text.
|
|
@@ -21204,6 +21628,28 @@ failure_kind?: (MutantFailureKind | null)
|
|
|
21204
21628
|
*/
|
|
21205
21629
|
detail?: (string | null)
|
|
21206
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
|
+
}
|
|
21207
21653
|
/**
|
|
21208
21654
|
* The results of the mutants of one function.
|
|
21209
21655
|
*/
|
|
@@ -21433,9 +21879,9 @@ checked: number
|
|
|
21433
21879
|
*/
|
|
21434
21880
|
compile_errors: number
|
|
21435
21881
|
/**
|
|
21436
|
-
* The mutants of the final report that have
|
|
21437
|
-
* keep the status `survived`. A verdict that makes a mutant
|
|
21438
|
-
* removes its hint and lowers this count.
|
|
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.
|
|
21439
21885
|
*/
|
|
21440
21886
|
hinted?: number
|
|
21441
21887
|
/**
|
|
@@ -21485,6 +21931,22 @@ unsettled: number
|
|
|
21485
21931
|
* The rechecked mutants, sorted by file, line and mutant id.
|
|
21486
21932
|
*/
|
|
21487
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[]
|
|
21488
21950
|
}
|
|
21489
21951
|
/**
|
|
21490
21952
|
* One rechecked mutant.
|
|
@@ -21572,6 +22034,66 @@ status?: (MutantStatus | null)
|
|
|
21572
22034
|
*/
|
|
21573
22035
|
previous_killing_tests: string[]
|
|
21574
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
|
+
}
|
|
21575
22097
|
/**
|
|
21576
22098
|
* The envelope of `fallow mutation --plan`. It runs no user code.
|
|
21577
22099
|
*/
|
|
@@ -21598,7 +22120,8 @@ test_files: string[]
|
|
|
21598
22120
|
*/
|
|
21599
22121
|
no_test_files: boolean
|
|
21600
22122
|
/**
|
|
21601
|
-
* True when the plan applied the `framework-config`
|
|
22123
|
+
* True when the plan applied the `framework-config` and
|
|
22124
|
+
* `build-tool-only` prune rules.
|
|
21602
22125
|
*/
|
|
21603
22126
|
framework_config_checked: boolean
|
|
21604
22127
|
/**
|
|
@@ -21609,6 +22132,7 @@ skipped_files: MutationSkippedFile[]
|
|
|
21609
22132
|
* The paths of a `paths` scope that select no file.
|
|
21610
22133
|
*/
|
|
21611
22134
|
unmatched_paths: string[]
|
|
22135
|
+
runner: MutationPlanRunner
|
|
21612
22136
|
}
|
|
21613
22137
|
/**
|
|
21614
22138
|
* The totals of a plan.
|
|
@@ -21650,6 +22174,10 @@ pruned_side_effect_sink: number
|
|
|
21650
22174
|
* Mutants in framework config exports.
|
|
21651
22175
|
*/
|
|
21652
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
|
|
21653
22181
|
}
|
|
21654
22182
|
/**
|
|
21655
22183
|
* One mutant of a plan.
|
|
@@ -21718,7 +22246,50 @@ pending_reason?: (string | null)
|
|
|
21718
22246
|
test_reach?: (MutantTestReach | null)
|
|
21719
22247
|
}
|
|
21720
22248
|
/**
|
|
21721
|
-
* The
|
|
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`.
|
|
21722
22293
|
*/
|
|
21723
22294
|
export interface MutationInspectOutput {
|
|
21724
22295
|
schema_version: MutationInspectSchemaVersion
|
|
@@ -21810,6 +22381,10 @@ killing_tests: string[]
|
|
|
21810
22381
|
* True only for exact requested membership with terminal pass or fail results.
|
|
21811
22382
|
*/
|
|
21812
22383
|
kill_matrix_complete: boolean
|
|
22384
|
+
/**
|
|
22385
|
+
* The replay of the mutant. Present only with `--replay`.
|
|
22386
|
+
*/
|
|
22387
|
+
replay?: (MutationReplayOutput | null)
|
|
21813
22388
|
}
|
|
21814
22389
|
/**
|
|
21815
22390
|
* The code of one mutant, from the current file.
|
|
@@ -21832,6 +22407,95 @@ original_lines: string
|
|
|
21832
22407
|
*/
|
|
21833
22408
|
mutated_lines: string
|
|
21834
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
|
+
}
|
|
21835
22499
|
/**
|
|
21836
22500
|
* The envelope of `fallow mutation tasks`: the open tasks of one saved
|
|
21837
22501
|
* report, as one batch. It runs no user code.
|
|
@@ -21929,6 +22593,71 @@ stale_reason?: (MutationStaleReason | null)
|
|
|
21929
22593
|
* test ids and the static test files of one mutant.
|
|
21930
22594
|
*/
|
|
21931
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
|
|
21932
22661
|
}
|
|
21933
22662
|
/**
|
|
21934
22663
|
* Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
|