fallow 3.14.0 → 3.15.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.
@@ -100,27 +100,9 @@ kind: "suppression-inventory"
100
100
  kind: "type-aware-status"
101
101
  }))
102
102
  /**
103
- * Schema version for this output format (independent of tool version). Bump
104
- * policy: ADDITIVE changes (new optional top-level fields, new optional struct
105
- * fields, new array entries, new MCP tools, new CLI flags that map to new
106
- * optional fields) do NOT bump the version; consumers receive new fields
107
- * without breaking. BREAKING changes (renamed fields, removed fields, type
108
- * changes, enum-variant removals, semantic changes to existing fields) DO
109
- * bump. To detect newly-added fields without a bump, check field presence via
110
- * JSON-key existence rather than gating on the version. v4 was introduced
111
- * alongside fallow-cov-protocol 0.2 (per-finding verdict, stable IDs, evidence
112
- * block, renamed summary fields); v5 introduced health_score formula_version 2
113
- * with scale-invariant scoring semantics; v6 widened `AddToConfigAction.value`
114
- * from a scalar string to `oneOf: [string, array]` so the new `ignoreExports`
115
- * action can carry a paste-ready array of `{ file, exports }` rule objects
116
- * (the legacy `ignoreDependencies` etc. variants still emit strings, so
117
- * consumers that switch on `config_key` keep working unchanged). The
118
- * runtime-coverage block is extended additively as the protocol evolves
119
- * (currently 0.3, which adds an optional capture_quality summary field). Other
120
- * additive examples: dupes --group-by adds optional grouped_by, total_issues,
121
- * groups fields without bumping.
122
- */
123
- export type SchemaVersion = 7
103
+ * Schema projection for the audit envelope's exact version.
104
+ */
105
+ export type AuditSchemaVersion = 9
124
106
  /**
125
107
  * Fallow CLI version that produced this envelope. Renders to the JSON wire as
126
108
  * a bare string (e.g. `"2.74.0"`).
@@ -139,6 +121,9 @@ export type AuditVerdict = ("pass" | "warn" | "fail")
139
121
  * integer.
140
122
  */
141
123
  export type ElapsedMs = number
124
+ /**
125
+ * Value of `audit.gate`: which findings drive the `fallow audit` verdict.
126
+ */
142
127
  export type AuditGate = ("new-only" | "all")
143
128
  /**
144
129
  * Analysis mode stored with baselines, snapshots, audit sides, and impact data.
@@ -196,6 +181,10 @@ export type TypeAwareInvalidationKind = ("full" | "incremental" | "none")
196
181
  * Closed set of reasons for retaining a candidate without semantic scanning.
197
182
  */
198
183
  export type TypeAwareAbstentionReason = ("no-project" | "ambiguous-project" | "blocking-diagnostics")
184
+ /**
185
+ * Schema projection for the dead-code envelope's exact version.
186
+ */
187
+ export type CheckSchemaVersion = 8
199
188
  /**
200
189
  * A suggested action attached to a finding in the JSON output. Each finding
201
190
  * carries an `actions` array; consumers (agents, IDE clients, CI bots) can
@@ -281,7 +270,10 @@ export type AddToConfigValue = (string | IgnoreExportsRule[] | {
281
270
  * Audit-mode marker emitted on each finding when `fallow audit --format json`
282
271
  * runs with a base ref. `true` means the finding's structural key was not
283
272
  * present at the base ref (introduced by the current changeset); `false`
284
- * means it was inherited.
273
+ * means it was inherited. Duplication findings carry one carve-out: a clone
274
+ * group whose structural key is new but whose instances contain no added line
275
+ * from the diff (a group re-shaped by removing duplication elsewhere) is
276
+ * demoted to inherited and serializes `false` (issue #2164).
285
277
  *
286
278
  * Outside of audit sub-results the field is omitted, so call sites typically
287
279
  * hold `Option<AuditIntroduced>`. Renders to the JSON wire as a bare boolean.
@@ -424,6 +416,12 @@ kind: "malformed-tsconfig"
424
416
  } | {
425
417
  kind: "tsconfig-reference-dir-missing"
426
418
  } | {
419
+ /**
420
+ * `serde_yaml_ng` parse error text.
421
+ */
422
+ error: string
423
+ kind: "malformed-pnpm-workspace-yaml"
424
+ } | {
427
425
  /**
428
426
  * On-disk size of the skipped file in bytes.
429
427
  */
@@ -485,7 +483,7 @@ export type ComplexityMetric = ("cyclomatic" | "cognitive")
485
483
  * `Case` means a `case` label carrying a test; a bare `default` adds nothing
486
484
  * to cyclomatic complexity and so produces no contribution.
487
485
  */
488
- export type ComplexityContributionKind = ("if" | "else" | "else-if" | "ternary" | "logical-and" | "logical-or" | "nullish-coalescing" | "logical-assignment" | "optional-chain" | "for" | "for-in" | "for-of" | "while" | "do-while" | "switch" | "case" | "catch" | "labeled-break" | "labeled-continue" | "jsx-depth" | "hook-density" | "prop-count")
486
+ export type ComplexityContributionKind = ("if" | "else" | "else-if" | "ternary" | "logical-and" | "logical-or" | "nullish-coalescing" | "logical-assignment" | "optional-chain" | "for" | "for-in" | "for-of" | "while" | "do-while" | "switch" | "case" | "catch" | "labeled-break" | "labeled-continue" | "jsx-depth" | "hook-density" | "prop-count" | "await" | "then")
489
487
  /**
490
488
  * Source for a finding's effective thresholds.
491
489
  */
@@ -510,7 +508,16 @@ export type CoverageSourceConsistency = ("uniform" | "mixed")
510
508
  /**
511
509
  * Lifecycle state for a configured threshold override.
512
510
  */
513
- export type ThresholdOverrideStatus = ("active" | "stale" | "no_match")
511
+ export type ThresholdOverrideStatus = ("active" | "stale" | "insufficient" | "no_match")
512
+ /**
513
+ * Which threshold dimension a `thresholdOverrides` state row describes.
514
+ *
515
+ * One configured override produces one row per dimension it participates in,
516
+ * because the complexity ceilings and the CRAP ceiling are evaluated
517
+ * independently: raising `maxCyclomatic` says nothing about whether the unit
518
+ * still breaches `maxCrap`.
519
+ */
520
+ export type ThresholdOverrideDimension = ("complexity" | "crap")
514
521
  /**
515
522
  * Discriminant for [`UntestedFileAction::kind`]. Mirrors the action types
516
523
  * emitted by `build_untested_file_actions`.
@@ -526,7 +533,13 @@ export type UntestedExportActionType = ("add-test-import" | "suppress-file")
526
533
  * analysis period.
527
534
  */
528
535
  export type ChurnTrend = ("accelerating" | "stable" | "cooling")
536
+ /**
537
+ * Encoding applied to a [`ContributorEntry::identifier`].
538
+ */
529
539
  export type ContributorIdentifierFormat = ("raw" | "handle" | "anonymized" | "hash")
540
+ /**
541
+ * Ownership lifecycle state of a file.
542
+ */
530
543
  export type OwnershipState = ("active" | "unowned" | "declared_inactive" | "drifting")
531
544
  /**
532
545
  * Discriminant for [`HotspotAction::kind`].
@@ -700,16 +713,37 @@ export type StylingFindingConfidence = ("high" | "low")
700
713
  * Agent handling hint for a [`StylingFinding`].
701
714
  */
702
715
  export type StylingAgentDisposition = ("fix-confidently" | "verify-first")
716
+ /**
717
+ * `target` block of [`InspectOutput`], tagged by `type`.
718
+ */
703
719
  export type InspectTargetDescriptor = ({
720
+ /**
721
+ * File path relative to the analysed root.
722
+ */
704
723
  file: string
705
724
  type: "file"
706
725
  } | {
726
+ /**
727
+ * File path relative to the analysed root.
728
+ */
707
729
  file: string
730
+ /**
731
+ * Name of the inspected export.
732
+ */
708
733
  export_name: string
709
734
  type: "symbol"
710
735
  })
736
+ /**
737
+ * `identity` block of [`InspectOutput`]; shape follows the target type.
738
+ */
711
739
  export type InspectIdentity = (InspectFileIdentity | InspectSymbolIdentity)
740
+ /**
741
+ * Status of an [`InspectEvidenceSection`].
742
+ */
712
743
  export type InspectSectionStatus = ("ok" | "partial" | "unavailable" | "error")
744
+ /**
745
+ * Granularity an [`InspectEvidenceSection`] payload covers.
746
+ */
713
747
  export type InspectEvidenceScope = ("symbol" | "file" | "project_filtered_to_file")
714
748
  /**
715
749
  * Best-effort classification of why a callee did not resolve to an edge.
@@ -756,15 +790,35 @@ export type ReviewId = string
756
790
  * Schema-version discriminator for the review reconcile envelope.
757
791
  */
758
792
  export type ReviewReconcileSchema = "fallow-review-reconcile/v1"
793
+ /**
794
+ * Schema-version discriminator for [`CoverageSetupOutput`].
795
+ */
759
796
  export type CoverageSetupSchemaVersion = "1"
797
+ /**
798
+ * Framework detected during coverage setup; drives which instrumentation
799
+ * guidance is emitted.
800
+ */
760
801
  export type CoverageSetupFramework = ("nextjs" | "nestjs" | "nuxt" | "sveltekit" | "astro" | "remix" | "vite" | "plain_node" | "unknown")
802
+ /**
803
+ * Package manager detected from the project's lockfile.
804
+ */
761
805
  export type CoverageSetupPackageManager = ("npm" | "pnpm" | "yarn" | "bun")
806
+ /**
807
+ * Runtime environment coverage capture must instrument.
808
+ */
762
809
  export type CoverageSetupRuntimeTarget = ("node" | "browser")
810
+ /**
811
+ * Schema-version discriminator for [`CoverageAnalyzeOutput`].
812
+ */
763
813
  export type CoverageAnalyzeSchemaVersion = "1"
764
814
  /**
765
815
  * Discovery outcome for a [`LogicalGroup`].
766
816
  */
767
817
  export type LogicalGroupStatus = ("ok" | "empty" | "invalid_path")
818
+ /**
819
+ * Exact schema version for [`HealthOutput`].
820
+ */
821
+ export type HealthSchemaVersion = 10
768
822
  /**
769
823
  * Resolver mode label for grouped envelopes (dead-code, dupes, health).
770
824
  *
@@ -773,6 +827,11 @@ export type LogicalGroupStatus = ("ok" | "empty" | "invalid_path")
773
827
  * groups by GitLab CODEOWNERS `[Section]` header name.
774
828
  */
775
829
  export type GroupByMode = ("owner" | "directory" | "package" | "section")
830
+ /**
831
+ * Schema projection for the duplication envelope's CLI and programmatic
832
+ * version lineages.
833
+ */
834
+ export type DupesSchemaVersion = (2 | 8)
776
835
  /**
777
836
  * Wire-version discriminator for [`ImpactReport`]. Independent from the global
778
837
  * `SchemaVersion` (the impact report versions on its own cadence) and from the
@@ -881,6 +940,14 @@ export type SecurityVerifierVerdictStatus = ("survivor" | "dismissed" | "needs-h
881
940
  * The `fallow security blind-spots --format json` schema version.
882
941
  */
883
942
  export type SecurityBlindSpotsSchemaVersion = "1"
943
+ /**
944
+ * Schema projection for the combined envelope's exact version.
945
+ */
946
+ export type CombinedSchemaVersion = 10
947
+ /**
948
+ * Schema projection for the feature-flags envelope's exact version.
949
+ */
950
+ export type FeatureFlagsSchemaVersion = 8
884
951
  /**
885
952
  * Feature flag kind values emitted in JSON.
886
953
  */
@@ -955,6 +1022,10 @@ export type SuppressionInventoryLevel = ("file" | "line")
955
1022
  * How a suppression in the inventory was authored.
956
1023
  */
957
1024
  export type SuppressionInventoryOrigin = "comment"
1025
+ /**
1026
+ * Schema projection for the type-aware status envelope's exact version.
1027
+ */
1028
+ export type TypeAwareStatusSchemaVersion = 8
958
1029
  /**
959
1030
  * Discriminator value for [`CodeClimateIssue::kind`].
960
1031
  */
@@ -974,11 +1045,17 @@ export type CodeClimateOutput = CodeClimateIssue[]
974
1045
  * `fallow audit --format json` envelope.
975
1046
  */
976
1047
  export interface AuditOutput {
977
- schema_version: SchemaVersion
1048
+ schema_version: AuditSchemaVersion
978
1049
  version: ToolVersion
979
1050
  command: AuditCommand
980
1051
  verdict: AuditVerdict
1052
+ /**
1053
+ * Number of changed files in the audit scope.
1054
+ */
981
1055
  changed_files_count: number
1056
+ /**
1057
+ * Git ref the change was diffed against.
1058
+ */
982
1059
  base_ref: string
983
1060
  /**
984
1061
  * Human-readable provenance of `base_ref`, e.g. `merge-base with
@@ -988,14 +1065,34 @@ base_ref: string
988
1065
  * self-describing).
989
1066
  */
990
1067
  base_description?: (string | null)
1068
+ /**
1069
+ * Commit SHA of the audited head tree, when resolvable.
1070
+ */
991
1071
  head_sha?: (string | null)
992
1072
  elapsed_ms: ElapsedMs
1073
+ /**
1074
+ * True when base-snapshot analysis was skipped, so new-vs-inherited
1075
+ * attribution could not run.
1076
+ */
993
1077
  base_snapshot_skipped?: (boolean | null)
994
1078
  summary: AuditSummary
995
1079
  attribution: AuditAttribution
1080
+ /**
1081
+ * `_meta` block with metric / rule definitions, when `--explain` was
1082
+ * passed.
1083
+ */
996
1084
  _meta?: (Meta | null)
1085
+ /**
1086
+ * Dead-code findings scoped to the audit changeset.
1087
+ */
997
1088
  dead_code?: (CheckOutput | null)
1089
+ /**
1090
+ * Duplication findings scoped to the audit changeset.
1091
+ */
998
1092
  duplication?: (DupesReportPayload | null)
1093
+ /**
1094
+ * Complexity findings scoped to the audit changeset.
1095
+ */
999
1096
  complexity?: (HealthReport | null)
1000
1097
  /**
1001
1098
  * Read-only follow-up commands computed from this run's findings. See
@@ -1007,10 +1104,26 @@ next_steps?: NextStep[]
1007
1104
  * Per-category summary counts for the audit result.
1008
1105
  */
1009
1106
  export interface AuditSummary {
1107
+ /**
1108
+ * Total dead-code issues reported for the changed files.
1109
+ */
1010
1110
  dead_code_issues: number
1111
+ /**
1112
+ * Whether any reported dead-code issue has error severity.
1113
+ */
1011
1114
  dead_code_has_errors: boolean
1115
+ /**
1116
+ * Total complexity findings reported for the changed files.
1117
+ */
1012
1118
  complexity_findings: number
1119
+ /**
1120
+ * Highest cyclomatic complexity among the findings; `None` when there
1121
+ * are no complexity findings.
1122
+ */
1013
1123
  max_cyclomatic?: (number | null)
1124
+ /**
1125
+ * Clone groups touching the changed files.
1126
+ */
1014
1127
  duplication_clone_groups: number
1015
1128
  }
1016
1129
  /**
@@ -1018,11 +1131,29 @@ duplication_clone_groups: number
1018
1131
  */
1019
1132
  export interface AuditAttribution {
1020
1133
  gate: AuditGate
1134
+ /**
1135
+ * Dead-code findings absent from the base snapshot.
1136
+ */
1021
1137
  dead_code_introduced: number
1138
+ /**
1139
+ * Dead-code findings already present in the base snapshot.
1140
+ */
1022
1141
  dead_code_inherited: number
1142
+ /**
1143
+ * Complexity findings absent from the base snapshot.
1144
+ */
1023
1145
  complexity_introduced: number
1146
+ /**
1147
+ * Complexity findings already present in the base snapshot.
1148
+ */
1024
1149
  complexity_inherited: number
1150
+ /**
1151
+ * Clone groups absent from the base snapshot.
1152
+ */
1025
1153
  duplication_introduced: number
1154
+ /**
1155
+ * Clone groups already present in the base snapshot.
1156
+ */
1026
1157
  duplication_inherited: number
1027
1158
  styling_introduced: number
1028
1159
  styling_inherited: number
@@ -1949,10 +2080,16 @@ docs?: (string | null)
1949
2080
  * JSON layer always emits.
1950
2081
  */
1951
2082
  export interface CheckOutput {
1952
- schema_version: SchemaVersion
2083
+ schema_version: CheckSchemaVersion
1953
2084
  version: ToolVersion
1954
2085
  elapsed_ms: ElapsedMs
2086
+ /**
2087
+ * Total findings across all issue arrays; excludes `next_steps`.
2088
+ */
1955
2089
  total_issues: number
2090
+ /**
2091
+ * Entry-point totals per source, when the analysis recorded them.
2092
+ */
1956
2093
  entry_points?: (EntryPoints | null)
1957
2094
  summary: CheckSummary
1958
2095
  /**
@@ -2282,10 +2419,26 @@ thin_wrappers?: ThinWrapperFinding[]
2282
2419
  * enables it.
2283
2420
  */
2284
2421
  duplicate_prop_shapes?: DuplicatePropShapeFinding[]
2422
+ /**
2423
+ * Count deltas against the matched baseline, in baseline runs.
2424
+ */
2285
2425
  baseline_deltas?: (BaselineDeltas | null)
2426
+ /**
2427
+ * Which baseline snapshot was matched, in baseline runs.
2428
+ */
2286
2429
  baseline?: (BaselineMatch | null)
2430
+ /**
2431
+ * Regression verdict against the baseline, in `--fail-on-regression` runs.
2432
+ */
2287
2433
  regression?: (RegressionResult | null)
2434
+ /**
2435
+ * `_meta` block with docs and rule definitions, when `--explain` was
2436
+ * passed.
2437
+ */
2288
2438
  _meta?: (Meta | null)
2439
+ /**
2440
+ * Workspace-discovery diagnostics surfaced during config load.
2441
+ */
2289
2442
  workspace_diagnostics?: WorkspaceDiagnostic[]
2290
2443
  /**
2291
2444
  * Read-only follow-up commands computed from this run's findings, emitted
@@ -4702,6 +4855,11 @@ token_count: number
4702
4855
  * Number of lines in the duplicated block.
4703
4856
  */
4704
4857
  line_count: number
4858
+ /**
4859
+ * Lowest all-pairs similarity for a near-miss clone group. Exact clone
4860
+ * groups omit this field.
4861
+ */
4862
+ similarity?: number
4705
4863
  /**
4706
4864
  * Stable content fingerprint, usually `dup:<8hex>` and widened on rare
4707
4865
  * report collisions. Addressable via `fallow dupes --trace dup:<fp>` (and
@@ -4709,6 +4867,10 @@ line_count: number
4709
4867
  * each group in the human listing.
4710
4868
  */
4711
4869
  fingerprint: string
4870
+ /**
4871
+ * Maximum directory-tree or same-file line distance between instances.
4872
+ */
4873
+ spread: number
4712
4874
  /**
4713
4875
  * Best-effort human-readable name for the clone: the dominant repeated
4714
4876
  * identifier across the duplicated fragment (e.g. a shared `parseCsv`
@@ -4918,34 +5080,38 @@ duplicated_lines: number
4918
5080
  */
4919
5081
  total_tokens: number
4920
5082
  /**
4921
- * Tokens that are part of at least one clone.
5083
+ * Tokens in redundant clone copies, excluding one retained copy per group.
4922
5084
  */
4923
5085
  duplicated_tokens: number
4924
5086
  /**
4925
- * Number of clone groups in the reported `clone_groups[]` array.
4926
- * Matches `clone_groups[].length` post `minOccurrences` filtering; the
4927
- * count of groups hidden by the filter is exposed in
4928
- * `clone_groups_below_min_occurrences`.
5087
+ * Number of clone groups in the reported `clone_groups[]` array after
5088
+ * filtering and optional `--top` truncation.
4929
5089
  */
4930
5090
  clone_groups: number
4931
5091
  /**
4932
- * Total clone instances across all reported groups. Matches the sum of
4933
- * `clone_groups[].locations[].length` post `minOccurrences` filtering.
5092
+ * Total clone instances across all reported groups after filtering and
5093
+ * optional `--top` truncation.
4934
5094
  */
4935
5095
  clone_instances: number
4936
5096
  /**
4937
- * Percentage of duplicated lines (0.0 to 100.0). Always reflects the FULL
4938
- * corpus, computed BEFORE the `minOccurrences` filter so trend lines and
4939
- * `threshold` gates stay stable when the filter changes.
5097
+ * Percentage of duplicated lines (0.0 to 100.0). `--top` does not change
5098
+ * this scoped corpus metric.
4940
5099
  */
4941
5100
  duplication_percentage: number
4942
5101
  /**
4943
5102
  * Number of clone groups hidden by `duplicates.minOccurrences`. Absent (or
4944
5103
  * `0`) when the filter is at its default of `2` and nothing was hidden.
4945
- * Pre-filter clone group count = `clone_groups +
4946
- * clone_groups_below_min_occurrences`.
5104
+ * This counter covers only the minimum-occurrence filter.
4947
5105
  */
4948
5106
  clone_groups_below_min_occurrences?: number
5107
+ /**
5108
+ * Number of clone groups hidden by `duplicates.ignoredClones`.
5109
+ */
5110
+ clone_groups_ignored?: number
5111
+ /**
5112
+ * Near-miss candidate comparisons skipped by bounded-work limits.
5113
+ */
5114
+ near_candidates_skipped?: number
4949
5115
  }
4950
5116
  /**
4951
5117
  * Result of complexity analysis for reporting.
@@ -5077,13 +5243,37 @@ styling_findings?: StylingFinding[]
5077
5243
  * Wire envelope for a single complexity finding.
5078
5244
  */
5079
5245
  export interface HealthFinding {
5246
+ /**
5247
+ * File path relative to the project root.
5248
+ */
5080
5249
  path: string
5250
+ /**
5251
+ * Function name, or a synthesized name for anonymous functions.
5252
+ */
5081
5253
  name: string
5254
+ /**
5255
+ * 1-based line the function starts on.
5256
+ */
5082
5257
  line: number
5258
+ /**
5259
+ * 1-based column the function starts on.
5260
+ */
5083
5261
  col: number
5262
+ /**
5263
+ * Cyclomatic complexity of the function.
5264
+ */
5084
5265
  cyclomatic: number
5266
+ /**
5267
+ * Cognitive complexity of the function.
5268
+ */
5085
5269
  cognitive: number
5270
+ /**
5271
+ * Lines of code in the function body.
5272
+ */
5086
5273
  line_count: number
5274
+ /**
5275
+ * Number of declared parameters.
5276
+ */
5087
5277
  param_count: number
5088
5278
  /**
5089
5279
  * Number of React hook calls in this function's body (`useState` /
@@ -5111,11 +5301,30 @@ react_prop_count?: number
5111
5301
  react_hook_profile?: (ReactHookProfile | null)
5112
5302
  exceeded: ExceededThreshold
5113
5303
  severity: FindingSeverity
5304
+ /**
5305
+ * CRAP score (change risk anti-pattern), when coverage data exists.
5306
+ */
5114
5307
  crap?: (number | null)
5308
+ /**
5309
+ * Test coverage percentage (0-100) backing the CRAP score.
5310
+ */
5115
5311
  coverage_pct?: (number | null)
5312
+ /**
5313
+ * Coverage tier bucket derived from `coverage_pct`.
5314
+ */
5116
5315
  coverage_tier?: (CoverageTier | null)
5316
+ /**
5317
+ * Provenance of the coverage signal.
5318
+ */
5117
5319
  coverage_source?: (CoverageSource | null)
5320
+ /**
5321
+ * Component file the inherited coverage estimate came from, for
5322
+ * component-inherited coverage.
5323
+ */
5118
5324
  inherited_from?: (string | null)
5325
+ /**
5326
+ * Aggregate of the enclosing component's findings, when rolled up.
5327
+ */
5119
5328
  component_rollup?: (ComponentRollup | null)
5120
5329
  /**
5121
5330
  * Per-decision-point complexity breakdown explaining WHICH constructs drove
@@ -5186,13 +5395,38 @@ custom: number
5186
5395
  */
5187
5396
  max_effect_dep_arity?: (number | null)
5188
5397
  }
5398
+ /**
5399
+ * Component-level aggregate attached to a template complexity finding,
5400
+ * pairing the template's scores with the worst class-side function.
5401
+ */
5189
5402
  export interface ComponentRollup {
5403
+ /**
5404
+ * Component name.
5405
+ */
5190
5406
  component: string
5407
+ /**
5408
+ * Name of the worst-scoring function in the component class.
5409
+ */
5191
5410
  class_worst_function: string
5411
+ /**
5412
+ * Cyclomatic complexity of that worst class function.
5413
+ */
5192
5414
  class_cyclomatic: number
5415
+ /**
5416
+ * Cognitive complexity of that worst class function.
5417
+ */
5193
5418
  class_cognitive: number
5419
+ /**
5420
+ * Template file path relative to the project root.
5421
+ */
5194
5422
  template_path: string
5423
+ /**
5424
+ * Cyclomatic complexity of the template.
5425
+ */
5195
5426
  template_cyclomatic: number
5427
+ /**
5428
+ * Cognitive complexity of the template.
5429
+ */
5196
5430
  template_cognitive: number
5197
5431
  }
5198
5432
  /**
@@ -5229,8 +5463,17 @@ nesting: number
5229
5463
  * Resolved thresholds used to evaluate a health finding.
5230
5464
  */
5231
5465
  export interface HealthEffectiveThresholds {
5466
+ /**
5467
+ * Effective cyclomatic-complexity ceiling for the matched file.
5468
+ */
5232
5469
  max_cyclomatic: number
5470
+ /**
5471
+ * Effective cognitive-complexity ceiling for the matched file.
5472
+ */
5233
5473
  max_cognitive: number
5474
+ /**
5475
+ * Effective CRAP-score ceiling for the matched file.
5476
+ */
5234
5477
  max_crap: number
5235
5478
  /**
5236
5479
  * Effective unit-size ceiling (maximum function length in lines) for the
@@ -5285,8 +5528,13 @@ comment?: (string | null)
5285
5528
  /**
5286
5529
  * Where to insert the suppress comment
5287
5530
  * (e.g., `above-function-declaration`, `above-angular-decorator`,
5288
- * `above-component-worst-method`, or `top-of-template`). Present on
5289
- * `suppress-line` and `suppress-file` action variants.
5531
+ * `above-template-anchor-line`, `above-component-worst-method`, or
5532
+ * `top-of-template`). Present on `suppress-line` and `suppress-file`
5533
+ * action variants. `above-template-anchor-line` is used for
5534
+ * single-file-component markup (`.svelte`, `.vue`, `.astro`), where the
5535
+ * synthetic `<template>` unit is anchored at its first contributing
5536
+ * construct rather than at the top of the file, so the comment belongs on
5537
+ * the line immediately preceding the reported line.
5290
5538
  */
5291
5539
  placement?: (string | null)
5292
5540
  /**
@@ -5305,11 +5553,29 @@ target_path?: (string | null)
5305
5553
  * Summary statistics for the health report.
5306
5554
  */
5307
5555
  export interface HealthSummary {
5556
+ /**
5557
+ * Files included in the health analysis.
5558
+ */
5308
5559
  files_analyzed: number
5560
+ /**
5561
+ * Functions scored across the analyzed files.
5562
+ */
5309
5563
  functions_analyzed: number
5564
+ /**
5565
+ * Functions exceeding at least one complexity or CRAP threshold.
5566
+ */
5310
5567
  functions_above_threshold: number
5568
+ /**
5569
+ * Global cyclomatic-complexity ceiling for this run.
5570
+ */
5311
5571
  max_cyclomatic_threshold: number
5572
+ /**
5573
+ * Global cognitive-complexity ceiling for this run.
5574
+ */
5312
5575
  max_cognitive_threshold: number
5576
+ /**
5577
+ * Global CRAP-score ceiling for this run.
5578
+ */
5313
5579
  max_crap_threshold: number
5314
5580
  /**
5315
5581
  * Effective global unit-size ceiling (`health.maxUnitSize`, maximum
@@ -5319,14 +5585,42 @@ max_crap_threshold: number
5319
5585
  * here; this is the global default.
5320
5586
  */
5321
5587
  max_unit_size_threshold: number
5588
+ /**
5589
+ * Files with a computed maintainability score; absent when file scoring
5590
+ * did not run.
5591
+ */
5322
5592
  files_scored?: (number | null)
5593
+ /**
5594
+ * Mean maintainability index over scored files (0-100).
5595
+ */
5323
5596
  average_maintainability?: (number | null)
5597
+ /**
5598
+ * Coverage model behind the CRAP scores, when coverage was used.
5599
+ */
5324
5600
  coverage_model?: (CoverageModel | null)
5601
+ /**
5602
+ * Whether CRAP findings mix coverage sources.
5603
+ */
5325
5604
  coverage_source_consistency?: (CoverageSourceConsistency | null)
5605
+ /**
5606
+ * Functions matched against the Istanbul coverage file, in Istanbul mode.
5607
+ */
5326
5608
  istanbul_matched?: (number | null)
5609
+ /**
5610
+ * Functions in the Istanbul coverage file, in Istanbul mode.
5611
+ */
5327
5612
  istanbul_total?: (number | null)
5613
+ /**
5614
+ * Findings with critical severity.
5615
+ */
5328
5616
  severity_critical_count: number
5617
+ /**
5618
+ * Findings with high severity.
5619
+ */
5329
5620
  severity_high_count: number
5621
+ /**
5622
+ * Findings with moderate severity.
5623
+ */
5330
5624
  severity_moderate_count: number
5331
5625
  /**
5332
5626
  * Baseline staleness data, present only when a baseline was loaded.
@@ -5382,29 +5676,88 @@ stale: boolean
5382
5676
  */
5383
5677
  export interface ThresholdOverrideState {
5384
5678
  status: ThresholdOverrideStatus
5679
+ /**
5680
+ * Index of the entry in the configured `thresholdOverrides` array.
5681
+ * Several rows can share one index when the override participates in more
5682
+ * than one dimension; group on this to count configured overrides.
5683
+ */
5385
5684
  override_index: number
5685
+ dimension: ThresholdOverrideDimension
5686
+ /**
5687
+ * Dimensions the matched unit still breaches despite this override,
5688
+ * whether or not this override configures their ceilings. Non-empty means
5689
+ * raising the ceiling did not settle the matter: a complexity or CRAP
5690
+ * finding survived, or the unit is still longer than the resolved
5691
+ * `maxUnitSize`, which keeps it in the large-function list without
5692
+ * emitting a finding of its own.
5693
+ */
5694
+ outstanding?: ThresholdOverrideDimension[]
5695
+ /**
5696
+ * Matched file path, when the override matched one.
5697
+ */
5386
5698
  path?: (string | null)
5699
+ /**
5700
+ * Matched function name, for function-scoped overrides.
5701
+ */
5387
5702
  function?: (string | null)
5703
+ /**
5704
+ * 1-based line of the matched unit. Absent on `no_match` rows, which
5705
+ * describe an entry that matched nothing. Name alone is not an identity:
5706
+ * one file can hold several units sharing a name, so this pairs with
5707
+ * `col` to keep their rows distinct (issue #2163).
5708
+ */
5709
+ line?: (number | null)
5710
+ /**
5711
+ * 0-based byte column of the matched unit. Absent on `no_match` rows.
5712
+ */
5713
+ col?: (number | null)
5388
5714
  configured_thresholds: HealthConfiguredThresholds
5389
5715
  effective_thresholds: HealthEffectiveThresholds
5716
+ /**
5717
+ * Current complexity metrics of the matched code, when matched.
5718
+ */
5390
5719
  metrics?: (ThresholdOverrideMetrics | null)
5720
+ /**
5721
+ * Human-readable explanation of the status.
5722
+ */
5391
5723
  reason?: (string | null)
5392
5724
  }
5393
5725
  /**
5394
5726
  * Threshold values configured by a single override entry.
5395
5727
  */
5396
5728
  export interface HealthConfiguredThresholds {
5729
+ /**
5730
+ * Cyclomatic ceiling set by the override, when it sets one.
5731
+ */
5397
5732
  max_cyclomatic?: (number | null)
5733
+ /**
5734
+ * Cognitive ceiling set by the override, when it sets one.
5735
+ */
5398
5736
  max_cognitive?: (number | null)
5737
+ /**
5738
+ * CRAP ceiling set by the override, when it sets one.
5739
+ */
5399
5740
  max_crap?: (number | null)
5741
+ /**
5742
+ * Unit-size ceiling set by the override, when it sets one.
5743
+ */
5400
5744
  max_unit_size?: (number | null)
5401
5745
  }
5402
5746
  /**
5403
5747
  * Current complexity metrics for a matched threshold override entry.
5404
5748
  */
5405
5749
  export interface ThresholdOverrideMetrics {
5750
+ /**
5751
+ * Current cyclomatic complexity of the matched function.
5752
+ */
5406
5753
  cyclomatic: number
5754
+ /**
5755
+ * Current cognitive complexity of the matched function.
5756
+ */
5407
5757
  cognitive: number
5758
+ /**
5759
+ * Current CRAP score, when coverage data exists.
5760
+ */
5408
5761
  crap?: (number | null)
5409
5762
  }
5410
5763
  /**
@@ -5564,11 +5917,30 @@ total_files: number
5564
5917
  * Total number of exports across all files.
5565
5918
  */
5566
5919
  total_exports: number
5920
+ /**
5921
+ * Number of unreachable files.
5922
+ */
5567
5923
  dead_files: number
5924
+ /**
5925
+ * Number of unused exports.
5926
+ */
5568
5927
  dead_exports: number
5928
+ /**
5929
+ * Lines inside detected clones; absent when duplication did not run.
5930
+ */
5569
5931
  duplicated_lines?: (number | null)
5932
+ /**
5933
+ * Lines scanned by duplication; absent when duplication did not run.
5934
+ */
5570
5935
  total_lines?: (number | null)
5936
+ /**
5937
+ * Files with a computed maintainability score; absent when file scoring
5938
+ * did not run.
5939
+ */
5571
5940
  files_scored?: (number | null)
5941
+ /**
5942
+ * Total declared dependencies across manifest sections.
5943
+ */
5572
5944
  total_deps: number
5573
5945
  }
5574
5946
  /**
@@ -5632,9 +6004,21 @@ render_sites: number
5632
6004
  */
5633
6005
  distinct_parents: number
5634
6006
  }
6007
+ /**
6008
+ * Overall project health score: 100 minus capped per-category penalties.
6009
+ */
5635
6010
  export interface HealthScore {
6011
+ /**
6012
+ * Score formula version; see [`HEALTH_SCORE_FORMULA_VERSION`].
6013
+ */
5636
6014
  formula_version: number
6015
+ /**
6016
+ * Health score in `[0, 100]`; higher is healthier.
6017
+ */
5637
6018
  score: number
6019
+ /**
6020
+ * Letter grade from [`letter_grade`] (A>=85, B>=70, C>=55, D>=40, F<40).
6021
+ */
5638
6022
  grade: string
5639
6023
  penalties: HealthScorePenalties
5640
6024
  }
@@ -5642,13 +6026,44 @@ penalties: HealthScorePenalties
5642
6026
  * Per-component penalty breakdown for the health score.
5643
6027
  */
5644
6028
  export interface HealthScorePenalties {
6029
+ /**
6030
+ * Points subtracted for unreachable files; absent when dead-code data
6031
+ * was not available.
6032
+ */
5645
6033
  dead_files?: (number | null)
6034
+ /**
6035
+ * Points subtracted for unused exports; absent when dead-code data was
6036
+ * not available.
6037
+ */
5646
6038
  dead_exports?: (number | null)
5647
- complexity: number
6039
+ /**
6040
+ * Points subtracted for overall complexity load.
6041
+ */
6042
+ complexity: number
6043
+ /**
6044
+ * Points subtracted for the complexity tail (v1: p90 cyclomatic; v2:
6045
+ * critical-complexity density).
6046
+ */
5648
6047
  p90_complexity: number
6048
+ /**
6049
+ * Points subtracted for low maintainability-index files; absent when
6050
+ * file scores were not computed.
6051
+ */
5649
6052
  maintainability?: (number | null)
6053
+ /**
6054
+ * Points subtracted for churn-times-complexity hotspots; absent without
6055
+ * git history.
6056
+ */
5650
6057
  hotspots?: (number | null)
6058
+ /**
6059
+ * Points subtracted for unused dependencies; absent when dead-code data
6060
+ * was not available.
6061
+ */
5651
6062
  unused_deps?: (number | null)
6063
+ /**
6064
+ * Points subtracted for circular dependency chains; absent when
6065
+ * dead-code data was not available.
6066
+ */
5652
6067
  circular_deps?: (number | null)
5653
6068
  /**
5654
6069
  * Penalty for oversized functions, computed against fixed calibration
@@ -5658,7 +6073,15 @@ circular_deps?: (number | null)
5658
6073
  * penalty. `health.ignore` removes files from the score entirely.
5659
6074
  */
5660
6075
  unit_size?: (number | null)
6076
+ /**
6077
+ * Points subtracted for fan-in coupling concentration; absent when the
6078
+ * module graph was not available.
6079
+ */
5661
6080
  coupling?: (number | null)
6081
+ /**
6082
+ * Points subtracted for duplicated code; absent when the duplication
6083
+ * pipeline did not run.
6084
+ */
5662
6085
  duplication?: (number | null)
5663
6086
  /**
5664
6087
  * Small capped penalty for prop-drilling chains. `None` unless the opt-in
@@ -5670,17 +6093,53 @@ prop_drilling?: (number | null)
5670
6093
  * Per-file health score combining complexity, coupling, and dead code metrics.
5671
6094
  */
5672
6095
  export interface FileHealthScore {
6096
+ /**
6097
+ * File path relative to the project root.
6098
+ */
5673
6099
  path: string
6100
+ /**
6101
+ * Modules importing this file.
6102
+ */
5674
6103
  fan_in: number
6104
+ /**
6105
+ * Modules this file imports.
6106
+ */
5675
6107
  fan_out: number
6108
+ /**
6109
+ * Unused exports as a fraction of the file's exports, in `[0, 1]`.
6110
+ */
5676
6111
  dead_code_ratio: number
6112
+ /**
6113
+ * Total cyclomatic complexity per line of code.
6114
+ */
5677
6115
  complexity_density: number
6116
+ /**
6117
+ * Maintainability index (0-100); higher is healthier.
6118
+ */
5678
6119
  maintainability_index: number
6120
+ /**
6121
+ * Summed cyclomatic complexity over the file's functions.
6122
+ */
5679
6123
  total_cyclomatic: number
6124
+ /**
6125
+ * Summed cognitive complexity over the file's functions.
6126
+ */
5680
6127
  total_cognitive: number
6128
+ /**
6129
+ * Functions in the file.
6130
+ */
5681
6131
  function_count: number
6132
+ /**
6133
+ * Lines of code in the file.
6134
+ */
5682
6135
  lines: number
6136
+ /**
6137
+ * Highest CRAP score among the file's functions.
6138
+ */
5683
6139
  crap_max: number
6140
+ /**
6141
+ * Functions whose CRAP score exceeds the threshold.
6142
+ */
5684
6143
  crap_above_threshold: number
5685
6144
  }
5686
6145
  /**
@@ -5864,16 +6323,46 @@ comment?: (string | null)
5864
6323
  * test code.
5865
6324
  */
5866
6325
  export interface HotspotFinding {
6326
+ /**
6327
+ * File path relative to the project root.
6328
+ */
5867
6329
  path: string
6330
+ /**
6331
+ * Churn-times-complexity hotspot score; higher is riskier.
6332
+ */
5868
6333
  score: number
6334
+ /**
6335
+ * Commits touching the file in the analysis window.
6336
+ */
5869
6337
  commits: number
6338
+ /**
6339
+ * Recency-weighted commit count.
6340
+ */
5870
6341
  weighted_commits: number
6342
+ /**
6343
+ * Lines added to the file in the analysis window.
6344
+ */
5871
6345
  lines_added: number
6346
+ /**
6347
+ * Lines deleted from the file in the analysis window.
6348
+ */
5872
6349
  lines_deleted: number
6350
+ /**
6351
+ * Total cyclomatic complexity per line of code.
6352
+ */
5873
6353
  complexity_density: number
6354
+ /**
6355
+ * Modules importing this file.
6356
+ */
5874
6357
  fan_in: number
5875
6358
  trend: ChurnTrend
6359
+ /**
6360
+ * Ownership metrics, when ownership analysis ran.
6361
+ */
5876
6362
  ownership?: (OwnershipMetrics | null)
6363
+ /**
6364
+ * True for files matched by test-path patterns; omitted when false.
6365
+ */
5877
6366
  is_test_path?: boolean
5878
6367
  /**
5879
6368
  * Machine-actionable refactor and review hints. Always populated;
@@ -5885,23 +6374,67 @@ is_test_path?: boolean
5885
6374
  */
5886
6375
  actions: HotspotAction[]
5887
6376
  }
6377
+ /**
6378
+ * Ownership metrics for a hotspot file, derived from git history and
6379
+ * CODEOWNERS declarations.
6380
+ */
5888
6381
  export interface OwnershipMetrics {
6382
+ /**
6383
+ * Minimum contributors covering half the file's commits.
6384
+ */
5889
6385
  bus_factor: number
6386
+ /**
6387
+ * Distinct contributors touching the file in the window.
6388
+ */
5890
6389
  contributor_count: number
5891
6390
  top_contributor: ContributorEntry
6391
+ /**
6392
+ * Contributors active in the recent window; omitted when empty.
6393
+ */
5892
6394
  recent_contributors?: ContributorEntry[]
6395
+ /**
6396
+ * Contributors best positioned to review changes; omitted when empty.
6397
+ */
5893
6398
  suggested_reviewers?: ContributorEntry[]
6399
+ /**
6400
+ * Owner declared in CODEOWNERS, when one matches the file.
6401
+ */
5894
6402
  declared_owner?: (string | null)
6403
+ /**
6404
+ * Whether no owner could be resolved; `null` when ownership resolution
6405
+ * did not run.
6406
+ */
5895
6407
  unowned?: (boolean | null)
5896
6408
  ownership_state: OwnershipState
6409
+ /**
6410
+ * True when recent contributions drift away from the declared ownership.
6411
+ */
5897
6412
  drift: boolean
6413
+ /**
6414
+ * Human-readable explanation of the drift, when drifting.
6415
+ */
5898
6416
  drift_reason?: (string | null)
5899
6417
  }
6418
+ /**
6419
+ * One contributor row in ownership metrics.
6420
+ */
5900
6421
  export interface ContributorEntry {
6422
+ /**
6423
+ * Contributor identifier, encoded per `format`.
6424
+ */
5901
6425
  identifier: string
5902
6426
  format: ContributorIdentifierFormat
6427
+ /**
6428
+ * Contributor's share of the file's commits, in `[0, 1]`.
6429
+ */
5903
6430
  share: number
6431
+ /**
6432
+ * Days since the contributor's last commit to the file.
6433
+ */
5904
6434
  stale_days: number
6435
+ /**
6436
+ * Contributor's commits touching the file in the window.
6437
+ */
5905
6438
  commits: number
5906
6439
  }
5907
6440
  /**
@@ -5944,11 +6477,30 @@ suggested_pattern?: (string | null)
5944
6477
  */
5945
6478
  heuristic?: (HotspotActionHeuristic | null)
5946
6479
  }
6480
+ /**
6481
+ * Scope metadata for the hotspot analysis.
6482
+ */
5947
6483
  export interface HotspotSummary {
6484
+ /**
6485
+ * Start of the churn window, as passed to `git log --since`.
6486
+ */
5948
6487
  since: string
6488
+ /**
6489
+ * Minimum commit count for a file to qualify as a hotspot.
6490
+ */
5949
6491
  min_commits: number
6492
+ /**
6493
+ * Files with churn data in the window.
6494
+ */
5950
6495
  files_analyzed: number
6496
+ /**
6497
+ * Files excluded by test-path and ignore filters.
6498
+ */
5951
6499
  files_excluded: number
6500
+ /**
6501
+ * True when the repository is a shallow clone, so churn counts are
6502
+ * truncated.
6503
+ */
5952
6504
  shallow_clone: boolean
5953
6505
  }
5954
6506
  /**
@@ -6101,6 +6653,9 @@ lazy_parse_warning: boolean
6101
6653
  */
6102
6654
  untracked_ratio_percent: number
6103
6655
  }
6656
+ /**
6657
+ * One per-function runtime-coverage finding in `runtime_coverage.findings`.
6658
+ */
6104
6659
  export interface RuntimeCoverageFinding {
6105
6660
  /**
6106
6661
  * Per-finding suppression key of the form `fallow:prod:<hash>` (first 8 hex
@@ -6207,6 +6762,9 @@ export interface RuntimeCoverageAction {
6207
6762
  * consumers should treat unknown values as forward-compat extensions.
6208
6763
  */
6209
6764
  type: string
6765
+ /**
6766
+ * Human-readable action description.
6767
+ */
6210
6768
  description: string
6211
6769
  /**
6212
6770
  * Whether fallow can apply this action automatically.
@@ -6255,6 +6813,9 @@ min_observation_volume: number
6255
6813
  */
6256
6814
  meets_observation_volume: boolean
6257
6815
  }
6816
+ /**
6817
+ * One hot function in `runtime_coverage.hot_paths`, ranked by invocations.
6818
+ */
6258
6819
  export interface RuntimeCoverageHotPath {
6259
6820
  /**
6260
6821
  * Stable content-hash ID of the form `fallow:hot:<hash>`.
@@ -6301,6 +6862,10 @@ percentile: number
6301
6862
  */
6302
6863
  actions?: RuntimeCoverageAction[]
6303
6864
  }
6865
+ /**
6866
+ * One blast-radius entry in `runtime_coverage.blast_radius`: how far a
6867
+ * change to the function would ripple.
6868
+ */
6304
6869
  export interface RuntimeCoverageBlastRadiusEntry {
6305
6870
  /**
6306
6871
  * Stable content-hash ID of the form `fallow:blast:<hash>`.
@@ -6339,6 +6904,10 @@ caller_count_weighted_by_traffic: number
6339
6904
  deploys_touched?: (number | null)
6340
6905
  risk_band: RuntimeCoverageRiskBand
6341
6906
  }
6907
+ /**
6908
+ * One production-importance entry in `runtime_coverage.importance`, scoring
6909
+ * how much a function matters in production.
6910
+ */
6342
6911
  export interface RuntimeCoverageImportanceEntry {
6343
6912
  /**
6344
6913
  * Stable content-hash ID of the form `fallow:importance:<hash>`.
@@ -6385,7 +6954,13 @@ importance_score: number
6385
6954
  */
6386
6955
  reason: string
6387
6956
  }
6957
+ /**
6958
+ * Non-fatal diagnostic emitted while merging runtime coverage.
6959
+ */
6388
6960
  export interface RuntimeCoverageMessage {
6961
+ /**
6962
+ * Stable machine-readable warning code.
6963
+ */
6389
6964
  code: string
6390
6965
  /**
6391
6966
  * Human-readable warning message.
@@ -6437,17 +7012,38 @@ export interface CoverageIntelligenceReport {
6437
7012
  schema_version: CoverageIntelligenceSchemaVersion
6438
7013
  verdict: CoverageIntelligenceVerdict
6439
7014
  summary: CoverageIntelligenceSummary
7015
+ /**
7016
+ * Combined findings, one per matched unit.
7017
+ */
6440
7018
  findings: CoverageIntelligenceFinding[]
6441
7019
  }
6442
7020
  /**
6443
7021
  * Aggregate metadata for coverage-intelligence output.
6444
7022
  */
6445
7023
  export interface CoverageIntelligenceSummary {
7024
+ /**
7025
+ * Total combined findings.
7026
+ */
6446
7027
  findings: number
7028
+ /**
7029
+ * Findings with the risky-change verdict.
7030
+ */
6447
7031
  risky_changes: number
7032
+ /**
7033
+ * Findings with the high-confidence-delete verdict.
7034
+ */
6448
7035
  high_confidence_deletes: number
7036
+ /**
7037
+ * Findings with the review-required verdict.
7038
+ */
6449
7039
  review_required: number
7040
+ /**
7041
+ * Findings with the refactor-carefully verdict.
7042
+ */
6450
7043
  refactor_carefully: number
7044
+ /**
7045
+ * Candidate joins dropped because the cross-surface match was ambiguous.
7046
+ */
6451
7047
  skipped_ambiguous_matches: number
6452
7048
  }
6453
7049
  /**
@@ -6471,24 +7067,58 @@ identity?: (string | null)
6471
7067
  */
6472
7068
  line: number
6473
7069
  verdict: CoverageIntelligenceVerdict
7070
+ /**
7071
+ * Ordered evidence signals behind the verdict.
7072
+ */
6474
7073
  signals: CoverageIntelligenceSignal[]
6475
7074
  recommendation: CoverageIntelligenceRecommendation
6476
7075
  confidence: CoverageIntelligenceConfidence
7076
+ /**
7077
+ * IDs of related findings from other fallow surfaces.
7078
+ */
6477
7079
  related_ids?: string[]
6478
7080
  evidence: CoverageIntelligenceEvidence
7081
+ /**
7082
+ * Machine-actionable follow-up actions.
7083
+ */
6479
7084
  actions: CoverageIntelligenceAction[]
6480
7085
  }
6481
7086
  /**
6482
7087
  * Compact evidence values that led to a recommendation.
6483
7088
  */
6484
7089
  export interface CoverageIntelligenceEvidence {
7090
+ /**
7091
+ * Test coverage percentage (0-100), when coverage data exists.
7092
+ */
6485
7093
  coverage_pct?: (number | null)
7094
+ /**
7095
+ * CRAP score, when complexity and coverage both exist.
7096
+ */
6486
7097
  crap?: (number | null)
7098
+ /**
7099
+ * Runtime-coverage verdict label, e.g. `hot` or `cold`.
7100
+ */
6487
7101
  runtime_verdict?: (string | null)
7102
+ /**
7103
+ * Observed runtime invocation count.
7104
+ */
6488
7105
  invocations?: (number | null)
7106
+ /**
7107
+ * Static usage status label, e.g. `unused`.
7108
+ */
6489
7109
  static_status?: (string | null)
7110
+ /**
7111
+ * Static test-coverage status label, e.g. `no-test-path`.
7112
+ */
6490
7113
  test_coverage?: (string | null)
7114
+ /**
7115
+ * True when the unit is inside the current change scope; omitted when
7116
+ * false.
7117
+ */
6491
7118
  changed?: boolean
7119
+ /**
7120
+ * Ownership-drift state label, when ownership analysis ran.
7121
+ */
6492
7122
  ownership_state?: (string | null)
6493
7123
  match_confidence: CoverageIntelligenceMatchConfidence
6494
7124
  }
@@ -6500,6 +7130,9 @@ export interface CoverageIntelligenceAction {
6500
7130
  * Action identifier, normalized to `type` in JSON output.
6501
7131
  */
6502
7132
  type: string
7133
+ /**
7134
+ * Human-readable action description.
7135
+ */
6503
7136
  description: string
6504
7137
  /**
6505
7138
  * Whether fallow can apply this action automatically.
@@ -6510,9 +7143,21 @@ auto_fixable: boolean
6510
7143
  * A function exceeding the very-high-risk size threshold (>60 LOC).
6511
7144
  */
6512
7145
  export interface LargeFunctionEntry {
7146
+ /**
7147
+ * File path relative to the project root.
7148
+ */
6513
7149
  path: string
7150
+ /**
7151
+ * Function name, or a synthesized name for anonymous functions.
7152
+ */
6514
7153
  name: string
7154
+ /**
7155
+ * 1-based line the function starts on.
7156
+ */
6515
7157
  line: number
7158
+ /**
7159
+ * Lines of code in the function body.
7160
+ */
6516
7161
  line_count: number
6517
7162
  }
6518
7163
  /**
@@ -8005,8 +8650,17 @@ count: number
8005
8650
  * (A>=85, B>=70, C>=55, D>=40, F<40), so the two axes are read on one scale.
8006
8651
  */
8007
8652
  export interface StylingHealth {
8653
+ /**
8654
+ * Styling formula version; see [`STYLING_HEALTH_FORMULA_VERSION`].
8655
+ */
8008
8656
  formula_version: number
8657
+ /**
8658
+ * Styling-health score in `[0, 100]`; higher is healthier.
8659
+ */
8009
8660
  score: number
8661
+ /**
8662
+ * Letter grade from the shared [`letter_grade`] thresholds.
8663
+ */
8010
8664
  grade: string
8011
8665
  penalties: StylingHealthPenalties
8012
8666
  confidence: StylingHealthConfidence
@@ -8135,12 +8789,33 @@ introduced?: (boolean | null)
8135
8789
  * fallow JSON-producing command.
8136
8790
  */
8137
8791
  export interface ExplainOutput {
8792
+ /**
8793
+ * Issue-type identifier, e.g. `unused-export`.
8794
+ */
8138
8795
  id: string
8796
+ /**
8797
+ * Human-readable issue-type name.
8798
+ */
8139
8799
  name: string
8800
+ /**
8801
+ * One-line description of what the issue type reports.
8802
+ */
8140
8803
  summary: string
8804
+ /**
8805
+ * Why the issue matters.
8806
+ */
8141
8807
  rationale: string
8808
+ /**
8809
+ * Illustrative code example of the issue.
8810
+ */
8142
8811
  example: string
8812
+ /**
8813
+ * How to resolve findings of this type.
8814
+ */
8143
8815
  how_to_fix: string
8816
+ /**
8817
+ * Public documentation URL for the issue type.
8818
+ */
8144
8819
  docs: string
8145
8820
  }
8146
8821
  /**
@@ -8150,27 +8825,83 @@ export interface InspectOutput {
8150
8825
  target: InspectTargetDescriptor
8151
8826
  identity: InspectIdentity
8152
8827
  evidence: InspectEvidence
8828
+ /**
8829
+ * Non-fatal problems encountered while gathering evidence.
8830
+ */
8153
8831
  warnings: string[]
8832
+ /**
8833
+ * `_meta` block with type-aware backend info, when applicable.
8834
+ */
8154
8835
  _meta?: (Meta | null)
8155
8836
  }
8837
+ /**
8838
+ * Graph identity facts for a file target. `Value`-typed fields carry the
8839
+ * graph's verdict when analysis ran and are `null` when it did not.
8840
+ */
8156
8841
  export interface InspectFileIdentity {
8842
+ /**
8843
+ * File path relative to the analysed root.
8844
+ */
8157
8845
  file: string
8158
- is_reachable?: unknown
8159
- is_entry_point?: unknown
8846
+ /**
8847
+ * Whether the module graph can reach the file from an entry point.
8848
+ */
8849
+ is_reachable?: (boolean | null)
8850
+ /**
8851
+ * Whether the file is itself an entry point.
8852
+ */
8853
+ is_entry_point?: (boolean | null)
8854
+ /**
8855
+ * Number of exports the file declares.
8856
+ */
8160
8857
  export_count?: (number | null)
8858
+ /**
8859
+ * Number of modules the file imports.
8860
+ */
8161
8861
  import_count?: (number | null)
8862
+ /**
8863
+ * Number of modules that import the file.
8864
+ */
8162
8865
  imported_by_count?: (number | null)
8163
8866
  }
8867
+ /**
8868
+ * Graph identity facts for a symbol target. `Value`-typed fields carry the
8869
+ * graph's verdict when analysis ran and are `null` when it did not.
8870
+ */
8164
8871
  export interface InspectSymbolIdentity {
8872
+ /**
8873
+ * File path relative to the analysed root.
8874
+ */
8165
8875
  file: string
8876
+ /**
8877
+ * Name of the inspected export.
8878
+ */
8166
8879
  export_name: string
8167
- file_reachable?: unknown
8168
- is_entry_point?: unknown
8169
- is_used?: unknown
8170
- reason?: unknown
8880
+ /**
8881
+ * Whether the containing file is reachable from an entry point.
8882
+ */
8883
+ file_reachable?: (boolean | null)
8884
+ /**
8885
+ * Whether the containing file is itself an entry point.
8886
+ */
8887
+ is_entry_point?: (boolean | null)
8888
+ /**
8889
+ * Whether the export has any recorded consumer.
8890
+ */
8891
+ is_used?: (boolean | null)
8892
+ /**
8893
+ * Explanation of the usage verdict, when the graph recorded one.
8894
+ */
8895
+ reason?: (string | null)
8171
8896
  }
8897
+ /**
8898
+ * `evidence` block of [`InspectOutput`]: one section per analysis.
8899
+ */
8172
8900
  export interface InspectEvidence {
8173
8901
  trace_file: InspectEvidenceSection
8902
+ /**
8903
+ * Export-level usage trace; present only for symbol targets.
8904
+ */
8174
8905
  trace_export?: (InspectEvidenceSection | null)
8175
8906
  dead_code: InspectEvidenceSection
8176
8907
  duplication: InspectEvidenceSection
@@ -8210,11 +8941,23 @@ symbol_impact?: (InspectEvidenceSection | null)
8210
8941
  */
8211
8942
  targeted_tests?: (InspectEvidenceSection | null)
8212
8943
  }
8944
+ /**
8945
+ * One evidence section: status, the scope the evidence covers, and either a
8946
+ * data payload or a message explaining its absence.
8947
+ */
8213
8948
  export interface InspectEvidenceSection {
8214
8949
  status: InspectSectionStatus
8215
8950
  scope: InspectEvidenceScope
8951
+ /**
8952
+ * Explanation for `error` / `unavailable` sections.
8953
+ */
8216
8954
  message?: (string | null)
8217
- data?: unknown
8955
+ /**
8956
+ * Section payload; present when the analysis ran.
8957
+ */
8958
+ data?: {
8959
+ [k: string]: unknown
8960
+ }
8218
8961
  }
8219
8962
  /**
8220
8963
  * Result of tracing an export: why it is considered used or unused.
@@ -8484,6 +9227,14 @@ token_count: number
8484
9227
  * Number of lines in the duplicated block.
8485
9228
  */
8486
9229
  line_count: number
9230
+ /**
9231
+ * Maximum directory-tree or same-file line distance between instances.
9232
+ */
9233
+ spread: number
9234
+ /**
9235
+ * Lowest all-pairs similarity for a near-miss clone group.
9236
+ */
9237
+ similarity?: number
8487
9238
  /**
8488
9239
  * Root-relative clone instances in this group.
8489
9240
  */
@@ -8631,40 +9382,91 @@ meta: ReviewEnvelopeMeta
8631
9382
  * Summary block on [`ReviewEnvelopeOutput`].
8632
9383
  */
8633
9384
  export interface ReviewEnvelopeSummary {
9385
+ /**
9386
+ * Summary comment body markdown.
9387
+ */
8634
9388
  body: string
9389
+ /**
9390
+ * Stable fingerprint of the summary body, used for sticky updates.
9391
+ */
8635
9392
  fingerprint: string
8636
9393
  }
8637
9394
  /**
8638
9395
  * GitHub pull-request review comment.
8639
9396
  */
8640
9397
  export interface GitHubReviewComment {
9398
+ /**
9399
+ * File path relative to the repository root.
9400
+ */
8641
9401
  path: string
9402
+ /**
9403
+ * 1-based line on the new side of the diff.
9404
+ */
8642
9405
  line: number
8643
9406
  side: GitHubReviewSide
9407
+ /**
9408
+ * Comment body markdown, fingerprint marker included.
9409
+ */
8644
9410
  body: string
9411
+ /**
9412
+ * Stable finding fingerprint used for comment reconciliation.
9413
+ */
8645
9414
  fingerprint: string
9415
+ /**
9416
+ * True when the body was cut to fit the provider size limit; omitted
9417
+ * when false.
9418
+ */
8646
9419
  truncated?: boolean
8647
9420
  }
8648
9421
  /**
8649
9422
  * GitLab merge-request discussion comment.
8650
9423
  */
8651
9424
  export interface GitLabReviewComment {
9425
+ /**
9426
+ * Comment body markdown, fingerprint marker included.
9427
+ */
8652
9428
  body: string
8653
9429
  position: GitLabReviewPosition
8654
- fingerprint: string
8655
- truncated?: boolean
8656
- }
9430
+ /**
9431
+ * Stable finding fingerprint used for comment reconciliation.
9432
+ */
9433
+ fingerprint: string
9434
+ /**
9435
+ * True when the body was cut to fit the provider size limit; omitted
9436
+ * when false.
9437
+ */
9438
+ truncated?: boolean
9439
+ }
8657
9440
  /**
8658
9441
  * `position` block inside [`GitLabReviewComment`]. Mirrors the GitLab
8659
9442
  * merge-request discussion-position API.
8660
9443
  */
8661
9444
  export interface GitLabReviewPosition {
9445
+ /**
9446
+ * Merge-base SHA of the MR diff; absent when refs were not supplied.
9447
+ */
8662
9448
  base_sha?: (string | null)
9449
+ /**
9450
+ * First commit SHA of the MR diff; absent when refs were not supplied.
9451
+ */
8663
9452
  start_sha?: (string | null)
9453
+ /**
9454
+ * Head commit SHA of the MR diff; absent when refs were not supplied.
9455
+ */
8664
9456
  head_sha?: (string | null)
8665
9457
  position_type: GitLabReviewPositionType
9458
+ /**
9459
+ * Pre-rename path when the diff renamed the file, else the same as
9460
+ * `new_path`.
9461
+ */
8666
9462
  old_path: string
9463
+ /**
9464
+ * File path on the new side of the diff.
9465
+ */
8667
9466
  new_path: string
9467
+ /**
9468
+ * 1-based line on the new side of the diff.
9469
+ */
8668
9470
  new_line: number
8669
9471
  }
8670
9472
  /**
@@ -8684,21 +9486,69 @@ review_id?: (ReviewId | null)
8684
9486
  export interface ReviewReconcileOutput {
8685
9487
  schema: ReviewReconcileSchema
8686
9488
  provider: ReviewProvider
9489
+ /**
9490
+ * PR / MR reference that was reconciled, when one was resolved.
9491
+ */
8687
9492
  target?: (string | null)
9493
+ /**
9494
+ * True when no provider mutations were performed.
9495
+ */
8688
9496
  dry_run: boolean
9497
+ /**
9498
+ * Inline comments in the review envelope being reconciled.
9499
+ */
8689
9500
  comments: number
9501
+ /**
9502
+ * Distinct fingerprints in the current run's findings.
9503
+ */
8690
9504
  current_fingerprints: number
9505
+ /**
9506
+ * Distinct fingerprints found in existing comments.
9507
+ */
8691
9508
  existing_fingerprints: number
9509
+ /**
9510
+ * Fingerprints present in the current run but not yet commented.
9511
+ */
8692
9512
  new_fingerprints: number
9513
+ /**
9514
+ * Fingerprints commented earlier whose findings no longer exist.
9515
+ */
8693
9516
  stale_fingerprints: number
9517
+ /**
9518
+ * The new fingerprints themselves.
9519
+ */
8694
9520
  new: string[]
9521
+ /**
9522
+ * The stale fingerprints themselves.
9523
+ */
8695
9524
  stale: string[]
9525
+ /**
9526
+ * Non-fatal provider API warning encountered during reconciliation.
9527
+ */
8696
9528
  provider_warning?: (string | null)
9529
+ /**
9530
+ * Resolution replies posted to stale comment threads.
9531
+ */
8697
9532
  resolution_comments_posted: number
9533
+ /**
9534
+ * Stale discussion threads resolved (GitLab).
9535
+ */
8698
9536
  threads_resolved: number
9537
+ /**
9538
+ * Remediation guidance when the apply loop stopped before finishing.
9539
+ */
8699
9540
  apply_hint?: (string | null)
9541
+ /**
9542
+ * Errors encountered while applying provider mutations.
9543
+ */
8700
9544
  apply_errors: string[]
9545
+ /**
9546
+ * Fingerprints whose provider mutation failed.
9547
+ */
8701
9548
  failed_fingerprints?: string[]
9549
+ /**
9550
+ * Fingerprints left unprocessed after a failure aborted the apply loop.
9551
+ */
8702
9552
  unapplied_fingerprints?: string[]
8703
9553
  }
8704
9554
  /**
@@ -8707,43 +9557,135 @@ unapplied_fingerprints?: string[]
8707
9557
  export interface CoverageSetupOutput {
8708
9558
  schema_version: CoverageSetupSchemaVersion
8709
9559
  framework_detected: CoverageSetupFramework
9560
+ /**
9561
+ * Package manager detected from lockfiles, when one was found.
9562
+ */
8710
9563
  package_manager?: (CoverageSetupPackageManager | null)
9564
+ /**
9565
+ * Runtimes the instrumentation must cover at the project root.
9566
+ */
8711
9567
  runtime_targets: CoverageSetupRuntimeTarget[]
9568
+ /**
9569
+ * Per-member setup guidance for workspace projects.
9570
+ */
8712
9571
  members: CoverageSetupMember[]
8713
- config_written?: unknown
9572
+ /**
9573
+ * Coverage config that was written to disk, when setup wrote one.
9574
+ */
9575
+ config_written?: {
9576
+ [k: string]: unknown
9577
+ }
9578
+ /**
9579
+ * Shell commands the user should run to complete setup.
9580
+ */
8714
9581
  commands: string[]
9582
+ /**
9583
+ * Files the user must edit by hand, with reasons.
9584
+ */
8715
9585
  files_to_edit: CoverageSetupFileToEdit[]
9586
+ /**
9587
+ * Ready-to-paste code snippets for the files to edit.
9588
+ */
8716
9589
  snippets: CoverageSetupSnippet[]
9590
+ /**
9591
+ * Dockerfile additions needed for containerized capture, when relevant.
9592
+ */
8717
9593
  dockerfile_snippet?: (string | null)
9594
+ /**
9595
+ * Ordered human-readable follow-up instructions.
9596
+ */
8718
9597
  next_steps: string[]
9598
+ /**
9599
+ * Non-fatal problems encountered during detection.
9600
+ */
8719
9601
  warnings: string[]
8720
- _meta?: unknown
9602
+ /**
9603
+ * `_meta` block with docs and field definitions, when requested.
9604
+ */
9605
+ _meta?: {
9606
+ [k: string]: unknown
9607
+ }
8721
9608
  }
9609
+ /**
9610
+ * Per-workspace-member setup guidance inside [`CoverageSetupOutput::members`].
9611
+ */
8722
9612
  export interface CoverageSetupMember {
9613
+ /**
9614
+ * Package name of the workspace member.
9615
+ */
8723
9616
  name: string
9617
+ /**
9618
+ * Member path relative to the workspace root.
9619
+ */
8724
9620
  path: string
8725
9621
  framework_detected: CoverageSetupFramework
9622
+ /**
9623
+ * Package manager detected for this member, when one was found.
9624
+ */
8726
9625
  package_manager?: (CoverageSetupPackageManager | null)
9626
+ /**
9627
+ * Runtimes the instrumentation must cover for this member.
9628
+ */
8727
9629
  runtime_targets: CoverageSetupRuntimeTarget[]
9630
+ /**
9631
+ * Files the user must edit by hand, with reasons.
9632
+ */
8728
9633
  files_to_edit: CoverageSetupFileToEdit[]
9634
+ /**
9635
+ * Ready-to-paste code snippets for the files to edit.
9636
+ */
8729
9637
  snippets: CoverageSetupSnippet[]
9638
+ /**
9639
+ * Dockerfile additions needed for containerized capture, when relevant.
9640
+ */
8730
9641
  dockerfile_snippet?: (string | null)
9642
+ /**
9643
+ * Non-fatal problems encountered during detection.
9644
+ */
8731
9645
  warnings: string[]
8732
9646
  }
9647
+ /**
9648
+ * One manual edit the user must make to wire up coverage capture.
9649
+ */
8733
9650
  export interface CoverageSetupFileToEdit {
9651
+ /**
9652
+ * File path relative to the project root.
9653
+ */
8734
9654
  path: string
9655
+ /**
9656
+ * Why the file needs editing.
9657
+ */
8735
9658
  reason: string
8736
9659
  }
9660
+ /**
9661
+ * Ready-to-paste code snippet accompanying a file edit.
9662
+ */
8737
9663
  export interface CoverageSetupSnippet {
9664
+ /**
9665
+ * Short description of what the snippet does.
9666
+ */
8738
9667
  label: string
9668
+ /**
9669
+ * File path the snippet belongs in.
9670
+ */
8739
9671
  path: string
9672
+ /**
9673
+ * The snippet source text.
9674
+ */
8740
9675
  content: string
8741
9676
  }
9677
+ /**
9678
+ * Envelope emitted by `fallow coverage analyze --format json`.
9679
+ */
8742
9680
  export interface CoverageAnalyzeOutput {
8743
9681
  schema_version: CoverageAnalyzeSchemaVersion
8744
9682
  version: ToolVersion
8745
9683
  elapsed_ms: ElapsedMs
8746
9684
  runtime_coverage: RuntimeCoverageReport
9685
+ /**
9686
+ * `_meta` block with docs and metric definitions, when `--explain` was
9687
+ * passed.
9688
+ */
8747
9689
  _meta?: (Meta | null)
8748
9690
  }
8749
9691
  /**
@@ -8759,12 +9701,33 @@ boundaries: BoundariesListing
8759
9701
  * `boundaries` block carried by [`ListBoundariesOutput`].
8760
9702
  */
8761
9703
  export interface BoundariesListing {
9704
+ /**
9705
+ * Whether the project configures architecture boundaries at all.
9706
+ */
8762
9707
  configured: boolean
9708
+ /**
9709
+ * Number of entries in `zones`.
9710
+ */
8763
9711
  zone_count: number
9712
+ /**
9713
+ * Boundary zones after preset and `autoDiscover` expansion.
9714
+ */
8764
9715
  zones: BoundariesListZone[]
9716
+ /**
9717
+ * Number of entries in `rules`.
9718
+ */
8765
9719
  rule_count: number
9720
+ /**
9721
+ * Import rules operating on expanded zone names.
9722
+ */
8766
9723
  rules: BoundariesListRule[]
9724
+ /**
9725
+ * Number of entries in `logical_groups`.
9726
+ */
8767
9727
  logical_group_count: number
9728
+ /**
9729
+ * Pre-expansion `autoDiscover` logical groups.
9730
+ */
8768
9731
  logical_groups: BoundariesListLogicalGroup[]
8769
9732
  }
8770
9733
  /**
@@ -8772,8 +9735,17 @@ logical_groups: BoundariesListLogicalGroup[]
8772
9735
  * classifies files into a single zone via glob patterns.
8773
9736
  */
8774
9737
  export interface BoundariesListZone {
9738
+ /**
9739
+ * Zone name referenced by rules.
9740
+ */
8775
9741
  name: string
9742
+ /**
9743
+ * Glob patterns that classify files into the zone.
9744
+ */
8776
9745
  patterns: string[]
9746
+ /**
9747
+ * Number of analyzable files the zone matched.
9748
+ */
8777
9749
  file_count: number
8778
9750
  }
8779
9751
  /**
@@ -8783,7 +9755,13 @@ file_count: number
8783
9755
  * corresponding [`BoundariesListLogicalGroup::authored_rule`].
8784
9756
  */
8785
9757
  export interface BoundariesListRule {
9758
+ /**
9759
+ * Zone the rule constrains imports from.
9760
+ */
8786
9761
  from: string
9762
+ /**
9763
+ * Zone names the `from` zone may import.
9764
+ */
8787
9765
  allow: string[]
8788
9766
  }
8789
9767
  /**
@@ -8793,16 +9771,46 @@ allow: string[]
8793
9771
  * [`BoundariesListing::zones`].
8794
9772
  */
8795
9773
  export interface BoundariesListLogicalGroup {
9774
+ /**
9775
+ * User-authored parent zone name.
9776
+ */
8796
9777
  name: string
9778
+ /**
9779
+ * Child zone names produced by discovery.
9780
+ */
8797
9781
  children: string[]
9782
+ /**
9783
+ * Authored `autoDiscover` paths.
9784
+ */
8798
9785
  auto_discover: string[]
8799
9786
  status: LogicalGroupStatus
9787
+ /**
9788
+ * Index of the authored entry in the pre-expansion `zones[]` config.
9789
+ */
8800
9790
  source_zone_index: number
9791
+ /**
9792
+ * Files matched across the group's zones.
9793
+ */
8801
9794
  file_count: number
9795
+ /**
9796
+ * User's pre-expansion rule keyed on the parent name, when authored.
9797
+ */
8802
9798
  authored_rule?: (AuthoredRule | null)
9799
+ /**
9800
+ * Zone that keeps the parent's own patterns when the parent kept any.
9801
+ */
8803
9802
  fallback_zone?: (string | null)
9803
+ /**
9804
+ * `zones[]` indices of duplicate parents merged into this group.
9805
+ */
8804
9806
  merged_from?: (number[] | null)
9807
+ /**
9808
+ * Authored parent `root`, when one was declared.
9809
+ */
8805
9810
  original_zone_root?: (string | null)
9811
+ /**
9812
+ * Per-child indices into the pre-expansion `zones[]` config.
9813
+ */
8806
9814
  child_source_indices?: number[]
8807
9815
  }
8808
9816
  /**
@@ -8872,7 +9880,7 @@ is_internal_dependency: boolean
8872
9880
  * documents the field and serde populates it natively.
8873
9881
  */
8874
9882
  export interface HealthOutput {
8875
- schema_version: SchemaVersion
9883
+ schema_version: HealthSchemaVersion
8876
9884
  version: ToolVersion
8877
9885
  elapsed_ms: ElapsedMs
8878
9886
  /**
@@ -8996,9 +10004,21 @@ styling_health?: (StylingHealth | null)
8996
10004
  * run is byte-unchanged.
8997
10005
  */
8998
10006
  styling_findings?: StylingFinding[]
10007
+ /**
10008
+ * Grouping mode when `--group-by` was passed.
10009
+ */
8999
10010
  grouped_by?: (GroupByMode | null)
10011
+ /**
10012
+ * Per-bucket recomputed metrics; present only in grouped output.
10013
+ */
9000
10014
  groups?: (HealthGroup[] | null)
10015
+ /**
10016
+ * `_meta` block with metric definitions, when `--explain` was passed.
10017
+ */
9001
10018
  _meta?: (Meta | null)
10019
+ /**
10020
+ * Workspace-discovery diagnostics surfaced during config load.
10021
+ */
9002
10022
  workspace_diagnostics?: WorkspaceDiagnostic[]
9003
10023
  /**
9004
10024
  * Read-only follow-up commands computed from this run's findings. See
@@ -9106,7 +10126,7 @@ actions_meta?: (HealthActionsMeta | null)
9106
10126
  * internals continue to migrate out of CLI/API-specific crates.
9107
10127
  */
9108
10128
  export interface DupesOutput {
9109
- schema_version: SchemaVersion
10129
+ schema_version: DupesSchemaVersion
9110
10130
  version: ToolVersion
9111
10131
  elapsed_ms: ElapsedMs
9112
10132
  /**
@@ -9128,8 +10148,17 @@ clone_families: CloneFamilyFinding[]
9128
10148
  */
9129
10149
  mirrored_directories?: MirroredDirectory[]
9130
10150
  stats: DuplicationStats
10151
+ /**
10152
+ * Grouping mode when `--group-by` was passed.
10153
+ */
9131
10154
  grouped_by?: (GroupByMode | null)
10155
+ /**
10156
+ * Total finding count across all groups; present only in grouped output.
10157
+ */
9132
10158
  total_issues?: (number | null)
10159
+ /**
10160
+ * Grouped findings; present only in grouped output.
10161
+ */
9133
10162
  groups?: (DuplicationGroup[] | null)
9134
10163
  /**
9135
10164
  * `_meta` block with metric / rule definitions, emitted when `--explain`
@@ -9196,6 +10225,10 @@ token_count: number
9196
10225
  * Number of source lines in the clone group.
9197
10226
  */
9198
10227
  line_count: number
10228
+ /**
10229
+ * Lowest all-pairs similarity for a near-miss clone group.
10230
+ */
10231
+ similarity?: number
9199
10232
  /**
9200
10233
  * Each instance carries its own `owner` field alongside the standard
9201
10234
  * CloneInstance shape.
@@ -9208,6 +10241,10 @@ instances: AttributedInstance[]
9208
10241
  * `clone_groups[].fingerprint` for the same clone.
9209
10242
  */
9210
10243
  fingerprint: string
10244
+ /**
10245
+ * Maximum directory-tree or same-file line distance between instances.
10246
+ */
10247
+ spread: number
9211
10248
  /**
9212
10249
  * Suggested next steps. Always emitted.
9213
10250
  */
@@ -9262,12 +10299,22 @@ owner: string
9262
10299
  * `CheckOutput` body, plus per-group `key` / `owners` / `total_issues`.
9263
10300
  */
9264
10301
  export interface CheckGroupedOutput {
9265
- schema_version: SchemaVersion
10302
+ schema_version: CheckSchemaVersion
9266
10303
  version: ToolVersion
9267
10304
  elapsed_ms: ElapsedMs
9268
10305
  grouped_by: GroupByMode
10306
+ /**
10307
+ * Total findings across all groups.
10308
+ */
9269
10309
  total_issues: number
10310
+ /**
10311
+ * One bucket per resolver key.
10312
+ */
9270
10313
  groups: CheckGroupedEntry[]
10314
+ /**
10315
+ * `_meta` block with docs and rule definitions, when `--explain` was
10316
+ * passed.
10317
+ */
9271
10318
  _meta?: (Meta | null)
9272
10319
  /**
9273
10320
  * Diagnostics collected for the full analysis before issue grouping.
@@ -9286,8 +10333,17 @@ next_steps?: NextStep[]
9286
10333
  * `AnalysisResults`.
9287
10334
  */
9288
10335
  export interface CheckGroupedEntry {
10336
+ /**
10337
+ * Resolver key: team name, directory prefix, package name, or section.
10338
+ */
9289
10339
  key: string
10340
+ /**
10341
+ * Owners of a GitLab CODEOWNERS section; present for section grouping.
10342
+ */
9290
10343
  owners?: (string[] | null)
10344
+ /**
10345
+ * Findings in this group.
10346
+ */
9291
10347
  total_issues: number
9292
10348
  /**
9293
10349
  * Files not reachable from any entry point. Wrapped in
@@ -9622,10 +10678,23 @@ duplicate_prop_shapes?: DuplicatePropShapeFinding[]
9622
10678
  */
9623
10679
  export interface ImpactReport {
9624
10680
  schema_version: ImpactReportSchemaVersion
10681
+ /**
10682
+ * Whether impact tracking is active for this project.
10683
+ */
9625
10684
  enabled: boolean
9626
10685
  enabled_source: EnabledSource
10686
+ /**
10687
+ * Number of recorded runs in the store.
10688
+ */
9627
10689
  record_count: number
10690
+ /**
10691
+ * `_meta` block with docs and field definitions, when `--explain` was
10692
+ * passed.
10693
+ */
9628
10694
  _meta?: (Meta | null)
10695
+ /**
10696
+ * Timestamp of the earliest recorded run; absent with no records.
10697
+ */
9629
10698
  first_recorded?: (string | null)
9630
10699
  /**
9631
10700
  * Git SHA of the most recent recorded run, so a consumer can tell which
@@ -9645,6 +10714,8 @@ latest_git_sha?: (string | null)
9645
10714
  surfacing?: (ImpactCounts | null)
9646
10715
  /**
9647
10716
  * Trend between the two most recent records. None until two records exist.
10717
+ * Trend between the two most recent changed-file records. None until two
10718
+ * records exist.
9648
10719
  */
9649
10720
  trend?: (TrendSummary | null)
9650
10721
  /**
@@ -9660,6 +10731,9 @@ project_surfacing?: (ImpactCounts | null)
9660
10731
  * `trend`. None until two full `fallow` runs exist. v1.6.
9661
10732
  */
9662
10733
  project_trend?: (TrendSummary | null)
10734
+ /**
10735
+ * Lifetime count of commit-gate containment events.
10736
+ */
9663
10737
  containment_count: number
9664
10738
  /**
9665
10739
  * Most recent containment events (newest last), capped for display.
@@ -9703,9 +10777,21 @@ explicit_decision: boolean
9703
10777
  * Per-category issue counts captured at a recorded run.
9704
10778
  */
9705
10779
  export interface ImpactCounts {
10780
+ /**
10781
+ * Sum of the category counts.
10782
+ */
9706
10783
  total_issues: number
10784
+ /**
10785
+ * Dead-code findings.
10786
+ */
9707
10787
  dead_code: number
10788
+ /**
10789
+ * Complexity findings.
10790
+ */
9708
10791
  complexity: number
10792
+ /**
10793
+ * Duplication findings.
10794
+ */
9709
10795
  duplication: number
9710
10796
  }
9711
10797
  /**
@@ -9717,15 +10803,30 @@ direction: ImpactTrendDirection
9717
10803
  * Signed delta in total issues, current minus previous.
9718
10804
  */
9719
10805
  total_delta: number
10806
+ /**
10807
+ * Total issues in the earlier run.
10808
+ */
9720
10809
  previous_total: number
10810
+ /**
10811
+ * Total issues in the later run.
10812
+ */
9721
10813
  current_total: number
9722
10814
  }
9723
10815
  /**
9724
10816
  * A commit-gate containment event recorded by `fallow impact`.
9725
10817
  */
9726
10818
  export interface ContainmentEvent {
10819
+ /**
10820
+ * Timestamp when the commit gate blocked the commit.
10821
+ */
9727
10822
  blocked_at: string
10823
+ /**
10824
+ * Timestamp when a later run passed clean.
10825
+ */
9728
10826
  cleared_at: string
10827
+ /**
10828
+ * Abbreviated SHA of the cleared commit, when in a git repo.
10829
+ */
9729
10830
  git_sha?: (string | null)
9730
10831
  blocked_counts: ImpactCounts
9731
10832
  }
@@ -9733,10 +10834,25 @@ blocked_counts: ImpactCounts
9733
10834
  * A resolved or suppressed finding attribution event.
9734
10835
  */
9735
10836
  export interface ResolutionEvent {
10837
+ /**
10838
+ * Finding kind that was resolved or suppressed, e.g. `unused-export`.
10839
+ */
9736
10840
  kind: string
10841
+ /**
10842
+ * Root-relative path of the resolved finding.
10843
+ */
9737
10844
  path: string
10845
+ /**
10846
+ * Symbol name, for symbol-level findings.
10847
+ */
9738
10848
  symbol?: (string | null)
10849
+ /**
10850
+ * Abbreviated SHA of the resolving commit, when in a git repo.
10851
+ */
9739
10852
  git_sha?: (string | null)
10853
+ /**
10854
+ * Timestamp the resolution was recorded.
10855
+ */
9740
10856
  timestamp: string
9741
10857
  }
9742
10858
  /**
@@ -9759,6 +10875,9 @@ tracked_count: number
9759
10875
  */
9760
10876
  unreadable_count: number
9761
10877
  totals: CrossRepoTotals
10878
+ /**
10879
+ * Per-project rows, one for each store with recorded history.
10880
+ */
9762
10881
  projects: CrossRepoProjectEntry[]
9763
10882
  }
9764
10883
  /**
@@ -9766,8 +10885,17 @@ projects: CrossRepoProjectEntry[]
9766
10885
  * longer exists on disk: their past wins still count toward lifetime impact).
9767
10886
  */
9768
10887
  export interface CrossRepoTotals {
10888
+ /**
10889
+ * Lifetime genuinely-resolved findings across projects.
10890
+ */
9769
10891
  resolved_total: number
10892
+ /**
10893
+ * Lifetime `fallow-ignore` suppressions across projects.
10894
+ */
9770
10895
  suppressed_total: number
10896
+ /**
10897
+ * Lifetime commit-gate containment events across projects.
10898
+ */
9771
10899
  containment_count: number
9772
10900
  /**
9773
10901
  * Sum of whole-project issue totals across projects that have a full-run
@@ -9775,6 +10903,9 @@ containment_count: number
9775
10903
  * snapshot).
9776
10904
  */
9777
10905
  project_wide_issues: number
10906
+ /**
10907
+ * Projects that have recorded at least one full `fallow` run.
10908
+ */
9778
10909
  projects_with_baseline: number
9779
10910
  }
9780
10911
  /**
@@ -9862,10 +10993,16 @@ categories_include: (string[] | null)
9862
10993
  */
9863
10994
  categories_exclude: (string[] | null)
9864
10995
  }
10996
+ /**
10997
+ * Per-rule severity context inside [`SecurityOutputConfig::rules`].
10998
+ */
9865
10999
  export interface SecurityOutputRulesConfig {
9866
11000
  security_client_server_leak: SecurityRuleSeverityConfig
9867
11001
  security_sink: SecurityRuleSeverityConfig
9868
11002
  }
11003
+ /**
11004
+ * Configured-versus-effective severity for one security rule.
11005
+ */
9869
11006
  export interface SecurityRuleSeverityConfig {
9870
11007
  configured: Severity
9871
11008
  effective: Severity
@@ -10373,8 +11510,17 @@ top_files_limit: number
10373
11510
  * One sampled unresolved-callee row.
10374
11511
  */
10375
11512
  export interface SecurityUnresolvedCalleeSample {
11513
+ /**
11514
+ * File path relative to the analysed root.
11515
+ */
10376
11516
  path: string
11517
+ /**
11518
+ * 1-based line of the skipped call site.
11519
+ */
10377
11520
  line: number
11521
+ /**
11522
+ * 1-based column of the skipped call site.
11523
+ */
10378
11524
  col: number
10379
11525
  reason: SkippedSecurityCalleeReason
10380
11526
  expression_kind: SkippedSecurityCalleeExpressionKind
@@ -10383,6 +11529,9 @@ expression_kind: SkippedSecurityCalleeExpressionKind
10383
11529
  * Count of unresolved callees in one file.
10384
11530
  */
10385
11531
  export interface SecurityUnresolvedCalleeTopFile {
11532
+ /**
11533
+ * File path relative to the analysed root.
11534
+ */
10386
11535
  path: string
10387
11536
  /**
10388
11537
  * Number of unresolved callees in this file.
@@ -10454,31 +11603,79 @@ attack_surface_entries: number
10454
11603
  * Fixed severity counters for summary JSON.
10455
11604
  */
10456
11605
  export interface SecuritySeverityCounts {
11606
+ /**
11607
+ * High-severity candidates.
11608
+ */
10457
11609
  high: number
11610
+ /**
11611
+ * Medium-severity candidates.
11612
+ */
10458
11613
  medium: number
11614
+ /**
11615
+ * Low-severity candidates.
11616
+ */
10459
11617
  low: number
10460
11618
  }
10461
11619
  /**
10462
11620
  * Fixed reachability counters for summary JSON.
10463
11621
  */
10464
11622
  export interface SecurityReachabilityCounts {
11623
+ /**
11624
+ * Candidates reachable from an entry point.
11625
+ */
10465
11626
  entry_reachable: number
11627
+ /**
11628
+ * Candidates reachable from an untrusted input source.
11629
+ */
10466
11630
  untrusted_source_reachable: number
11631
+ /**
11632
+ * Candidates where taint flows through a call argument.
11633
+ */
10467
11634
  arg_level: number
11635
+ /**
11636
+ * Candidates where taint is only module-level.
11637
+ */
10468
11638
  module_level: number
11639
+ /**
11640
+ * Candidates whose flow crosses a client/server boundary.
11641
+ */
10469
11642
  crosses_boundary: number
11643
+ /**
11644
+ * Candidates backed by a concrete taint source.
11645
+ */
10470
11646
  source_backed: number
10471
11647
  }
10472
11648
  /**
10473
11649
  * Fixed runtime coverage counters for summary JSON.
10474
11650
  */
10475
11651
  export interface SecurityRuntimeStateCounts {
11652
+ /**
11653
+ * Candidates on frequently executed runtime paths.
11654
+ */
10476
11655
  runtime_hot: number
11656
+ /**
11657
+ * Candidates on rarely executed runtime paths.
11658
+ */
10477
11659
  runtime_cold: number
11660
+ /**
11661
+ * Candidates on paths never seen executing.
11662
+ */
10478
11663
  never_executed: number
11664
+ /**
11665
+ * Candidates on low-traffic paths.
11666
+ */
10479
11667
  low_traffic: number
11668
+ /**
11669
+ * Candidates in files runtime coverage did not observe.
11670
+ */
10480
11671
  coverage_unavailable: number
11672
+ /**
11673
+ * Candidates whose runtime state could not be classified.
11674
+ */
10481
11675
  runtime_unknown: number
11676
+ /**
11677
+ * Candidates analysed without any runtime coverage data.
11678
+ */
10482
11679
  not_collected: number
10483
11680
  }
10484
11681
  /**
@@ -10507,11 +11704,29 @@ needs_human_review: {
10507
11704
  * Aggregate counts for survivor rendering.
10508
11705
  */
10509
11706
  export interface SecuritySurvivorsSummary {
11707
+ /**
11708
+ * Candidates in the input security report.
11709
+ */
10510
11710
  candidates: number
11711
+ /**
11712
+ * Verifier verdicts supplied.
11713
+ */
10511
11714
  verdicts: number
11715
+ /**
11716
+ * Candidates the verifier retained.
11717
+ */
10512
11718
  survivors: number
11719
+ /**
11720
+ * Candidates the verifier dismissed.
11721
+ */
10513
11722
  dismissed: number
11723
+ /**
11724
+ * Candidates the verifier flagged as ambiguous.
11725
+ */
10514
11726
  needs_human_review: number
11727
+ /**
11728
+ * Candidates without any verdict.
11729
+ */
10515
11730
  unverdicted: number
10516
11731
  }
10517
11732
  /**
@@ -10523,7 +11738,13 @@ export interface SecuritySurvivor {
10523
11738
  */
10524
11739
  finding_id: string
10525
11740
  verdict: SecurityVerifierVerdictStatus
11741
+ /**
11742
+ * Short machine-oriented verdict reason.
11743
+ */
10526
11744
  reason?: (string | null)
11745
+ /**
11746
+ * Longer free-form verdict explanation.
11747
+ */
10527
11748
  rationale?: (string | null)
10528
11749
  /**
10529
11750
  * Optional verifier-provided confidence or review priority.
@@ -10556,8 +11777,17 @@ groups: SecurityBlindSpotGroup[]
10556
11777
  * Aggregate counts for blind-spot output.
10557
11778
  */
10558
11779
  export interface SecurityBlindSpotsSummary {
11780
+ /**
11781
+ * Files containing at least one unresolved callee.
11782
+ */
10559
11783
  unresolved_edge_files: number
11784
+ /**
11785
+ * Total unresolved callee sites in the analysis.
11786
+ */
10560
11787
  unresolved_callee_sites: number
11788
+ /**
11789
+ * Callee sites captured in the bounded diagnostic sample.
11790
+ */
10561
11791
  sampled_callee_sites: number
10562
11792
  }
10563
11793
  /**
@@ -10583,6 +11813,9 @@ suggestion: string
10583
11813
  * One file inside a blind-spot group.
10584
11814
  */
10585
11815
  export interface SecurityBlindSpotFile {
11816
+ /**
11817
+ * File path relative to the analysed root.
11818
+ */
10586
11819
  path: string
10587
11820
  /**
10588
11821
  * Count in the bounded diagnostic sample.
@@ -10593,12 +11826,24 @@ sampled_count: number
10593
11826
  * Bare `fallow --format json` envelope.
10594
11827
  */
10595
11828
  export interface CombinedOutput {
10596
- schema_version: SchemaVersion
11829
+ schema_version: CombinedSchemaVersion
10597
11830
  version: ToolVersion
10598
11831
  elapsed_ms: ElapsedMs
11832
+ /**
11833
+ * Per-section `_meta` blocks, when `--explain` was passed.
11834
+ */
10599
11835
  _meta?: (CombinedMeta | null)
11836
+ /**
11837
+ * Dead-code section of the combined run.
11838
+ */
10600
11839
  check?: (CheckOutput | null)
11840
+ /**
11841
+ * Duplication section of the combined run.
11842
+ */
10601
11843
  dupes?: (DupesReportPayload | null)
11844
+ /**
11845
+ * Health section of the combined run.
11846
+ */
10602
11847
  health?: (HealthReport | null)
10603
11848
  /**
10604
11849
  * Read-only follow-up commands aggregated across the combined run's
@@ -10610,34 +11855,76 @@ next_steps?: NextStep[]
10610
11855
  * Optional `_meta` block for [`CombinedOutput`].
10611
11856
  */
10612
11857
  export interface CombinedMeta {
11858
+ /**
11859
+ * `_meta` block for the dead-code section.
11860
+ */
10613
11861
  check?: (Meta | null)
11862
+ /**
11863
+ * `_meta` block for the duplication section.
11864
+ */
10614
11865
  dupes?: (Meta | null)
11866
+ /**
11867
+ * `_meta` block for the health section.
11868
+ */
10615
11869
  health?: (Meta | null)
11870
+ /**
11871
+ * Telemetry identifiers for the run.
11872
+ */
10616
11873
  telemetry?: (TelemetryMeta | null)
10617
11874
  }
10618
11875
  /**
10619
11876
  * Envelope emitted by `fallow flags --format json`.
10620
11877
  */
10621
11878
  export interface FeatureFlagsOutput {
10622
- schema_version: SchemaVersion
11879
+ schema_version: FeatureFlagsSchemaVersion
10623
11880
  version: ToolVersion
10624
11881
  elapsed_ms: ElapsedMs
11882
+ /**
11883
+ * Detected feature-flag findings.
11884
+ */
10625
11885
  feature_flags: FeatureFlagFinding[]
11886
+ /**
11887
+ * Number of entries in `feature_flags`.
11888
+ */
10626
11889
  total_flags: number
11890
+ /**
11891
+ * `_meta` block; see [`FeatureFlagsMeta`].
11892
+ */
10627
11893
  _meta?: (FeatureFlagsMeta | null)
10628
11894
  }
10629
11895
  /**
10630
11896
  * One feature flag finding in JSON output.
10631
11897
  */
10632
11898
  export interface FeatureFlagFinding {
11899
+ /**
11900
+ * File path relative to the analysed root.
11901
+ */
10633
11902
  path: string
11903
+ /**
11904
+ * Detected flag identifier, e.g. the env var or SDK key name.
11905
+ */
10634
11906
  flag_name: string
10635
11907
  kind: FeatureFlagKind
10636
11908
  confidence: FeatureFlagConfidence
11909
+ /**
11910
+ * 1-based line of the flag usage.
11911
+ */
10637
11912
  line: number
11913
+ /**
11914
+ * 1-based column of the flag usage.
11915
+ */
10638
11916
  col: number
11917
+ /**
11918
+ * Suggested follow-up actions (investigate / suppress).
11919
+ */
10639
11920
  actions: FeatureFlagAction[]
11921
+ /**
11922
+ * Flag SDK the call belongs to, for SDK-call findings.
11923
+ */
10640
11924
  sdk_name?: (string | null)
11925
+ /**
11926
+ * Overlap with dead-code findings when the flag guards unused exports.
11927
+ */
10641
11928
  dead_code_overlap?: (FeatureFlagDeadCodeOverlap | null)
10642
11929
  }
10643
11930
  /**
@@ -10645,16 +11932,34 @@ dead_code_overlap?: (FeatureFlagDeadCodeOverlap | null)
10645
11932
  */
10646
11933
  export interface FeatureFlagAction {
10647
11934
  type: FeatureFlagActionType
11935
+ /**
11936
+ * Whether `fallow fix` can apply the action automatically.
11937
+ */
10648
11938
  auto_fixable: boolean
11939
+ /**
11940
+ * Human-readable action description.
11941
+ */
10649
11942
  description: string
11943
+ /**
11944
+ * Suppression comment to insert, for suppress actions.
11945
+ */
10650
11946
  comment?: (string | null)
10651
11947
  }
10652
11948
  /**
10653
11949
  * Dead-code overlap block attached when a flag guards unused exports.
10654
11950
  */
10655
11951
  export interface FeatureFlagDeadCodeOverlap {
11952
+ /**
11953
+ * Lines inside the flag-guarded region.
11954
+ */
10656
11955
  guarded_lines: number
11956
+ /**
11957
+ * Number of unused exports the flag guards.
11958
+ */
10657
11959
  dead_export_count: number
11960
+ /**
11961
+ * Names of the unused exports the flag guards.
11962
+ */
10658
11963
  dead_exports: string[]
10659
11964
  }
10660
11965
  /**
@@ -10679,25 +11984,49 @@ telemetry?: (TelemetryMeta | null)
10679
11984
  * Feature flag explanatory metadata.
10680
11985
  */
10681
11986
  export interface FeatureFlagsMetaDetails {
11987
+ /**
11988
+ * What the flags command reports.
11989
+ */
10682
11990
  description: string
10683
11991
  kinds: FeatureFlagsKindMeta
10684
11992
  confidence: FeatureFlagsConfidenceMeta
11993
+ /**
11994
+ * Public documentation URL for the flags command.
11995
+ */
10685
11996
  docs: string
10686
11997
  }
10687
11998
  /**
10688
11999
  * Feature flag kind explanations.
10689
12000
  */
10690
12001
  export interface FeatureFlagsKindMeta {
12002
+ /**
12003
+ * Explanation of the `environment_variable` kind.
12004
+ */
10691
12005
  environment_variable: string
12006
+ /**
12007
+ * Explanation of the `sdk_call` kind.
12008
+ */
10692
12009
  sdk_call: string
12010
+ /**
12011
+ * Explanation of the `config_object` kind.
12012
+ */
10693
12013
  config_object: string
10694
12014
  }
10695
12015
  /**
10696
12016
  * Feature flag confidence explanations.
10697
12017
  */
10698
12018
  export interface FeatureFlagsConfidenceMeta {
12019
+ /**
12020
+ * Explanation of the `high` confidence level.
12021
+ */
10699
12022
  high: string
12023
+ /**
12024
+ * Explanation of the `medium` confidence level.
12025
+ */
10700
12026
  medium: string
12027
+ /**
12028
+ * Explanation of the `low` confidence level.
12029
+ */
10701
12030
  low: string
10702
12031
  }
10703
12032
  /**
@@ -11656,19 +12985,40 @@ reason_present: boolean
11656
12985
  * Envelope emitted by `fallow type-aware status --format json`.
11657
12986
  */
11658
12987
  export interface TypeAwareStatusOutput {
11659
- schema_version: SchemaVersion
12988
+ schema_version: TypeAwareStatusSchemaVersion
11660
12989
  version: ToolVersion
12990
+ /**
12991
+ * Whether a usable type-aware companion was found.
12992
+ */
11661
12993
  available: boolean
12994
+ /**
12995
+ * How the companion was discovered, e.g. `installed-sibling`.
12996
+ */
11662
12997
  discovery_source?: (string | null)
11663
12998
  /**
11664
12999
  * Root-relative companion path, or only the executable name when the
11665
13000
  * companion lives outside the analyzed project.
11666
13001
  */
11667
13002
  companion_path?: (string | null)
13003
+ /**
13004
+ * npm package version of the companion, when known.
13005
+ */
11668
13006
  package_version?: (string | null)
13007
+ /**
13008
+ * Type-aware protocol version fallow speaks.
13009
+ */
11669
13010
  protocol_version: number
13011
+ /**
13012
+ * Checker backend family, e.g. `typescript-go`.
13013
+ */
11670
13014
  backend_family?: (string | null)
13015
+ /**
13016
+ * Version of the checker backend, when known.
13017
+ */
11671
13018
  backend_version?: (string | null)
13019
+ /**
13020
+ * How to make the companion available, when it is not.
13021
+ */
11672
13022
  remediation?: (string | null)
11673
13023
  }
11674
13024
  /**
@@ -11676,10 +13026,22 @@ remediation?: (string | null)
11676
13026
  */
11677
13027
  export interface CodeClimateIssue {
11678
13028
  type: CodeClimateIssueKind
13029
+ /**
13030
+ * Fallow rule identifier, e.g. `fallow/unused-file`.
13031
+ */
11679
13032
  check_name: string
13033
+ /**
13034
+ * Human-readable finding description.
13035
+ */
11680
13036
  description: string
13037
+ /**
13038
+ * CodeClimate category labels, e.g. `Clarity` or `Duplication`.
13039
+ */
11681
13040
  categories: string[]
11682
13041
  severity: CodeClimateSeverity
13042
+ /**
13043
+ * Stable finding fingerprint GitLab uses to track issues across pushes.
13044
+ */
11683
13045
  fingerprint: string
11684
13046
  location: CodeClimateLocation
11685
13047
  /**
@@ -11735,6 +13097,11 @@ message: string
11735
13097
  exit_code: number
11736
13098
  }
11737
13099
 
13100
+
13101
+ /**
13102
+ * @deprecated Legacy alias for the dead-code/check schema version. Use the exact envelope-specific alias instead.
13103
+ */
13104
+ export type SchemaVersion = CheckSchemaVersion;
11738
13105
  /**
11739
13106
  * Inner complexity-violation payload, flattened into `HealthFinding`
11740
13107
  * on the wire via `#[serde(flatten)]`. Exposed here because