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.
@@ -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
- * Four-valued rather than a boolean because audit's verdict has a warn tier
161
- * (`crates/cli/src/cli_report.rs` maps it onto three conclusions) and because
162
- * a gate can stand down without passing. Widening a published boolean later
163
- * would retype a required field and bump every carrying envelope, so the width
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 the `parse-error` gate, other than a parser error.
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
- * A gate is armed by a flag or by config. The default exit rule of a command
2034
- * is always in the object, also when no flag armed a gate:
2035
- * `error-severity-findings` on `dead-code`, `check` and the combined run
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
- * An empty object is never emitted. The typed programmatic API runs no CLI
2043
- * gate and leaves the object absent.
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 legitimately
2060
- * disagree. `status` is what the rule concluded; `enforced` is whether a
2061
- * `fail` from this gate would make the run exit non-zero. A
2062
- * `health --report-only` run is an explicit request never to fail, so a
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
- * Neither member decides it alone: `enforced` is true on every armed gate,
2069
- * including the ones that passed, so gating on it by itself fails every run
2070
- * that armed anything. Read `status` on its own to decide what to say, and
2071
- * remember that `warn` and `skipped` are neither a pass nor a failure.
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 verdict is published for information only: the gate was never
2078
- * armed, the run was told never to fail, or the combined machine formats
2079
- * exit 0 for the gate (bare `fallow` without `--fail-on-issues`).
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: the duplication
2084
- * percentage, the health score, the number of findings at or above the
2085
- * severity floor, the number of `error` findings of `health-findings` and
2086
- * of `error-severity-findings`, or
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` was compared against, when there is one.
2094
- * Absent for gates that compare no number.
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 own unit. `health-min-severity` sets it to the severity floor
2100
- * (`moderate`, `high` or `critical`); `health-findings` and
2101
- * `error-severity-findings` set it to `error`, the rule severity they
2102
- * count; `regression` sets it to the
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 rather than a
2111
- * number. Only `parse-error` sets it: one item per file that did not
2112
- * parse cleanly, sorted by path. Absent when the list is empty.
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 counted it.
2113
+ * One file that a file-judging gate names, with the reason that the gate
2114
+ * counted it.
2118
2115
  *
2119
- * Today only `parse-error` emits it. The item carries the same facts as the
2120
- * `source-parse-degraded` entry in `workspace_diagnostics[]` for that file,
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 instead of recovering, so the
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 class.
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 class.
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 class.
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 package is a generated or platform-specific dependency
14341
- * package rather than a hand-authored workspace.
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 emitted on stdout when `--format json` is active and a
21308
- * command fails. It carries no `kind` discriminator: it is distinguished from
21309
- * the kind-tagged success envelopes by the required `error: true` field, and is
21310
- * a document-root branch alongside `FallowOutput` and `CodeClimateOutput` in
21311
- * `docs/output-schema.json`. Agents that pass `--format json` and observe a
21312
- * non-zero exit code parse this shape from stdout.
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.