fallow 3.39.0 → 3.41.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/capabilities.json +246 -54
- package/issue-registry.json +168 -53
- package/package.json +10 -10
- package/schema.json +104 -4
- package/skills/fallow/SKILL.md +7 -2
- package/skills/fallow/references/cli-reference.md +31 -12
- package/skills/fallow/references/issue-types.md +3 -0
- package/skills/fallow/references/mcp.md +25 -0
- package/types/output-contract.d.ts +736 -81
|
@@ -24,7 +24,7 @@
|
|
|
24
24
|
|
|
25
25
|
|
|
26
26
|
/**
|
|
27
|
-
* Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `trace-error`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `architecture-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `architecture`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`, `similar-code-status`, `similar-code-cache-clear`, `mutation`, `mutation-plan`, `mutation-inspect`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field. A `--lean` document is not a root branch: it validates against `LeanOutput`.
|
|
27
|
+
* Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `trace-error`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `architecture-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `architecture`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `doctor`, `type-aware-status`, `similar-code`, `similar-code-inspect`, `similar-code-review`, `similar-code-status`, `similar-code-cache-clear`, `mutation`, `mutation-plan`, `mutation-inspect`, `mutation-tasks`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field. A `--lean` document is not a root branch: it validates against `LeanOutput`.
|
|
28
28
|
*/
|
|
29
29
|
export type FallowJsonOutput = (FallowOutput | CodeClimateOutput | ErrorOutput)
|
|
30
30
|
/**
|
|
@@ -122,6 +122,8 @@ kind: "mutation"
|
|
|
122
122
|
kind: "mutation-plan"
|
|
123
123
|
}) | (MutationInspectOutput & {
|
|
124
124
|
kind: "mutation-inspect"
|
|
125
|
+
}) | (MutationTasksOutput & {
|
|
126
|
+
kind: "mutation-tasks"
|
|
125
127
|
}))
|
|
126
128
|
/**
|
|
127
129
|
* Schema projection for the audit envelope's exact version.
|
|
@@ -157,15 +159,14 @@ export type AuditWorsened = ("warn" | "error" | "off")
|
|
|
157
159
|
/**
|
|
158
160
|
* What a gate concluded on this run.
|
|
159
161
|
*
|
|
160
|
-
*
|
|
161
|
-
*
|
|
162
|
-
* a
|
|
163
|
-
*
|
|
164
|
-
* is decided here.
|
|
162
|
+
* The status has four values, not two. A verdict can have a warn tier that
|
|
163
|
+
* does not fail the run, and a gate can stand down without a pass. A change
|
|
164
|
+
* from a boolean to a wider type later would change the type of a required
|
|
165
|
+
* member and the version of each envelope that carries it.
|
|
165
166
|
*/
|
|
166
167
|
export type GateStatus = ("pass" | "warn" | "fail" | "skipped")
|
|
167
168
|
/**
|
|
168
|
-
* Why a file counts for
|
|
169
|
+
* Why a file counts for a parse gate, other than a parser error.
|
|
169
170
|
*/
|
|
170
171
|
export type GateFileReason = "nesting-too-deep"
|
|
171
172
|
/**
|
|
@@ -1815,6 +1816,10 @@ export type MutationIncompleteReason = ("runtime-error" | "mutant-limit" | "time
|
|
|
1815
1816
|
* The quality of observed test-to-mutant evidence.
|
|
1816
1817
|
*/
|
|
1817
1818
|
export type MutationKillMatrixStatus = ("complete" | "incomplete" | "unavailable")
|
|
1819
|
+
/**
|
|
1820
|
+
* The quality of the evidence of one `--kill-matrix-for` target.
|
|
1821
|
+
*/
|
|
1822
|
+
export type MutationKillMatrixTargetStatus = ("complete" | "incomplete")
|
|
1818
1823
|
/**
|
|
1819
1824
|
* Which code a run mutates.
|
|
1820
1825
|
*/
|
|
@@ -1831,6 +1836,14 @@ export type MutantFailureKind = ("assertion" | "error" | "timeout")
|
|
|
1831
1836
|
* Why the type check did not check a survivor.
|
|
1832
1837
|
*/
|
|
1833
1838
|
export type MutationTypecheckSkipReason = ("no-project" | "not-type-checked" | "source-changed" | "file-missing" | "unsupported-file")
|
|
1839
|
+
/**
|
|
1840
|
+
* What a recheck shows for one mutant of the earlier report.
|
|
1841
|
+
*/
|
|
1842
|
+
export type MutationRecheckOutcome = ("killed" | "survived" | "no_coverage" | "tests_fail_on_original" | "unsettled")
|
|
1843
|
+
/**
|
|
1844
|
+
* How one mutant of a compare differs from the saved report.
|
|
1845
|
+
*/
|
|
1846
|
+
export type MutationCompareChange = ("regressed" | "inconclusive" | "added" | "removed")
|
|
1834
1847
|
/**
|
|
1835
1848
|
* Version singleton for a mutation plan.
|
|
1836
1849
|
*/
|
|
@@ -1851,6 +1864,10 @@ export type MutationInspectStatus = ("fresh" | "stale")
|
|
|
1851
1864
|
* Why an inspect packet is stale.
|
|
1852
1865
|
*/
|
|
1853
1866
|
export type MutationStaleReason = ("file-missing" | "no-digest" | "source-changed" | "mutant-not-reproduced")
|
|
1867
|
+
/**
|
|
1868
|
+
* Version singleton for the open tasks of a mutation report.
|
|
1869
|
+
*/
|
|
1870
|
+
export type MutationTasksSchemaVersion = "1"
|
|
1854
1871
|
/**
|
|
1855
1872
|
* Discriminator value for [`CodeClimateIssue::kind`].
|
|
1856
1873
|
*/
|
|
@@ -2028,27 +2045,16 @@ duplication_demoted: number
|
|
|
2028
2045
|
diff_risk_introduced: number
|
|
2029
2046
|
}
|
|
2030
2047
|
/**
|
|
2031
|
-
* The verdict of every gate a run evaluated, keyed by name.
|
|
2048
|
+
* The verdict of every gate that a run evaluated, keyed by gate name.
|
|
2032
2049
|
*
|
|
2033
|
-
*
|
|
2034
|
-
*
|
|
2035
|
-
*
|
|
2036
|
-
* (with `health-findings` when the combined run analyzed health),
|
|
2037
|
-
* `health-findings` on `health`, `security-advisory` on `security` and
|
|
2038
|
-
* `audit-verdict` on `audit`. A reader of the JSON sees a failing run without
|
|
2039
|
-
* the exit code. `dupes` has no default exit rule, so a `dupes` run that armed
|
|
2040
|
-
* no gate carries no object and always exits 0.
|
|
2050
|
+
* Each tool defines its own gate names. The name of a gate is the JSON member
|
|
2051
|
+
* name, and the members are in the order of the names. A tool never writes an
|
|
2052
|
+
* empty object. When no gate ran, the member is absent.
|
|
2041
2053
|
*
|
|
2042
|
-
*
|
|
2043
|
-
* gate
|
|
2054
|
+
* The key set is OPEN. A name that a consumer does not recognize means "some
|
|
2055
|
+
* gate", not an error.
|
|
2044
2056
|
*
|
|
2045
|
-
* The names this build can emit are `error-severity-findings`, `regression`,
|
|
2046
|
-
* `stale-baseline`, `baseline-growth`, `duplication-threshold`,
|
|
2047
|
-
* `duplication-findings`, `health-min-score`,
|
|
2048
|
-
* `health-min-severity`, `health-findings`, `health-coverage-gaps`,
|
|
2049
|
-
* `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`,
|
|
2050
|
-
* `type-aware-require` and `parse-error`. The set is OPEN: a name a consumer does not
|
|
2051
|
-
* recognise means "some gate", not an error.
|
|
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.
|
|
2052
2058
|
*/
|
|
2053
2059
|
export interface GateOutcomes {
|
|
2054
2060
|
[k: string]: GateOutcome
|
|
@@ -2056,70 +2062,59 @@ export interface GateOutcomes {
|
|
|
2056
2062
|
/**
|
|
2057
2063
|
* One gate's verdict on one run.
|
|
2058
2064
|
*
|
|
2059
|
-
* `status` and `enforced` answer different questions and
|
|
2060
|
-
*
|
|
2061
|
-
*
|
|
2062
|
-
*
|
|
2063
|
-
* failing gate there reports `status: fail` with `enforced: false`, and a
|
|
2064
|
-
* stale-baseline verdict published without `--fail-on-stale-baseline` reports
|
|
2065
|
-
* the same pair.
|
|
2065
|
+
* `status` and `enforced` answer different questions, and they can disagree.
|
|
2066
|
+
* `status` is what the rule concluded. `enforced` tells if a `fail` from this
|
|
2067
|
+
* gate makes the run exit non-zero. A run that was told never to fail reports
|
|
2068
|
+
* a failed gate as `status: fail` with `enforced: false`.
|
|
2066
2069
|
*
|
|
2067
2070
|
* **A gate fails the build when `status` is `fail` AND `enforced` is true.**
|
|
2068
|
-
*
|
|
2069
|
-
*
|
|
2070
|
-
* that armed
|
|
2071
|
-
*
|
|
2071
|
+
* One member alone does not decide it. `enforced` is true on every armed
|
|
2072
|
+
* gate, also on a gate that passed. Thus a gate rule on `enforced` alone
|
|
2073
|
+
* fails every run that armed a gate. Read `status` alone to decide what to
|
|
2074
|
+
* say. `warn` and `skipped` are not a pass and not a failure.
|
|
2072
2075
|
*/
|
|
2073
2076
|
export interface GateOutcome {
|
|
2074
2077
|
status: GateStatus
|
|
2075
2078
|
/**
|
|
2076
2079
|
* True when a `fail` from this gate makes the run exit non-zero. False
|
|
2077
|
-
* when the
|
|
2078
|
-
* armed, the run was told never to fail, or the
|
|
2079
|
-
*
|
|
2080
|
+
* when the tool publishes the verdict for information only: no flag or
|
|
2081
|
+
* config armed the gate, the run was told never to fail, or the output
|
|
2082
|
+
* format exits 0 for the gate.
|
|
2080
2083
|
*/
|
|
2081
2084
|
enforced: boolean
|
|
2082
2085
|
/**
|
|
2083
|
-
* The measured value the gate compared, when there is one:
|
|
2084
|
-
* percentage,
|
|
2085
|
-
*
|
|
2086
|
-
*
|
|
2087
|
-
* the number of files in `files`. Whole numbers are
|
|
2088
|
-
* carried as JSON numbers, so a count of three reads as `3.0`. Absent for
|
|
2089
|
-
* gates that compare no number.
|
|
2086
|
+
* The measured value that the gate compared, when there is one: for
|
|
2087
|
+
* example a percentage, a score, a number of findings, or the number of
|
|
2088
|
+
* files in `files`. A whole number is a JSON number, so a count of three
|
|
2089
|
+
* reads as `3.0`. Absent for a gate that compares no number.
|
|
2090
2090
|
*/
|
|
2091
2091
|
observed?: (number | null)
|
|
2092
2092
|
/**
|
|
2093
|
-
* The configured limit `observed`
|
|
2094
|
-
* Absent for
|
|
2093
|
+
* The configured limit that the gate compared `observed` against, when
|
|
2094
|
+
* there is one. Absent for a gate that compares no number.
|
|
2095
2095
|
*/
|
|
2096
2096
|
threshold?: (number | null)
|
|
2097
2097
|
/**
|
|
2098
2098
|
* How the limit was spelled, for a gate whose `threshold` number does not
|
|
2099
|
-
* carry its
|
|
2100
|
-
*
|
|
2101
|
-
*
|
|
2102
|
-
*
|
|
2103
|
-
* tolerance as the user wrote it (`"50%"` or `"5"`), because `threshold`
|
|
2104
|
-
* there is the allowance in issues and the percentage would otherwise be
|
|
2105
|
-
* unrecoverable on the grouped envelope, which carries no `regression`
|
|
2106
|
-
* object. Absent for gates whose numbers speak for themselves.
|
|
2099
|
+
* carry its unit. Examples are a severity floor such as `high`, the rule
|
|
2100
|
+
* severity that the gate counts such as `error`, or a tolerance as the
|
|
2101
|
+
* user wrote it, such as `"50%"`. Each gate name documents its label.
|
|
2102
|
+
* Absent for a gate whose numbers have a clear meaning without a label.
|
|
2107
2103
|
*/
|
|
2108
2104
|
threshold_label?: (string | null)
|
|
2109
2105
|
/**
|
|
2110
|
-
* The files the gate judged, for a gate that judges files
|
|
2111
|
-
* number.
|
|
2112
|
-
*
|
|
2106
|
+
* The files that the gate judged, for a gate that judges files and not a
|
|
2107
|
+
* number. One item for each file, sorted by path. Absent when the list is
|
|
2108
|
+
* empty.
|
|
2113
2109
|
*/
|
|
2114
2110
|
files?: GateFile[]
|
|
2115
2111
|
}
|
|
2116
2112
|
/**
|
|
2117
|
-
* One file a file-judging gate names, with the reason the gate
|
|
2113
|
+
* One file that a file-judging gate names, with the reason that the gate
|
|
2114
|
+
* counted it.
|
|
2118
2115
|
*
|
|
2119
|
-
*
|
|
2120
|
-
* `
|
|
2121
|
-
* so a consumer can act on the gate without a join. With `reason` set, the
|
|
2122
|
-
* count and the parser outcome are placeholders.
|
|
2116
|
+
* A gate that counts files that did not parse cleanly writes this item. When
|
|
2117
|
+
* `reason` is set, `error_count` and `panicked` hold fixed values.
|
|
2123
2118
|
*/
|
|
2124
2119
|
export interface GateFile {
|
|
2125
2120
|
/**
|
|
@@ -2131,7 +2126,7 @@ path: string
|
|
|
2131
2126
|
*/
|
|
2132
2127
|
error_count: number
|
|
2133
2128
|
/**
|
|
2134
|
-
* True when the parser stopped in the file
|
|
2129
|
+
* True when the parser stopped in the file and did not recover, so the
|
|
2135
2130
|
* analysis saw only the part before the error. `true` when `reason` is set.
|
|
2136
2131
|
*/
|
|
2137
2132
|
panicked: boolean
|
|
@@ -3145,6 +3140,13 @@ unused_enum_members: UnusedEnumMemberFinding[]
|
|
|
3145
3140
|
* patterns.
|
|
3146
3141
|
*/
|
|
3147
3142
|
unused_class_members: UnusedClassMemberFinding[]
|
|
3143
|
+
/**
|
|
3144
|
+
* Exported members of an exported TypeScript namespace that no code
|
|
3145
|
+
* reads. Wrapped in [`UnusedNamespaceMemberFinding`]: same inner
|
|
3146
|
+
* [`UnusedMember`] struct as `unused_enum_members`. `member_name` is the
|
|
3147
|
+
* dotted path from the exported namespace (`Inner.x`).
|
|
3148
|
+
*/
|
|
3149
|
+
unused_namespace_members?: UnusedNamespaceMemberFinding[]
|
|
3148
3150
|
/**
|
|
3149
3151
|
* Store members (Pinia `state` / `getters` / `actions` key, or a
|
|
3150
3152
|
* setup-store returned key) declared but never accessed by any consumer
|
|
@@ -3165,6 +3167,12 @@ unresolved_imports: UnresolvedImportFinding[]
|
|
|
3165
3167
|
* [`UnlistedDependencyFinding`].
|
|
3166
3168
|
*/
|
|
3167
3169
|
unlisted_dependencies: UnlistedDependencyFinding[]
|
|
3170
|
+
/**
|
|
3171
|
+
* Binaries that package.json scripts or process calls run, but that no
|
|
3172
|
+
* installed or listed package provides. Wrapped in
|
|
3173
|
+
* [`UnlistedBinaryFinding`].
|
|
3174
|
+
*/
|
|
3175
|
+
unlisted_binaries?: UnlistedBinaryFinding[]
|
|
3168
3176
|
/**
|
|
3169
3177
|
* Exports with the same name across multiple modules. Wrapped in
|
|
3170
3178
|
* [`DuplicateExportFinding`] so each entry carries a typed `actions`
|
|
@@ -3172,6 +3180,11 @@ unlisted_dependencies: UnlistedDependencyFinding[]
|
|
|
3172
3180
|
* snippet wired in at wrapper construction.
|
|
3173
3181
|
*/
|
|
3174
3182
|
duplicate_exports: DuplicateExportFinding[]
|
|
3183
|
+
/**
|
|
3184
|
+
* One module that exports one binding under two or more names. Wrapped
|
|
3185
|
+
* in [`DuplicateExportAliasFinding`]. Default severity is `warn`.
|
|
3186
|
+
*/
|
|
3187
|
+
duplicate_export_aliases?: DuplicateExportAliasFinding[]
|
|
3175
3188
|
/**
|
|
3176
3189
|
* Production dependencies only used via type-only imports (could be
|
|
3177
3190
|
* devDependencies). Only populated in production mode. Wrapped in
|
|
@@ -3649,6 +3662,10 @@ unused_enum_members: number
|
|
|
3649
3662
|
* Unused class members.
|
|
3650
3663
|
*/
|
|
3651
3664
|
unused_class_members: number
|
|
3665
|
+
/**
|
|
3666
|
+
* Unused namespace members.
|
|
3667
|
+
*/
|
|
3668
|
+
unused_namespace_members?: number
|
|
3652
3669
|
/**
|
|
3653
3670
|
* Unused store members.
|
|
3654
3671
|
*/
|
|
@@ -3715,10 +3732,19 @@ unresolved_imports: number
|
|
|
3715
3732
|
* Dependencies imported but absent from `package.json`.
|
|
3716
3733
|
*/
|
|
3717
3734
|
unlisted_dependencies: number
|
|
3735
|
+
/**
|
|
3736
|
+
* Binaries that scripts or process calls run, but that no installed or
|
|
3737
|
+
* listed package provides.
|
|
3738
|
+
*/
|
|
3739
|
+
unlisted_binaries?: number
|
|
3718
3740
|
/**
|
|
3719
3741
|
* Same-named exports declared in more than one module.
|
|
3720
3742
|
*/
|
|
3721
3743
|
duplicate_exports: number
|
|
3744
|
+
/**
|
|
3745
|
+
* Bindings that one module exports under two or more names.
|
|
3746
|
+
*/
|
|
3747
|
+
duplicate_export_aliases?: number
|
|
3722
3748
|
/**
|
|
3723
3749
|
* Production dependencies only used via type-only imports (could be
|
|
3724
3750
|
* devDependencies). Only populated in production mode.
|
|
@@ -4556,11 +4582,12 @@ export interface UnusedEnumMemberFinding {
|
|
|
4556
4582
|
*/
|
|
4557
4583
|
path: string
|
|
4558
4584
|
/**
|
|
4559
|
-
* Name of the parent enum or
|
|
4585
|
+
* Name of the parent enum, class, store, or exported namespace.
|
|
4560
4586
|
*/
|
|
4561
4587
|
parent_name: string
|
|
4562
4588
|
/**
|
|
4563
|
-
* Name of the unused member.
|
|
4589
|
+
* Name of the unused member. A member of a nested namespace has the dotted
|
|
4590
|
+
* path from the exported namespace (`Inner.x`).
|
|
4564
4591
|
*/
|
|
4565
4592
|
member_name: string
|
|
4566
4593
|
kind: MemberKind
|
|
@@ -4619,11 +4646,12 @@ export interface UnusedClassMemberFinding {
|
|
|
4619
4646
|
*/
|
|
4620
4647
|
path: string
|
|
4621
4648
|
/**
|
|
4622
|
-
* Name of the parent enum or
|
|
4649
|
+
* Name of the parent enum, class, store, or exported namespace.
|
|
4623
4650
|
*/
|
|
4624
4651
|
parent_name: string
|
|
4625
4652
|
/**
|
|
4626
|
-
* Name of the unused member.
|
|
4653
|
+
* Name of the unused member. A member of a nested namespace has the dotted
|
|
4654
|
+
* path from the exported namespace (`Inner.x`).
|
|
4627
4655
|
*/
|
|
4628
4656
|
member_name: string
|
|
4629
4657
|
kind: MemberKind
|
|
@@ -4675,6 +4703,71 @@ effective_severity?: (EffectiveSeverity | null)
|
|
|
4675
4703
|
*/
|
|
4676
4704
|
reachability_caveats?: ReachabilityCaveat[]
|
|
4677
4705
|
}
|
|
4706
|
+
/**
|
|
4707
|
+
* Wire-shape envelope for an [`UnusedMember`] finding consumed under the
|
|
4708
|
+
* `unused_namespace_members` key (an exported member of an exported
|
|
4709
|
+
* TypeScript namespace that no code reads). `member_name` is the dotted path
|
|
4710
|
+
* from the exported namespace, for example `Inner.x`. Emits only a
|
|
4711
|
+
* line-level suppress action: a member can be a multi-line function, class
|
|
4712
|
+
* or nested namespace, so there is no safe one-line auto-fix.
|
|
4713
|
+
*/
|
|
4714
|
+
export interface UnusedNamespaceMemberFinding {
|
|
4715
|
+
/**
|
|
4716
|
+
* File containing the unused member.
|
|
4717
|
+
*/
|
|
4718
|
+
path: string
|
|
4719
|
+
/**
|
|
4720
|
+
* Name of the parent enum, class, store, or exported namespace.
|
|
4721
|
+
*/
|
|
4722
|
+
parent_name: string
|
|
4723
|
+
/**
|
|
4724
|
+
* Name of the unused member. A member of a nested namespace has the dotted
|
|
4725
|
+
* path from the exported namespace (`Inner.x`).
|
|
4726
|
+
*/
|
|
4727
|
+
member_name: string
|
|
4728
|
+
kind: MemberKind
|
|
4729
|
+
/**
|
|
4730
|
+
* 1-based line number.
|
|
4731
|
+
*/
|
|
4732
|
+
line: number
|
|
4733
|
+
/**
|
|
4734
|
+
* 0-based byte column offset.
|
|
4735
|
+
*/
|
|
4736
|
+
col: number
|
|
4737
|
+
/**
|
|
4738
|
+
* Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
|
|
4739
|
+
* `~<k>` suffix when several findings of one type share an identity.
|
|
4740
|
+
* Line and column are not inputs, so the id survives line shifts,
|
|
4741
|
+
* reformats and reorders. A rename of the file or the symbol gives a
|
|
4742
|
+
* new id. Absent in output from older versions.
|
|
4743
|
+
*/
|
|
4744
|
+
finding_id?: (string | null)
|
|
4745
|
+
/**
|
|
4746
|
+
* Suggested next steps. Always emitted (possibly empty for
|
|
4747
|
+
* forward-compat).
|
|
4748
|
+
*/
|
|
4749
|
+
actions: IssueAction[]
|
|
4750
|
+
/**
|
|
4751
|
+
* Set by the audit pass when this finding is introduced relative to
|
|
4752
|
+
* the merge-base.
|
|
4753
|
+
*/
|
|
4754
|
+
introduced?: (AuditIntroduced | null)
|
|
4755
|
+
/**
|
|
4756
|
+
* Gate severity of this finding after `rules` and `overrides[].rules`
|
|
4757
|
+
* resolve for its path. CI formats read it for the annotation, SARIF
|
|
4758
|
+
* and CodeClimate level. Absent in output from older versions. Not
|
|
4759
|
+
* part of the finding identity, baseline keys or fingerprints.
|
|
4760
|
+
*/
|
|
4761
|
+
effective_severity?: (EffectiveSeverity | null)
|
|
4762
|
+
/**
|
|
4763
|
+
* Advisory caveats on the verdict behind this finding. A namespace
|
|
4764
|
+
* member takes the member rule unchanged: any module this run analyzed
|
|
4765
|
+
* incompletely can hold the access that credits it. Sorted,
|
|
4766
|
+
* deduplicated, and omitted from the wire when empty. This is disclosure
|
|
4767
|
+
* only, because a namespace member offers no mutation.
|
|
4768
|
+
*/
|
|
4769
|
+
reachability_caveats?: ReachabilityCaveat[]
|
|
4770
|
+
}
|
|
4678
4771
|
/**
|
|
4679
4772
|
* Wire-shape envelope for an [`UnusedMember`] finding consumed under the
|
|
4680
4773
|
* `unused_store_members` key (a Pinia `state` / `getters` / `actions` key, or
|
|
@@ -4691,11 +4784,12 @@ export interface UnusedStoreMemberFinding {
|
|
|
4691
4784
|
*/
|
|
4692
4785
|
path: string
|
|
4693
4786
|
/**
|
|
4694
|
-
* Name of the parent enum or
|
|
4787
|
+
* Name of the parent enum, class, store, or exported namespace.
|
|
4695
4788
|
*/
|
|
4696
4789
|
parent_name: string
|
|
4697
4790
|
/**
|
|
4698
|
-
* Name of the unused member.
|
|
4791
|
+
* Name of the unused member. A member of a nested namespace has the dotted
|
|
4792
|
+
* path from the exported namespace (`Inner.x`).
|
|
4699
4793
|
*/
|
|
4700
4794
|
member_name: string
|
|
4701
4795
|
kind: MemberKind
|
|
@@ -4856,6 +4950,68 @@ line: number
|
|
|
4856
4950
|
*/
|
|
4857
4951
|
col: number
|
|
4858
4952
|
}
|
|
4953
|
+
/**
|
|
4954
|
+
* Wire-shape envelope for an [`UnlistedBinary`] finding. Carries an
|
|
4955
|
+
* `install-dependency` primary (non-auto-fixable) plus an `ignoreBinaries`
|
|
4956
|
+
* config suppress.
|
|
4957
|
+
*/
|
|
4958
|
+
export interface UnlistedBinaryFinding {
|
|
4959
|
+
/**
|
|
4960
|
+
* The binary name as the command runs it (for example `ffmpeg`).
|
|
4961
|
+
*/
|
|
4962
|
+
binary_name: string
|
|
4963
|
+
/**
|
|
4964
|
+
* The sites that run this binary.
|
|
4965
|
+
*/
|
|
4966
|
+
used_in: BinaryUseSite[]
|
|
4967
|
+
/**
|
|
4968
|
+
* Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
|
|
4969
|
+
* `~<k>` suffix when several findings of one type share an identity.
|
|
4970
|
+
* Line and column are not inputs, so the id survives line shifts,
|
|
4971
|
+
* reformats and reorders. Absent in output from older versions.
|
|
4972
|
+
*/
|
|
4973
|
+
finding_id?: (string | null)
|
|
4974
|
+
/**
|
|
4975
|
+
* Suggested next steps. Always emitted (possibly empty for
|
|
4976
|
+
* forward-compat).
|
|
4977
|
+
*/
|
|
4978
|
+
actions: IssueAction[]
|
|
4979
|
+
/**
|
|
4980
|
+
* Set by the audit pass when this finding is introduced relative to
|
|
4981
|
+
* the merge-base.
|
|
4982
|
+
*/
|
|
4983
|
+
introduced?: (AuditIntroduced | null)
|
|
4984
|
+
/**
|
|
4985
|
+
* Gate severity of this finding after `rules` and `overrides[].rules`
|
|
4986
|
+
* resolve for its path. CI formats read it for the annotation, SARIF
|
|
4987
|
+
* and CodeClimate level. Absent in output from older versions. Not
|
|
4988
|
+
* part of the finding identity, baseline keys or fingerprints.
|
|
4989
|
+
*/
|
|
4990
|
+
effective_severity?: (EffectiveSeverity | null)
|
|
4991
|
+
}
|
|
4992
|
+
/**
|
|
4993
|
+
* A location that runs a binary.
|
|
4994
|
+
*/
|
|
4995
|
+
export interface BinaryUseSite {
|
|
4996
|
+
/**
|
|
4997
|
+
* The `package.json` that declares the script, or the source file that
|
|
4998
|
+
* makes the process call.
|
|
4999
|
+
*/
|
|
5000
|
+
path: string
|
|
5001
|
+
/**
|
|
5002
|
+
* 1-based line number.
|
|
5003
|
+
*/
|
|
5004
|
+
line: number
|
|
5005
|
+
/**
|
|
5006
|
+
* 0-based byte column offset.
|
|
5007
|
+
*/
|
|
5008
|
+
col: number
|
|
5009
|
+
/**
|
|
5010
|
+
* The name of the package.json script that runs the binary. Absent for
|
|
5011
|
+
* a process call in source.
|
|
5012
|
+
*/
|
|
5013
|
+
script_name?: (string | null)
|
|
5014
|
+
}
|
|
4859
5015
|
/**
|
|
4860
5016
|
* Wire-shape envelope for a [`DuplicateExport`] finding. Carries up to
|
|
4861
5017
|
* three actions in position-locked order: an `add-to-config` `ignoreExports`
|
|
@@ -4921,6 +5077,81 @@ line: number
|
|
|
4921
5077
|
*/
|
|
4922
5078
|
col: number
|
|
4923
5079
|
}
|
|
5080
|
+
/**
|
|
5081
|
+
* Wire-shape envelope for a [`DuplicateExportAlias`] finding. There is no
|
|
5082
|
+
* safe auto-fix: a consumer outside the project can import any of the
|
|
5083
|
+
* names. Actions are manual remediation guidance plus a line-level
|
|
5084
|
+
* suppress.
|
|
5085
|
+
*/
|
|
5086
|
+
export interface DuplicateExportAliasFinding {
|
|
5087
|
+
/**
|
|
5088
|
+
* The module that exports the binding.
|
|
5089
|
+
*/
|
|
5090
|
+
path: string
|
|
5091
|
+
/**
|
|
5092
|
+
* The local name of the binding. For a re-export, the name that the
|
|
5093
|
+
* source module exports.
|
|
5094
|
+
*/
|
|
5095
|
+
local_name: string
|
|
5096
|
+
/**
|
|
5097
|
+
* The export names of the binding, in source order.
|
|
5098
|
+
*/
|
|
5099
|
+
export_names: string[]
|
|
5100
|
+
/**
|
|
5101
|
+
* 1-based line number of the first export of the binding.
|
|
5102
|
+
*/
|
|
5103
|
+
line: number
|
|
5104
|
+
/**
|
|
5105
|
+
* 0-based byte column offset of the first export of the binding.
|
|
5106
|
+
*/
|
|
5107
|
+
col: number
|
|
5108
|
+
/**
|
|
5109
|
+
* One location for each export name, in source order.
|
|
5110
|
+
*/
|
|
5111
|
+
locations: DuplicateExportAliasLocation[]
|
|
5112
|
+
/**
|
|
5113
|
+
* Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
|
|
5114
|
+
* `~<k>` suffix when several findings of one type share an identity.
|
|
5115
|
+
* Line and column are not inputs, so the id survives line shifts,
|
|
5116
|
+
* reformats and reorders. A rename of the file or the binding gives a
|
|
5117
|
+
* new id. Absent in output from older versions.
|
|
5118
|
+
*/
|
|
5119
|
+
finding_id?: (string | null)
|
|
5120
|
+
/**
|
|
5121
|
+
* Suggested next steps. Always emitted (possibly empty for
|
|
5122
|
+
* forward-compat).
|
|
5123
|
+
*/
|
|
5124
|
+
actions: IssueAction[]
|
|
5125
|
+
/**
|
|
5126
|
+
* Set by the audit pass when this finding is introduced relative to
|
|
5127
|
+
* the merge-base.
|
|
5128
|
+
*/
|
|
5129
|
+
introduced?: (AuditIntroduced | null)
|
|
5130
|
+
/**
|
|
5131
|
+
* Gate severity of this finding after `rules` and `overrides[].rules`
|
|
5132
|
+
* resolve for its path. CI formats read it for the annotation, SARIF
|
|
5133
|
+
* and CodeClimate level. Absent in output from older versions. Not
|
|
5134
|
+
* part of the finding identity, baseline keys or fingerprints.
|
|
5135
|
+
*/
|
|
5136
|
+
effective_severity?: (EffectiveSeverity | null)
|
|
5137
|
+
}
|
|
5138
|
+
/**
|
|
5139
|
+
* One export name of a [`DuplicateExportAlias`].
|
|
5140
|
+
*/
|
|
5141
|
+
export interface DuplicateExportAliasLocation {
|
|
5142
|
+
/**
|
|
5143
|
+
* The export name at this location (`default` for a default export).
|
|
5144
|
+
*/
|
|
5145
|
+
export_name: string
|
|
5146
|
+
/**
|
|
5147
|
+
* 1-based line number.
|
|
5148
|
+
*/
|
|
5149
|
+
line: number
|
|
5150
|
+
/**
|
|
5151
|
+
* 0-based byte column offset.
|
|
5152
|
+
*/
|
|
5153
|
+
col: number
|
|
5154
|
+
}
|
|
4924
5155
|
/**
|
|
4925
5156
|
* Wire-shape envelope for a [`TypeOnlyDependency`] finding. Carries a
|
|
4926
5157
|
* `move-to-dev` primary plus the standard `ignoreDependencies` config
|
|
@@ -9775,6 +10006,15 @@ actionability_reason?: (string | null)
|
|
|
9775
10006
|
*/
|
|
9776
10007
|
actionability_verdict?: (string | null)
|
|
9777
10008
|
provenance: RuntimeCoverageProvenance
|
|
10009
|
+
/**
|
|
10010
|
+
* Fields of the Fallow Cloud runtime-context answer that the CLI does not
|
|
10011
|
+
* read, as the cloud sent them: for example `capabilities`, `page`,
|
|
10012
|
+
* `context_unavailable` and `commit_shas`. Cloud mode only; omitted in
|
|
10013
|
+
* local mode. Context only.
|
|
10014
|
+
*/
|
|
10015
|
+
cloud_context?: ({
|
|
10016
|
+
[k: string]: unknown
|
|
10017
|
+
} | null)
|
|
9778
10018
|
}
|
|
9779
10019
|
/**
|
|
9780
10020
|
* Summary block mirroring `fallow_cov_protocol::Summary` (0.3 shape).
|
|
@@ -9929,6 +10169,18 @@ actions?: RuntimeCoverageAction[]
|
|
|
9929
10169
|
* from JSON when absent.
|
|
9930
10170
|
*/
|
|
9931
10171
|
discriminators?: (RuntimeCoverageDiscriminators | null)
|
|
10172
|
+
/**
|
|
10173
|
+
* Production signals of the function from the Fallow Cloud runtime-context
|
|
10174
|
+
* row, as the cloud sent them: for example `errors`, `performance` (with
|
|
10175
|
+
* `cpu` and `browser`), `branches`, `covered_by_test` and
|
|
10176
|
+
* `test_hit_count`. The block holds only the row fields that the CLI does
|
|
10177
|
+
* not read for the verdict, and a newer cloud can add keys. Cloud mode
|
|
10178
|
+
* only; omitted in local mode. Context only: these signals never change
|
|
10179
|
+
* the verdict, the confidence or the actions.
|
|
10180
|
+
*/
|
|
10181
|
+
cloud_context?: ({
|
|
10182
|
+
[k: string]: unknown
|
|
10183
|
+
} | null)
|
|
9932
10184
|
}
|
|
9933
10185
|
/**
|
|
9934
10186
|
* Supporting evidence for a finding (mirrors `fallow_cov_protocol::Evidence`).
|
|
@@ -10090,6 +10342,14 @@ actions?: RuntimeCoverageAction[]
|
|
|
10090
10342
|
* in this checkout.
|
|
10091
10343
|
*/
|
|
10092
10344
|
optimization_target?: (RuntimeCoverageOptimizationTarget | null)
|
|
10345
|
+
/**
|
|
10346
|
+
* Production signals of the hot function from the Fallow Cloud
|
|
10347
|
+
* runtime-context row, in the shape of `RuntimeCoverageFinding::cloud_context`.
|
|
10348
|
+
* Cloud mode only; omitted in local mode. Context only.
|
|
10349
|
+
*/
|
|
10350
|
+
cloud_context?: ({
|
|
10351
|
+
[k: string]: unknown
|
|
10352
|
+
} | null)
|
|
10093
10353
|
}
|
|
10094
10354
|
/**
|
|
10095
10355
|
* Speed-work inputs for one hot function: how often it runs and how much
|
|
@@ -10168,6 +10428,16 @@ caller_count_weighted_by_traffic: number
|
|
|
10168
10428
|
*/
|
|
10169
10429
|
deploys_touched?: (number | null)
|
|
10170
10430
|
risk_band: RuntimeCoverageRiskBand
|
|
10431
|
+
/**
|
|
10432
|
+
* Fields of the Fallow Cloud blast-radius row that the CLI does not read,
|
|
10433
|
+
* as the cloud sent them: for example `production_callers`,
|
|
10434
|
+
* `caller_sites`, `test_caller_count`, `non_runtime_caller_count` and
|
|
10435
|
+
* `context_unavailable_reason`. Cloud mode only, and only when the cloud
|
|
10436
|
+
* sent the blast-radius rows. Context only: the risk band does not read it.
|
|
10437
|
+
*/
|
|
10438
|
+
cloud_context?: ({
|
|
10439
|
+
[k: string]: unknown
|
|
10440
|
+
} | null)
|
|
10171
10441
|
}
|
|
10172
10442
|
/**
|
|
10173
10443
|
* One production-importance entry in `runtime_coverage.importance`, scoring
|
|
@@ -11312,6 +11582,15 @@ keyframes_unreferenced: number
|
|
|
11312
11582
|
* a removed animation.
|
|
11313
11583
|
*/
|
|
11314
11584
|
keyframes_undefined: number
|
|
11585
|
+
/**
|
|
11586
|
+
* `@keyframes` with no literal reference that a Sass or Less source
|
|
11587
|
+
* defines and that the unreferenced check skips. A Sass or Less
|
|
11588
|
+
* animation value with a variable or an interpolation that fallow cannot
|
|
11589
|
+
* resolve can name any such block. These are not in
|
|
11590
|
+
* `keyframes_unreferenced`. A `@keyframes` block in plain CSS is always
|
|
11591
|
+
* checked.
|
|
11592
|
+
*/
|
|
11593
|
+
keyframes_unchecked: number
|
|
11315
11594
|
/**
|
|
11316
11595
|
* Total Vue `<style scoped>` classes used nowhere else in their component
|
|
11317
11596
|
* (cleanup candidates), across all SFCs.
|
|
@@ -12526,10 +12805,27 @@ errors?: (InspectCloudErrors | null)
|
|
|
12526
12805
|
* Self CPU milliseconds per profiled hour. `None` when not measured.
|
|
12527
12806
|
*/
|
|
12528
12807
|
cpu_ms_per_hour?: (number | null)
|
|
12808
|
+
/**
|
|
12809
|
+
* Long animation frame milliseconds per hour of visible page time in
|
|
12810
|
+
* the browser. `None` when not measured (a server function, or a
|
|
12811
|
+
* browser without the API).
|
|
12812
|
+
*/
|
|
12813
|
+
browser_long_frame_ms_per_hour?: (number | null)
|
|
12529
12814
|
/**
|
|
12530
12815
|
* Branch ranges that never ran. `None` when not measured.
|
|
12531
12816
|
*/
|
|
12532
12817
|
never_run_ranges?: (number | null)
|
|
12818
|
+
/**
|
|
12819
|
+
* Files that import the function, from the static caller graph. `None`
|
|
12820
|
+
* when not known.
|
|
12821
|
+
*/
|
|
12822
|
+
static_callers?: (number | null)
|
|
12823
|
+
/**
|
|
12824
|
+
* Functions that called this one in the CPU profiles of the deployment,
|
|
12825
|
+
* most samples first. `None` when the deployment has no CPU profile; an
|
|
12826
|
+
* empty list means a profile without a caller.
|
|
12827
|
+
*/
|
|
12828
|
+
production_callers?: (InspectCloudCaller[] | null)
|
|
12533
12829
|
/**
|
|
12534
12830
|
* One-line summary from the cloud.
|
|
12535
12831
|
*/
|
|
@@ -12548,6 +12844,31 @@ groups: number
|
|
|
12548
12844
|
*/
|
|
12549
12845
|
events: number
|
|
12550
12846
|
}
|
|
12847
|
+
/**
|
|
12848
|
+
* One production caller of an [`InspectCloudFunction`].
|
|
12849
|
+
*/
|
|
12850
|
+
export interface InspectCloudCaller {
|
|
12851
|
+
/**
|
|
12852
|
+
* Stable id of the calling function.
|
|
12853
|
+
*/
|
|
12854
|
+
stable_id?: (string | null)
|
|
12855
|
+
/**
|
|
12856
|
+
* File of the calling function, relative to the repository root.
|
|
12857
|
+
*/
|
|
12858
|
+
file: string
|
|
12859
|
+
/**
|
|
12860
|
+
* Name of the calling function.
|
|
12861
|
+
*/
|
|
12862
|
+
function: string
|
|
12863
|
+
/**
|
|
12864
|
+
* 1-based start line of the calling function.
|
|
12865
|
+
*/
|
|
12866
|
+
line?: (number | null)
|
|
12867
|
+
/**
|
|
12868
|
+
* CPU profile samples with this caller to callee step on the stack.
|
|
12869
|
+
*/
|
|
12870
|
+
samples: number
|
|
12871
|
+
}
|
|
12551
12872
|
/**
|
|
12552
12873
|
* One local function without a deployed function.
|
|
12553
12874
|
*/
|
|
@@ -12814,6 +13135,12 @@ imported_by: string[]
|
|
|
12814
13135
|
* Re-exports declared by this file.
|
|
12815
13136
|
*/
|
|
12816
13137
|
re_exports: TracedReExport[]
|
|
13138
|
+
/**
|
|
13139
|
+
* The package.json script key that makes this file an entry point, e.g.
|
|
13140
|
+
* `build`. Absent when no script makes the file an entry point
|
|
13141
|
+
* (issue #4175).
|
|
13142
|
+
*/
|
|
13143
|
+
entry_script?: (string | null)
|
|
12817
13144
|
/**
|
|
12818
13145
|
* The configs that make this file an entry point through Module
|
|
12819
13146
|
* Federation `exposes`, one per config. Absent when no Federation config
|
|
@@ -14337,8 +14664,8 @@ name: string
|
|
|
14337
14664
|
*/
|
|
14338
14665
|
path: string
|
|
14339
14666
|
/**
|
|
14340
|
-
* Whether the
|
|
14341
|
-
*
|
|
14667
|
+
* Whether another workspace of the project lists this package as a
|
|
14668
|
+
* dependency.
|
|
14342
14669
|
*/
|
|
14343
14670
|
is_internal_dependency: boolean
|
|
14344
14671
|
}
|
|
@@ -15116,6 +15443,13 @@ unused_enum_members: UnusedEnumMemberFinding[]
|
|
|
15116
15443
|
* patterns.
|
|
15117
15444
|
*/
|
|
15118
15445
|
unused_class_members: UnusedClassMemberFinding[]
|
|
15446
|
+
/**
|
|
15447
|
+
* Exported members of an exported TypeScript namespace that no code
|
|
15448
|
+
* reads. Wrapped in [`UnusedNamespaceMemberFinding`]: same inner
|
|
15449
|
+
* [`UnusedMember`] struct as `unused_enum_members`. `member_name` is the
|
|
15450
|
+
* dotted path from the exported namespace (`Inner.x`).
|
|
15451
|
+
*/
|
|
15452
|
+
unused_namespace_members?: UnusedNamespaceMemberFinding[]
|
|
15119
15453
|
/**
|
|
15120
15454
|
* Store members (Pinia `state` / `getters` / `actions` key, or a
|
|
15121
15455
|
* setup-store returned key) declared but never accessed by any consumer
|
|
@@ -15136,6 +15470,12 @@ unresolved_imports: UnresolvedImportFinding[]
|
|
|
15136
15470
|
* [`UnlistedDependencyFinding`].
|
|
15137
15471
|
*/
|
|
15138
15472
|
unlisted_dependencies: UnlistedDependencyFinding[]
|
|
15473
|
+
/**
|
|
15474
|
+
* Binaries that package.json scripts or process calls run, but that no
|
|
15475
|
+
* installed or listed package provides. Wrapped in
|
|
15476
|
+
* [`UnlistedBinaryFinding`].
|
|
15477
|
+
*/
|
|
15478
|
+
unlisted_binaries?: UnlistedBinaryFinding[]
|
|
15139
15479
|
/**
|
|
15140
15480
|
* Exports with the same name across multiple modules. Wrapped in
|
|
15141
15481
|
* [`DuplicateExportFinding`] so each entry carries a typed `actions`
|
|
@@ -15143,6 +15483,11 @@ unlisted_dependencies: UnlistedDependencyFinding[]
|
|
|
15143
15483
|
* snippet wired in at wrapper construction.
|
|
15144
15484
|
*/
|
|
15145
15485
|
duplicate_exports: DuplicateExportFinding[]
|
|
15486
|
+
/**
|
|
15487
|
+
* One module that exports one binding under two or more names. Wrapped
|
|
15488
|
+
* in [`DuplicateExportAliasFinding`]. Default severity is `warn`.
|
|
15489
|
+
*/
|
|
15490
|
+
duplicate_export_aliases?: DuplicateExportAliasFinding[]
|
|
15146
15491
|
/**
|
|
15147
15492
|
* Production dependencies only used via type-only imports (could be
|
|
15148
15493
|
* devDependencies). Only populated in production mode. Wrapped in
|
|
@@ -16844,6 +17189,13 @@ unused_enum_members: UnusedEnumMemberFinding[]
|
|
|
16844
17189
|
* patterns.
|
|
16845
17190
|
*/
|
|
16846
17191
|
unused_class_members: UnusedClassMemberFinding[]
|
|
17192
|
+
/**
|
|
17193
|
+
* Exported members of an exported TypeScript namespace that no code
|
|
17194
|
+
* reads. Wrapped in [`UnusedNamespaceMemberFinding`]: same inner
|
|
17195
|
+
* [`UnusedMember`] struct as `unused_enum_members`. `member_name` is the
|
|
17196
|
+
* dotted path from the exported namespace (`Inner.x`).
|
|
17197
|
+
*/
|
|
17198
|
+
unused_namespace_members?: UnusedNamespaceMemberFinding[]
|
|
16847
17199
|
/**
|
|
16848
17200
|
* Store members (Pinia `state` / `getters` / `actions` key, or a
|
|
16849
17201
|
* setup-store returned key) declared but never accessed by any consumer
|
|
@@ -16864,6 +17216,12 @@ unresolved_imports: UnresolvedImportFinding[]
|
|
|
16864
17216
|
* [`UnlistedDependencyFinding`].
|
|
16865
17217
|
*/
|
|
16866
17218
|
unlisted_dependencies: UnlistedDependencyFinding[]
|
|
17219
|
+
/**
|
|
17220
|
+
* Binaries that package.json scripts or process calls run, but that no
|
|
17221
|
+
* installed or listed package provides. Wrapped in
|
|
17222
|
+
* [`UnlistedBinaryFinding`].
|
|
17223
|
+
*/
|
|
17224
|
+
unlisted_binaries?: UnlistedBinaryFinding[]
|
|
16867
17225
|
/**
|
|
16868
17226
|
* Exports with the same name across multiple modules. Wrapped in
|
|
16869
17227
|
* [`DuplicateExportFinding`] so each entry carries a typed `actions`
|
|
@@ -16871,6 +17229,11 @@ unlisted_dependencies: UnlistedDependencyFinding[]
|
|
|
16871
17229
|
* snippet wired in at wrapper construction.
|
|
16872
17230
|
*/
|
|
16873
17231
|
duplicate_exports: DuplicateExportFinding[]
|
|
17232
|
+
/**
|
|
17233
|
+
* One module that exports one binding under two or more names. Wrapped
|
|
17234
|
+
* in [`DuplicateExportAliasFinding`]. Default severity is `warn`.
|
|
17235
|
+
*/
|
|
17236
|
+
duplicate_export_aliases?: DuplicateExportAliasFinding[]
|
|
16874
17237
|
/**
|
|
16875
17238
|
* Production dependencies only used via type-only imports (could be
|
|
16876
17239
|
* devDependencies). Only populated in production mode. Wrapped in
|
|
@@ -20358,6 +20721,16 @@ verdicts?: (MutationVerdictJoin | null)
|
|
|
20358
20721
|
* them (`--typecheck` not set).
|
|
20359
20722
|
*/
|
|
20360
20723
|
typecheck?: (MutationTypecheckOutput | null)
|
|
20724
|
+
/**
|
|
20725
|
+
* The result of each rechecked mutant against its status in the earlier
|
|
20726
|
+
* report. Absent outside `--recheck`.
|
|
20727
|
+
*/
|
|
20728
|
+
recheck?: (MutationRecheck | null)
|
|
20729
|
+
/**
|
|
20730
|
+
* The mutants whose result differs from a saved report. Absent outside
|
|
20731
|
+
* `--compare`, and absent when this run is not complete.
|
|
20732
|
+
*/
|
|
20733
|
+
compare?: (MutationCompare | null)
|
|
20361
20734
|
}
|
|
20362
20735
|
/**
|
|
20363
20736
|
* The completion status of a run.
|
|
@@ -20385,12 +20758,19 @@ reasons: string[]
|
|
|
20385
20758
|
tests: MutationTestKillRow[]
|
|
20386
20759
|
/**
|
|
20387
20760
|
* Tests with nonempty kills and no unique kills, sorted by test id.
|
|
20761
|
+
* In target mode, only the tests of complete targets.
|
|
20388
20762
|
*/
|
|
20389
20763
|
candidates: string[]
|
|
20390
20764
|
/**
|
|
20391
20765
|
* Tests with coverage and no observed kills, sorted by test id.
|
|
20392
20766
|
*/
|
|
20393
20767
|
coverage_without_kills: string[]
|
|
20768
|
+
/**
|
|
20769
|
+
* The `--kill-matrix-for` targets, in the given order. Absent outside
|
|
20770
|
+
* target mode. In target mode, `tests` has only target tests, and
|
|
20771
|
+
* `subsuming_tests` is empty, because bail hides the other killers.
|
|
20772
|
+
*/
|
|
20773
|
+
targets?: (MutationKillMatrixTarget[] | null)
|
|
20394
20774
|
}
|
|
20395
20775
|
/**
|
|
20396
20776
|
* The observed mutant kills of one eligible test.
|
|
@@ -20420,6 +20800,50 @@ subsuming_tests: string[]
|
|
|
20420
20800
|
* Conservative evidence notes, sorted.
|
|
20421
20801
|
*/
|
|
20422
20802
|
notes: string[]
|
|
20803
|
+
/**
|
|
20804
|
+
* The kills that other target tests also detect and no non-target test
|
|
20805
|
+
* detects, sorted by mutant id. Only `--kill-matrix-for` sets this
|
|
20806
|
+
* field. The test stays redundant only while one of `targets` for each
|
|
20807
|
+
* entry stays in the suite.
|
|
20808
|
+
*/
|
|
20809
|
+
target_only_kills?: (MutationTargetOnlyKill[] | null)
|
|
20810
|
+
}
|
|
20811
|
+
/**
|
|
20812
|
+
* A kill of a target test that only other target tests share.
|
|
20813
|
+
*/
|
|
20814
|
+
export interface MutationTargetOnlyKill {
|
|
20815
|
+
/**
|
|
20816
|
+
* The killed mutant.
|
|
20817
|
+
*/
|
|
20818
|
+
mutant_id: string
|
|
20819
|
+
/**
|
|
20820
|
+
* The other target tests that also kill the mutant, sorted.
|
|
20821
|
+
*/
|
|
20822
|
+
targets: string[]
|
|
20823
|
+
}
|
|
20824
|
+
/**
|
|
20825
|
+
* One `--kill-matrix-for` target and the dry-run tests that it selects.
|
|
20826
|
+
*/
|
|
20827
|
+
export interface MutationKillMatrixTarget {
|
|
20828
|
+
/**
|
|
20829
|
+
* The target as the caller gave it, after path normalization: a test
|
|
20830
|
+
* file or a runner test id.
|
|
20831
|
+
*/
|
|
20832
|
+
target: string
|
|
20833
|
+
/**
|
|
20834
|
+
* The dry-run test ids that the target selects, sorted.
|
|
20835
|
+
*/
|
|
20836
|
+
test_ids: string[]
|
|
20837
|
+
status: MutationKillMatrixTargetStatus
|
|
20838
|
+
/**
|
|
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.
|
|
20842
|
+
* `incomplete-mutant-results` means that a test of this target covers a
|
|
20843
|
+
* mutant with incomplete evidence. `unmatched-target` means that the
|
|
20844
|
+
* target selects no test.
|
|
20845
|
+
*/
|
|
20846
|
+
reasons: string[]
|
|
20423
20847
|
}
|
|
20424
20848
|
/**
|
|
20425
20849
|
* The scope of a plan or a run.
|
|
@@ -20992,6 +21416,125 @@ reason: MutationTypecheckSkipReason
|
|
|
20992
21416
|
*/
|
|
20993
21417
|
count: number
|
|
20994
21418
|
}
|
|
21419
|
+
/**
|
|
21420
|
+
* The recheck facts of a `--recheck` run.
|
|
21421
|
+
*/
|
|
21422
|
+
export interface MutationRecheck {
|
|
21423
|
+
/**
|
|
21424
|
+
* The SHA-256 digest of the earlier report.
|
|
21425
|
+
*/
|
|
21426
|
+
report_sha256: string
|
|
21427
|
+
/**
|
|
21428
|
+
* The number of mutants for each outcome.
|
|
21429
|
+
*/
|
|
21430
|
+
killed: number
|
|
21431
|
+
/**
|
|
21432
|
+
* See `killed`.
|
|
21433
|
+
*/
|
|
21434
|
+
survived: number
|
|
21435
|
+
/**
|
|
21436
|
+
* See `killed`.
|
|
21437
|
+
*/
|
|
21438
|
+
no_coverage: number
|
|
21439
|
+
/**
|
|
21440
|
+
* See `killed`.
|
|
21441
|
+
*/
|
|
21442
|
+
tests_fail_on_original: number
|
|
21443
|
+
/**
|
|
21444
|
+
* See `killed`.
|
|
21445
|
+
*/
|
|
21446
|
+
unsettled: number
|
|
21447
|
+
/**
|
|
21448
|
+
* The rechecked mutants, sorted by file, line and mutant id.
|
|
21449
|
+
*/
|
|
21450
|
+
mutants: MutationRecheckMutant[]
|
|
21451
|
+
}
|
|
21452
|
+
/**
|
|
21453
|
+
* One rechecked mutant.
|
|
21454
|
+
*/
|
|
21455
|
+
export interface MutationRecheckMutant {
|
|
21456
|
+
/**
|
|
21457
|
+
* The id of the mutant.
|
|
21458
|
+
*/
|
|
21459
|
+
mutant_id: string
|
|
21460
|
+
/**
|
|
21461
|
+
* The project-root-relative path of the mutated file.
|
|
21462
|
+
*/
|
|
21463
|
+
file: string
|
|
21464
|
+
/**
|
|
21465
|
+
* The 1-based line of the mutant.
|
|
21466
|
+
*/
|
|
21467
|
+
line: number
|
|
21468
|
+
previous_status: MutantStatus
|
|
21469
|
+
status: MutantStatus
|
|
21470
|
+
outcome: MutationRecheckOutcome
|
|
21471
|
+
}
|
|
21472
|
+
/**
|
|
21473
|
+
* The compare facts of a `--compare` run.
|
|
21474
|
+
*/
|
|
21475
|
+
export interface MutationCompare {
|
|
21476
|
+
/**
|
|
21477
|
+
* The SHA-256 digest of the saved report.
|
|
21478
|
+
*/
|
|
21479
|
+
report_sha256: string
|
|
21480
|
+
/**
|
|
21481
|
+
* The number of mutant ids in both runs.
|
|
21482
|
+
*/
|
|
21483
|
+
compared: number
|
|
21484
|
+
/**
|
|
21485
|
+
* The number of mutants for each change.
|
|
21486
|
+
*/
|
|
21487
|
+
regressed: number
|
|
21488
|
+
/**
|
|
21489
|
+
* See `regressed`.
|
|
21490
|
+
*/
|
|
21491
|
+
inconclusive: number
|
|
21492
|
+
/**
|
|
21493
|
+
* See `regressed`.
|
|
21494
|
+
*/
|
|
21495
|
+
added: number
|
|
21496
|
+
/**
|
|
21497
|
+
* See `regressed`.
|
|
21498
|
+
*/
|
|
21499
|
+
removed: number
|
|
21500
|
+
/**
|
|
21501
|
+
* Each mutant with a change, sorted by file, line and mutant id. A
|
|
21502
|
+
* mutant in both runs without a change is not in the list.
|
|
21503
|
+
*/
|
|
21504
|
+
mutants: MutationCompareMutant[]
|
|
21505
|
+
}
|
|
21506
|
+
/**
|
|
21507
|
+
* One mutant of a compare.
|
|
21508
|
+
*/
|
|
21509
|
+
export interface MutationCompareMutant {
|
|
21510
|
+
/**
|
|
21511
|
+
* The id of the mutant.
|
|
21512
|
+
*/
|
|
21513
|
+
mutant_id: string
|
|
21514
|
+
/**
|
|
21515
|
+
* The project-root-relative path of the mutated file.
|
|
21516
|
+
*/
|
|
21517
|
+
file: string
|
|
21518
|
+
/**
|
|
21519
|
+
* The 1-based line of the mutant.
|
|
21520
|
+
*/
|
|
21521
|
+
line: number
|
|
21522
|
+
change: MutationCompareChange
|
|
21523
|
+
/**
|
|
21524
|
+
* The status in the saved report. Absent for an `added` mutant.
|
|
21525
|
+
*/
|
|
21526
|
+
previous_status?: (MutantStatus | null)
|
|
21527
|
+
/**
|
|
21528
|
+
* The status in this run. Absent for a `removed` mutant.
|
|
21529
|
+
*/
|
|
21530
|
+
status?: (MutantStatus | null)
|
|
21531
|
+
/**
|
|
21532
|
+
* The tests that killed the mutant in the saved report, sorted: its
|
|
21533
|
+
* `killing_tests`, else its `killed_by`. Empty when the saved report
|
|
21534
|
+
* names no killing test.
|
|
21535
|
+
*/
|
|
21536
|
+
previous_killing_tests: string[]
|
|
21537
|
+
}
|
|
20995
21538
|
/**
|
|
20996
21539
|
* The envelope of `fallow mutation --plan`. It runs no user code.
|
|
20997
21540
|
*/
|
|
@@ -21241,6 +21784,98 @@ original_lines: string
|
|
|
21241
21784
|
*/
|
|
21242
21785
|
mutated_lines: string
|
|
21243
21786
|
}
|
|
21787
|
+
/**
|
|
21788
|
+
* The envelope of `fallow mutation tasks`: the open tasks of one saved
|
|
21789
|
+
* report, as one batch. It runs no user code.
|
|
21790
|
+
*/
|
|
21791
|
+
export interface MutationTasksOutput {
|
|
21792
|
+
schema_version: MutationTasksSchemaVersion
|
|
21793
|
+
version: ToolVersion
|
|
21794
|
+
/**
|
|
21795
|
+
* The completion status of the report. A `partial` report can miss
|
|
21796
|
+
* tasks: a `pending` mutant is not a task.
|
|
21797
|
+
*/
|
|
21798
|
+
report_completion?: (MutationCompletionStatus | null)
|
|
21799
|
+
summary: MutationTasksSummary
|
|
21800
|
+
/**
|
|
21801
|
+
* The tasks, sorted by file, line, column and mutant id.
|
|
21802
|
+
*/
|
|
21803
|
+
tasks: MutationTask[]
|
|
21804
|
+
}
|
|
21805
|
+
/**
|
|
21806
|
+
* The number of tasks for each status.
|
|
21807
|
+
*/
|
|
21808
|
+
export interface MutationTasksSummary {
|
|
21809
|
+
/**
|
|
21810
|
+
* The number of tasks.
|
|
21811
|
+
*/
|
|
21812
|
+
tasks: number
|
|
21813
|
+
/**
|
|
21814
|
+
* The tasks with the status `survived`.
|
|
21815
|
+
*/
|
|
21816
|
+
survived: number
|
|
21817
|
+
/**
|
|
21818
|
+
* The tasks with the status `no_coverage`.
|
|
21819
|
+
*/
|
|
21820
|
+
no_coverage: number
|
|
21821
|
+
/**
|
|
21822
|
+
* The tasks whose file changed after the report. They have no code.
|
|
21823
|
+
*/
|
|
21824
|
+
stale: number
|
|
21825
|
+
}
|
|
21826
|
+
/**
|
|
21827
|
+
* One open task: a `survived` or `no_coverage` mutant of a saved report.
|
|
21828
|
+
* A task holds no source text other than the source lines of the mutant.
|
|
21829
|
+
*/
|
|
21830
|
+
export interface MutationTask {
|
|
21831
|
+
/**
|
|
21832
|
+
* The id of the mutant. `fallow mutation inspect` takes this id.
|
|
21833
|
+
*/
|
|
21834
|
+
mutant_id: string
|
|
21835
|
+
/**
|
|
21836
|
+
* The project-root-relative path of the mutated file.
|
|
21837
|
+
*/
|
|
21838
|
+
file: string
|
|
21839
|
+
/**
|
|
21840
|
+
* The 1-based line of the mutant.
|
|
21841
|
+
*/
|
|
21842
|
+
line: number
|
|
21843
|
+
/**
|
|
21844
|
+
* The 1-based column of the mutant.
|
|
21845
|
+
*/
|
|
21846
|
+
column: number
|
|
21847
|
+
/**
|
|
21848
|
+
* The operator, kebab-case.
|
|
21849
|
+
*/
|
|
21850
|
+
operator: string
|
|
21851
|
+
/**
|
|
21852
|
+
* The name of the enclosing function. Absent at the top level of a
|
|
21853
|
+
* module and for an anonymous function.
|
|
21854
|
+
*/
|
|
21855
|
+
function?: (string | null)
|
|
21856
|
+
status: MutantStatus
|
|
21857
|
+
/**
|
|
21858
|
+
* The source lines that contain the mutant, from the current file.
|
|
21859
|
+
* `null` when the task is stale.
|
|
21860
|
+
*/
|
|
21861
|
+
original_lines?: (string | null)
|
|
21862
|
+
/**
|
|
21863
|
+
* The same lines with the mutation applied. `null` when the task is
|
|
21864
|
+
* stale.
|
|
21865
|
+
*/
|
|
21866
|
+
mutated_lines?: (string | null)
|
|
21867
|
+
/**
|
|
21868
|
+
* Why the current file no longer gives the mutant. Absent for a fresh
|
|
21869
|
+
* task.
|
|
21870
|
+
*/
|
|
21871
|
+
stale_reason?: (MutationStaleReason | null)
|
|
21872
|
+
/**
|
|
21873
|
+
* The test files of the tests that reached the mutant in the dry run,
|
|
21874
|
+
* sorted. Empty for `no_coverage`. `fallow mutation inspect` gives the
|
|
21875
|
+
* test ids and the static test files of one mutant.
|
|
21876
|
+
*/
|
|
21877
|
+
covering_test_files: string[]
|
|
21878
|
+
}
|
|
21244
21879
|
/**
|
|
21245
21880
|
* Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
|
|
21246
21881
|
*/
|
|
@@ -21304,12 +21939,12 @@ begin: number
|
|
|
21304
21939
|
end?: (number | null)
|
|
21305
21940
|
}
|
|
21306
21941
|
/**
|
|
21307
|
-
* Structured JSON error
|
|
21308
|
-
* command fails. It
|
|
21309
|
-
*
|
|
21310
|
-
*
|
|
21311
|
-
*
|
|
21312
|
-
*
|
|
21942
|
+
* Structured JSON error that a tool writes to stdout when `--format json` is
|
|
21943
|
+
* active and a command fails. It has no `kind` discriminator. The required
|
|
21944
|
+
* `error: true` member separates it from a success envelope, which carries a
|
|
21945
|
+
* `kind`. The error document is one of the root branches of the output
|
|
21946
|
+
* schema. A consumer that passes `--format json` and sees a non-zero exit
|
|
21947
|
+
* code parses this shape from stdout.
|
|
21313
21948
|
*/
|
|
21314
21949
|
export interface ErrorOutput {
|
|
21315
21950
|
/**
|
|
@@ -21505,6 +22140,16 @@ export type DevDependencyInProduction = DevDependencyInProductionFinding;
|
|
|
21505
22140
|
*/
|
|
21506
22141
|
export type DuplicateExport = DuplicateExportFinding;
|
|
21507
22142
|
|
|
22143
|
+
/**
|
|
22144
|
+
* Backwards-compat alias for the pre-#384 bare `DuplicateExportAlias` name.
|
|
22145
|
+
* The wire shape is byte-identical: `DuplicateExportAliasFinding` flattens the bare
|
|
22146
|
+
* finding's fields via `#[serde(flatten)]` and adds `actions[]` plus
|
|
22147
|
+
* the optional audit-mode `introduced` flag. Consumers that imported
|
|
22148
|
+
* `DuplicateExportAlias` from `fallow/types` pre-migration continue to work via
|
|
22149
|
+
* this alias; new code should prefer `DuplicateExportAliasFinding`.
|
|
22150
|
+
*/
|
|
22151
|
+
export type DuplicateExportAlias = DuplicateExportAliasFinding;
|
|
22152
|
+
|
|
21508
22153
|
/**
|
|
21509
22154
|
* Backwards-compat alias for the pre-#384 bare `EmptyCatalogGroup` name.
|
|
21510
22155
|
* The wire shape is byte-identical: `EmptyCatalogGroupFinding` flattens the bare
|
|
@@ -21575,6 +22220,16 @@ export type TestOnlyDependency = TestOnlyDependencyFinding;
|
|
|
21575
22220
|
*/
|
|
21576
22221
|
export type TypeOnlyDependency = TypeOnlyDependencyFinding;
|
|
21577
22222
|
|
|
22223
|
+
/**
|
|
22224
|
+
* Backwards-compat alias for the pre-#384 bare `UnlistedBinary` name.
|
|
22225
|
+
* The wire shape is byte-identical: `UnlistedBinaryFinding` flattens the bare
|
|
22226
|
+
* finding's fields via `#[serde(flatten)]` and adds `actions[]` plus
|
|
22227
|
+
* the optional audit-mode `introduced` flag. Consumers that imported
|
|
22228
|
+
* `UnlistedBinary` from `fallow/types` pre-migration continue to work via
|
|
22229
|
+
* this alias; new code should prefer `UnlistedBinaryFinding`.
|
|
22230
|
+
*/
|
|
22231
|
+
export type UnlistedBinary = UnlistedBinaryFinding;
|
|
22232
|
+
|
|
21578
22233
|
/**
|
|
21579
22234
|
* Backwards-compat alias for the pre-#384 bare `UnlistedDependency` name.
|
|
21580
22235
|
* The wire shape is byte-identical: `UnlistedDependencyFinding` flattens the bare
|
|
@@ -21658,14 +22313,14 @@ export type UnusedDependency = UnusedDependencyFinding | UnusedDevDependencyFind
|
|
|
21658
22313
|
|
|
21659
22314
|
/**
|
|
21660
22315
|
* Backwards-compat alias for the pre-#384 bare `UnusedMember` union name.
|
|
21661
|
-
* Maps to the union of typed wrappers (`UnusedClassMemberFinding`, `UnusedEnumMemberFinding`, `UnusedStoreMemberFinding`)
|
|
22316
|
+
* Maps to the union of typed wrappers (`UnusedClassMemberFinding`, `UnusedEnumMemberFinding`, `UnusedNamespaceMemberFinding`, `UnusedStoreMemberFinding`)
|
|
21662
22317
|
* that replaced the pre-migration bare union. The wire shape per variant
|
|
21663
22318
|
* is byte-identical (each wrapper flattens its bare payload and adds
|
|
21664
22319
|
* `actions[]` plus optional `introduced`). Consumers that imported
|
|
21665
22320
|
* `UnusedMember` from `fallow/types` pre-migration continue to work via
|
|
21666
22321
|
* this alias; new code should narrow on the specific wrapper variant.
|
|
21667
22322
|
*/
|
|
21668
|
-
export type UnusedMember = UnusedClassMemberFinding | UnusedEnumMemberFinding | UnusedStoreMemberFinding;
|
|
22323
|
+
export type UnusedMember = UnusedClassMemberFinding | UnusedEnumMemberFinding | UnusedNamespaceMemberFinding | UnusedStoreMemberFinding;
|
|
21669
22324
|
|
|
21670
22325
|
/**
|
|
21671
22326
|
* @deprecated Renamed to BaselineStaleness in 3.27.0, when dead-code and dupes started carrying the same shape. The members are unchanged.
|