fallow 3.14.0 → 3.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/capabilities.json +31 -6
- package/package.json +10 -10
- package/schema.json +204 -17
- package/skills/fallow/SKILL.md +3 -3
- package/skills/fallow/references/cli-reference.md +29 -20
- package/skills/fallow/references/mcp.md +3 -3
- package/types/output-contract.d.ts +1466 -55
|
@@ -100,27 +100,9 @@ kind: "suppression-inventory"
|
|
|
100
100
|
kind: "type-aware-status"
|
|
101
101
|
}))
|
|
102
102
|
/**
|
|
103
|
-
* Schema
|
|
104
|
-
|
|
105
|
-
|
|
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,12 @@ 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). Such demoted
|
|
277
|
+
* groups additionally carry a `demotion_reason` field naming the rule, and
|
|
278
|
+
* are counted in `attribution.duplication_demoted` (issue #2220).
|
|
285
279
|
*
|
|
286
280
|
* Outside of audit sub-results the field is omitted, so call sites typically
|
|
287
281
|
* hold `Option<AuditIntroduced>`. Renders to the JSON wire as a bare boolean.
|
|
@@ -424,6 +418,12 @@ kind: "malformed-tsconfig"
|
|
|
424
418
|
} | {
|
|
425
419
|
kind: "tsconfig-reference-dir-missing"
|
|
426
420
|
} | {
|
|
421
|
+
/**
|
|
422
|
+
* `serde_yaml_ng` parse error text.
|
|
423
|
+
*/
|
|
424
|
+
error: string
|
|
425
|
+
kind: "malformed-pnpm-workspace-yaml"
|
|
426
|
+
} | {
|
|
427
427
|
/**
|
|
428
428
|
* On-disk size of the skipped file in bytes.
|
|
429
429
|
*/
|
|
@@ -447,6 +447,15 @@ kind: "source-read-failure"
|
|
|
447
447
|
* emitted by the legacy `build_clone_group_actions` walker.
|
|
448
448
|
*/
|
|
449
449
|
export type CloneGroupActionType = ("extract-shared" | "suppress-line")
|
|
450
|
+
/**
|
|
451
|
+
* Why the audit new-only gate demoted an introduced clone group to
|
|
452
|
+
* inherited. Serializes as a kebab-case string on the wire (for example
|
|
453
|
+
* `"no-added-lines"`).
|
|
454
|
+
*
|
|
455
|
+
* Further variants may be added in later releases; consumers should treat an
|
|
456
|
+
* unknown value as "some demotion reason" rather than failing.
|
|
457
|
+
*/
|
|
458
|
+
export type CloneDemotionReason = "no-added-lines"
|
|
450
459
|
/**
|
|
451
460
|
* The kind of refactoring suggested for a clone family.
|
|
452
461
|
*/
|
|
@@ -485,7 +494,7 @@ export type ComplexityMetric = ("cyclomatic" | "cognitive")
|
|
|
485
494
|
* `Case` means a `case` label carrying a test; a bare `default` adds nothing
|
|
486
495
|
* to cyclomatic complexity and so produces no contribution.
|
|
487
496
|
*/
|
|
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")
|
|
497
|
+
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
498
|
/**
|
|
490
499
|
* Source for a finding's effective thresholds.
|
|
491
500
|
*/
|
|
@@ -510,7 +519,16 @@ export type CoverageSourceConsistency = ("uniform" | "mixed")
|
|
|
510
519
|
/**
|
|
511
520
|
* Lifecycle state for a configured threshold override.
|
|
512
521
|
*/
|
|
513
|
-
export type ThresholdOverrideStatus = ("active" | "stale" | "no_match")
|
|
522
|
+
export type ThresholdOverrideStatus = ("active" | "stale" | "insufficient" | "no_match")
|
|
523
|
+
/**
|
|
524
|
+
* Which threshold dimension a `thresholdOverrides` state row describes.
|
|
525
|
+
*
|
|
526
|
+
* One configured override produces one row per dimension it participates in,
|
|
527
|
+
* because the complexity ceilings and the CRAP ceiling are evaluated
|
|
528
|
+
* independently: raising `maxCyclomatic` says nothing about whether the unit
|
|
529
|
+
* still breaches `maxCrap`.
|
|
530
|
+
*/
|
|
531
|
+
export type ThresholdOverrideDimension = ("complexity" | "crap")
|
|
514
532
|
/**
|
|
515
533
|
* Discriminant for [`UntestedFileAction::kind`]. Mirrors the action types
|
|
516
534
|
* emitted by `build_untested_file_actions`.
|
|
@@ -526,7 +544,13 @@ export type UntestedExportActionType = ("add-test-import" | "suppress-file")
|
|
|
526
544
|
* analysis period.
|
|
527
545
|
*/
|
|
528
546
|
export type ChurnTrend = ("accelerating" | "stable" | "cooling")
|
|
547
|
+
/**
|
|
548
|
+
* Encoding applied to a [`ContributorEntry::identifier`].
|
|
549
|
+
*/
|
|
529
550
|
export type ContributorIdentifierFormat = ("raw" | "handle" | "anonymized" | "hash")
|
|
551
|
+
/**
|
|
552
|
+
* Ownership lifecycle state of a file.
|
|
553
|
+
*/
|
|
530
554
|
export type OwnershipState = ("active" | "unowned" | "declared_inactive" | "drifting")
|
|
531
555
|
/**
|
|
532
556
|
* Discriminant for [`HotspotAction::kind`].
|
|
@@ -700,16 +724,37 @@ export type StylingFindingConfidence = ("high" | "low")
|
|
|
700
724
|
* Agent handling hint for a [`StylingFinding`].
|
|
701
725
|
*/
|
|
702
726
|
export type StylingAgentDisposition = ("fix-confidently" | "verify-first")
|
|
727
|
+
/**
|
|
728
|
+
* `target` block of [`InspectOutput`], tagged by `type`.
|
|
729
|
+
*/
|
|
703
730
|
export type InspectTargetDescriptor = ({
|
|
731
|
+
/**
|
|
732
|
+
* File path relative to the analysed root.
|
|
733
|
+
*/
|
|
704
734
|
file: string
|
|
705
735
|
type: "file"
|
|
706
736
|
} | {
|
|
737
|
+
/**
|
|
738
|
+
* File path relative to the analysed root.
|
|
739
|
+
*/
|
|
707
740
|
file: string
|
|
741
|
+
/**
|
|
742
|
+
* Name of the inspected export.
|
|
743
|
+
*/
|
|
708
744
|
export_name: string
|
|
709
745
|
type: "symbol"
|
|
710
746
|
})
|
|
747
|
+
/**
|
|
748
|
+
* `identity` block of [`InspectOutput`]; shape follows the target type.
|
|
749
|
+
*/
|
|
711
750
|
export type InspectIdentity = (InspectFileIdentity | InspectSymbolIdentity)
|
|
751
|
+
/**
|
|
752
|
+
* Status of an [`InspectEvidenceSection`].
|
|
753
|
+
*/
|
|
712
754
|
export type InspectSectionStatus = ("ok" | "partial" | "unavailable" | "error")
|
|
755
|
+
/**
|
|
756
|
+
* Granularity an [`InspectEvidenceSection`] payload covers.
|
|
757
|
+
*/
|
|
713
758
|
export type InspectEvidenceScope = ("symbol" | "file" | "project_filtered_to_file")
|
|
714
759
|
/**
|
|
715
760
|
* Best-effort classification of why a callee did not resolve to an edge.
|
|
@@ -756,15 +801,35 @@ export type ReviewId = string
|
|
|
756
801
|
* Schema-version discriminator for the review reconcile envelope.
|
|
757
802
|
*/
|
|
758
803
|
export type ReviewReconcileSchema = "fallow-review-reconcile/v1"
|
|
804
|
+
/**
|
|
805
|
+
* Schema-version discriminator for [`CoverageSetupOutput`].
|
|
806
|
+
*/
|
|
759
807
|
export type CoverageSetupSchemaVersion = "1"
|
|
808
|
+
/**
|
|
809
|
+
* Framework detected during coverage setup; drives which instrumentation
|
|
810
|
+
* guidance is emitted.
|
|
811
|
+
*/
|
|
760
812
|
export type CoverageSetupFramework = ("nextjs" | "nestjs" | "nuxt" | "sveltekit" | "astro" | "remix" | "vite" | "plain_node" | "unknown")
|
|
813
|
+
/**
|
|
814
|
+
* Package manager detected from the project's lockfile.
|
|
815
|
+
*/
|
|
761
816
|
export type CoverageSetupPackageManager = ("npm" | "pnpm" | "yarn" | "bun")
|
|
817
|
+
/**
|
|
818
|
+
* Runtime environment coverage capture must instrument.
|
|
819
|
+
*/
|
|
762
820
|
export type CoverageSetupRuntimeTarget = ("node" | "browser")
|
|
821
|
+
/**
|
|
822
|
+
* Schema-version discriminator for [`CoverageAnalyzeOutput`].
|
|
823
|
+
*/
|
|
763
824
|
export type CoverageAnalyzeSchemaVersion = "1"
|
|
764
825
|
/**
|
|
765
826
|
* Discovery outcome for a [`LogicalGroup`].
|
|
766
827
|
*/
|
|
767
828
|
export type LogicalGroupStatus = ("ok" | "empty" | "invalid_path")
|
|
829
|
+
/**
|
|
830
|
+
* Exact schema version for [`HealthOutput`].
|
|
831
|
+
*/
|
|
832
|
+
export type HealthSchemaVersion = 10
|
|
768
833
|
/**
|
|
769
834
|
* Resolver mode label for grouped envelopes (dead-code, dupes, health).
|
|
770
835
|
*
|
|
@@ -773,6 +838,11 @@ export type LogicalGroupStatus = ("ok" | "empty" | "invalid_path")
|
|
|
773
838
|
* groups by GitLab CODEOWNERS `[Section]` header name.
|
|
774
839
|
*/
|
|
775
840
|
export type GroupByMode = ("owner" | "directory" | "package" | "section")
|
|
841
|
+
/**
|
|
842
|
+
* Schema projection for the duplication envelope's CLI and programmatic
|
|
843
|
+
* version lineages.
|
|
844
|
+
*/
|
|
845
|
+
export type DupesSchemaVersion = (2 | 8)
|
|
776
846
|
/**
|
|
777
847
|
* Wire-version discriminator for [`ImpactReport`]. Independent from the global
|
|
778
848
|
* `SchemaVersion` (the impact report versions on its own cadence) and from the
|
|
@@ -881,6 +951,14 @@ export type SecurityVerifierVerdictStatus = ("survivor" | "dismissed" | "needs-h
|
|
|
881
951
|
* The `fallow security blind-spots --format json` schema version.
|
|
882
952
|
*/
|
|
883
953
|
export type SecurityBlindSpotsSchemaVersion = "1"
|
|
954
|
+
/**
|
|
955
|
+
* Schema projection for the combined envelope's exact version.
|
|
956
|
+
*/
|
|
957
|
+
export type CombinedSchemaVersion = 10
|
|
958
|
+
/**
|
|
959
|
+
* Schema projection for the feature-flags envelope's exact version.
|
|
960
|
+
*/
|
|
961
|
+
export type FeatureFlagsSchemaVersion = 8
|
|
884
962
|
/**
|
|
885
963
|
* Feature flag kind values emitted in JSON.
|
|
886
964
|
*/
|
|
@@ -955,6 +1033,10 @@ export type SuppressionInventoryLevel = ("file" | "line")
|
|
|
955
1033
|
* How a suppression in the inventory was authored.
|
|
956
1034
|
*/
|
|
957
1035
|
export type SuppressionInventoryOrigin = "comment"
|
|
1036
|
+
/**
|
|
1037
|
+
* Schema projection for the type-aware status envelope's exact version.
|
|
1038
|
+
*/
|
|
1039
|
+
export type TypeAwareStatusSchemaVersion = 8
|
|
958
1040
|
/**
|
|
959
1041
|
* Discriminator value for [`CodeClimateIssue::kind`].
|
|
960
1042
|
*/
|
|
@@ -974,11 +1056,17 @@ export type CodeClimateOutput = CodeClimateIssue[]
|
|
|
974
1056
|
* `fallow audit --format json` envelope.
|
|
975
1057
|
*/
|
|
976
1058
|
export interface AuditOutput {
|
|
977
|
-
schema_version:
|
|
1059
|
+
schema_version: AuditSchemaVersion
|
|
978
1060
|
version: ToolVersion
|
|
979
1061
|
command: AuditCommand
|
|
980
1062
|
verdict: AuditVerdict
|
|
1063
|
+
/**
|
|
1064
|
+
* Number of changed files in the audit scope.
|
|
1065
|
+
*/
|
|
981
1066
|
changed_files_count: number
|
|
1067
|
+
/**
|
|
1068
|
+
* Git ref the change was diffed against.
|
|
1069
|
+
*/
|
|
982
1070
|
base_ref: string
|
|
983
1071
|
/**
|
|
984
1072
|
* Human-readable provenance of `base_ref`, e.g. `merge-base with
|
|
@@ -988,14 +1076,34 @@ base_ref: string
|
|
|
988
1076
|
* self-describing).
|
|
989
1077
|
*/
|
|
990
1078
|
base_description?: (string | null)
|
|
1079
|
+
/**
|
|
1080
|
+
* Commit SHA of the audited head tree, when resolvable.
|
|
1081
|
+
*/
|
|
991
1082
|
head_sha?: (string | null)
|
|
992
1083
|
elapsed_ms: ElapsedMs
|
|
1084
|
+
/**
|
|
1085
|
+
* True when base-snapshot analysis was skipped, so new-vs-inherited
|
|
1086
|
+
* attribution could not run.
|
|
1087
|
+
*/
|
|
993
1088
|
base_snapshot_skipped?: (boolean | null)
|
|
994
1089
|
summary: AuditSummary
|
|
995
1090
|
attribution: AuditAttribution
|
|
1091
|
+
/**
|
|
1092
|
+
* `_meta` block with metric / rule definitions, when `--explain` was
|
|
1093
|
+
* passed.
|
|
1094
|
+
*/
|
|
996
1095
|
_meta?: (Meta | null)
|
|
1096
|
+
/**
|
|
1097
|
+
* Dead-code findings scoped to the audit changeset.
|
|
1098
|
+
*/
|
|
997
1099
|
dead_code?: (CheckOutput | null)
|
|
1100
|
+
/**
|
|
1101
|
+
* Duplication findings scoped to the audit changeset.
|
|
1102
|
+
*/
|
|
998
1103
|
duplication?: (DupesReportPayload | null)
|
|
1104
|
+
/**
|
|
1105
|
+
* Complexity findings scoped to the audit changeset.
|
|
1106
|
+
*/
|
|
999
1107
|
complexity?: (HealthReport | null)
|
|
1000
1108
|
/**
|
|
1001
1109
|
* Read-only follow-up commands computed from this run's findings. See
|
|
@@ -1007,10 +1115,26 @@ next_steps?: NextStep[]
|
|
|
1007
1115
|
* Per-category summary counts for the audit result.
|
|
1008
1116
|
*/
|
|
1009
1117
|
export interface AuditSummary {
|
|
1118
|
+
/**
|
|
1119
|
+
* Total dead-code issues reported for the changed files.
|
|
1120
|
+
*/
|
|
1010
1121
|
dead_code_issues: number
|
|
1122
|
+
/**
|
|
1123
|
+
* Whether any reported dead-code issue has error severity.
|
|
1124
|
+
*/
|
|
1011
1125
|
dead_code_has_errors: boolean
|
|
1126
|
+
/**
|
|
1127
|
+
* Total complexity findings reported for the changed files.
|
|
1128
|
+
*/
|
|
1012
1129
|
complexity_findings: number
|
|
1130
|
+
/**
|
|
1131
|
+
* Highest cyclomatic complexity among the findings; `None` when there
|
|
1132
|
+
* are no complexity findings.
|
|
1133
|
+
*/
|
|
1013
1134
|
max_cyclomatic?: (number | null)
|
|
1135
|
+
/**
|
|
1136
|
+
* Clone groups touching the changed files.
|
|
1137
|
+
*/
|
|
1014
1138
|
duplication_clone_groups: number
|
|
1015
1139
|
}
|
|
1016
1140
|
/**
|
|
@@ -1018,14 +1142,33 @@ duplication_clone_groups: number
|
|
|
1018
1142
|
*/
|
|
1019
1143
|
export interface AuditAttribution {
|
|
1020
1144
|
gate: AuditGate
|
|
1145
|
+
/**
|
|
1146
|
+
* Dead-code findings absent from the base snapshot.
|
|
1147
|
+
*/
|
|
1021
1148
|
dead_code_introduced: number
|
|
1149
|
+
/**
|
|
1150
|
+
* Dead-code findings already present in the base snapshot.
|
|
1151
|
+
*/
|
|
1022
1152
|
dead_code_inherited: number
|
|
1153
|
+
/**
|
|
1154
|
+
* Complexity findings absent from the base snapshot.
|
|
1155
|
+
*/
|
|
1023
1156
|
complexity_introduced: number
|
|
1157
|
+
/**
|
|
1158
|
+
* Complexity findings already present in the base snapshot.
|
|
1159
|
+
*/
|
|
1024
1160
|
complexity_inherited: number
|
|
1161
|
+
/**
|
|
1162
|
+
* Clone groups absent from the base snapshot.
|
|
1163
|
+
*/
|
|
1025
1164
|
duplication_introduced: number
|
|
1165
|
+
/**
|
|
1166
|
+
* Clone groups already present in the base snapshot.
|
|
1167
|
+
*/
|
|
1026
1168
|
duplication_inherited: number
|
|
1027
1169
|
styling_introduced: number
|
|
1028
1170
|
styling_inherited: number
|
|
1171
|
+
duplication_demoted: number
|
|
1029
1172
|
}
|
|
1030
1173
|
/**
|
|
1031
1174
|
* Metric and rule definitions emitted under `_meta` when `--explain` is
|
|
@@ -1949,10 +2092,16 @@ docs?: (string | null)
|
|
|
1949
2092
|
* JSON layer always emits.
|
|
1950
2093
|
*/
|
|
1951
2094
|
export interface CheckOutput {
|
|
1952
|
-
schema_version:
|
|
2095
|
+
schema_version: CheckSchemaVersion
|
|
1953
2096
|
version: ToolVersion
|
|
1954
2097
|
elapsed_ms: ElapsedMs
|
|
2098
|
+
/**
|
|
2099
|
+
* Total findings across all issue arrays; excludes `next_steps`.
|
|
2100
|
+
*/
|
|
1955
2101
|
total_issues: number
|
|
2102
|
+
/**
|
|
2103
|
+
* Entry-point totals per source, when the analysis recorded them.
|
|
2104
|
+
*/
|
|
1956
2105
|
entry_points?: (EntryPoints | null)
|
|
1957
2106
|
summary: CheckSummary
|
|
1958
2107
|
/**
|
|
@@ -2282,10 +2431,26 @@ thin_wrappers?: ThinWrapperFinding[]
|
|
|
2282
2431
|
* enables it.
|
|
2283
2432
|
*/
|
|
2284
2433
|
duplicate_prop_shapes?: DuplicatePropShapeFinding[]
|
|
2434
|
+
/**
|
|
2435
|
+
* Count deltas against the matched baseline, in baseline runs.
|
|
2436
|
+
*/
|
|
2285
2437
|
baseline_deltas?: (BaselineDeltas | null)
|
|
2438
|
+
/**
|
|
2439
|
+
* Which baseline snapshot was matched, in baseline runs.
|
|
2440
|
+
*/
|
|
2286
2441
|
baseline?: (BaselineMatch | null)
|
|
2442
|
+
/**
|
|
2443
|
+
* Regression verdict against the baseline, in `--fail-on-regression` runs.
|
|
2444
|
+
*/
|
|
2287
2445
|
regression?: (RegressionResult | null)
|
|
2446
|
+
/**
|
|
2447
|
+
* `_meta` block with docs and rule definitions, when `--explain` was
|
|
2448
|
+
* passed.
|
|
2449
|
+
*/
|
|
2288
2450
|
_meta?: (Meta | null)
|
|
2451
|
+
/**
|
|
2452
|
+
* Workspace-discovery diagnostics surfaced during config load.
|
|
2453
|
+
*/
|
|
2289
2454
|
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
2290
2455
|
/**
|
|
2291
2456
|
* Read-only follow-up commands computed from this run's findings, emitted
|
|
@@ -4702,6 +4867,11 @@ token_count: number
|
|
|
4702
4867
|
* Number of lines in the duplicated block.
|
|
4703
4868
|
*/
|
|
4704
4869
|
line_count: number
|
|
4870
|
+
/**
|
|
4871
|
+
* Lowest all-pairs similarity for a near-miss clone group. Exact clone
|
|
4872
|
+
* groups omit this field.
|
|
4873
|
+
*/
|
|
4874
|
+
similarity?: number
|
|
4705
4875
|
/**
|
|
4706
4876
|
* Stable content fingerprint, usually `dup:<8hex>` and widened on rare
|
|
4707
4877
|
* report collisions. Addressable via `fallow dupes --trace dup:<fp>` (and
|
|
@@ -4709,6 +4879,10 @@ line_count: number
|
|
|
4709
4879
|
* each group in the human listing.
|
|
4710
4880
|
*/
|
|
4711
4881
|
fingerprint: string
|
|
4882
|
+
/**
|
|
4883
|
+
* Maximum directory-tree or same-file line distance between instances.
|
|
4884
|
+
*/
|
|
4885
|
+
spread: number
|
|
4712
4886
|
/**
|
|
4713
4887
|
* Best-effort human-readable name for the clone: the dominant repeated
|
|
4714
4888
|
* identifier across the duplicated fragment (e.g. a shared `parseCsv`
|
|
@@ -4729,6 +4903,13 @@ actions: CloneGroupAction[]
|
|
|
4729
4903
|
* to the merge-base. `None` when serialized directly from Rust.
|
|
4730
4904
|
*/
|
|
4731
4905
|
introduced?: (AuditIntroduced | null)
|
|
4906
|
+
/**
|
|
4907
|
+
* Set only by `fallow audit` under `--gate new-only`, on groups whose
|
|
4908
|
+
* `introduced` flag the gate demoted to `false`: why the demotion
|
|
4909
|
+
* happened. `None` everywhere else, including `fallow dupes
|
|
4910
|
+
* --format json` (issue #2220).
|
|
4911
|
+
*/
|
|
4912
|
+
demotion_reason?: (CloneDemotionReason | null)
|
|
4732
4913
|
}
|
|
4733
4914
|
/**
|
|
4734
4915
|
* A single instance of duplicated code at a specific location.
|
|
@@ -4918,34 +5099,38 @@ duplicated_lines: number
|
|
|
4918
5099
|
*/
|
|
4919
5100
|
total_tokens: number
|
|
4920
5101
|
/**
|
|
4921
|
-
* Tokens
|
|
5102
|
+
* Tokens in redundant clone copies, excluding one retained copy per group.
|
|
4922
5103
|
*/
|
|
4923
5104
|
duplicated_tokens: number
|
|
4924
5105
|
/**
|
|
4925
|
-
* Number of clone groups in the reported `clone_groups[]` array
|
|
4926
|
-
*
|
|
4927
|
-
* count of groups hidden by the filter is exposed in
|
|
4928
|
-
* `clone_groups_below_min_occurrences`.
|
|
5106
|
+
* Number of clone groups in the reported `clone_groups[]` array after
|
|
5107
|
+
* filtering and optional `--top` truncation.
|
|
4929
5108
|
*/
|
|
4930
5109
|
clone_groups: number
|
|
4931
5110
|
/**
|
|
4932
|
-
* Total clone instances across all reported groups
|
|
4933
|
-
*
|
|
5111
|
+
* Total clone instances across all reported groups after filtering and
|
|
5112
|
+
* optional `--top` truncation.
|
|
4934
5113
|
*/
|
|
4935
5114
|
clone_instances: number
|
|
4936
5115
|
/**
|
|
4937
|
-
* Percentage of duplicated lines (0.0 to 100.0).
|
|
4938
|
-
*
|
|
4939
|
-
* `threshold` gates stay stable when the filter changes.
|
|
5116
|
+
* Percentage of duplicated lines (0.0 to 100.0). `--top` does not change
|
|
5117
|
+
* this scoped corpus metric.
|
|
4940
5118
|
*/
|
|
4941
5119
|
duplication_percentage: number
|
|
4942
5120
|
/**
|
|
4943
5121
|
* Number of clone groups hidden by `duplicates.minOccurrences`. Absent (or
|
|
4944
5122
|
* `0`) when the filter is at its default of `2` and nothing was hidden.
|
|
4945
|
-
*
|
|
4946
|
-
* clone_groups_below_min_occurrences`.
|
|
5123
|
+
* This counter covers only the minimum-occurrence filter.
|
|
4947
5124
|
*/
|
|
4948
5125
|
clone_groups_below_min_occurrences?: number
|
|
5126
|
+
/**
|
|
5127
|
+
* Number of clone groups hidden by `duplicates.ignoredClones`.
|
|
5128
|
+
*/
|
|
5129
|
+
clone_groups_ignored?: number
|
|
5130
|
+
/**
|
|
5131
|
+
* Near-miss candidate comparisons skipped by bounded-work limits.
|
|
5132
|
+
*/
|
|
5133
|
+
near_candidates_skipped?: number
|
|
4949
5134
|
}
|
|
4950
5135
|
/**
|
|
4951
5136
|
* Result of complexity analysis for reporting.
|
|
@@ -5077,13 +5262,37 @@ styling_findings?: StylingFinding[]
|
|
|
5077
5262
|
* Wire envelope for a single complexity finding.
|
|
5078
5263
|
*/
|
|
5079
5264
|
export interface HealthFinding {
|
|
5265
|
+
/**
|
|
5266
|
+
* File path relative to the project root.
|
|
5267
|
+
*/
|
|
5080
5268
|
path: string
|
|
5269
|
+
/**
|
|
5270
|
+
* Function name, or a synthesized name for anonymous functions.
|
|
5271
|
+
*/
|
|
5081
5272
|
name: string
|
|
5273
|
+
/**
|
|
5274
|
+
* 1-based line the function starts on.
|
|
5275
|
+
*/
|
|
5082
5276
|
line: number
|
|
5277
|
+
/**
|
|
5278
|
+
* 1-based column the function starts on.
|
|
5279
|
+
*/
|
|
5083
5280
|
col: number
|
|
5281
|
+
/**
|
|
5282
|
+
* Cyclomatic complexity of the function.
|
|
5283
|
+
*/
|
|
5084
5284
|
cyclomatic: number
|
|
5285
|
+
/**
|
|
5286
|
+
* Cognitive complexity of the function.
|
|
5287
|
+
*/
|
|
5085
5288
|
cognitive: number
|
|
5289
|
+
/**
|
|
5290
|
+
* Lines of code in the function body.
|
|
5291
|
+
*/
|
|
5086
5292
|
line_count: number
|
|
5293
|
+
/**
|
|
5294
|
+
* Number of declared parameters.
|
|
5295
|
+
*/
|
|
5087
5296
|
param_count: number
|
|
5088
5297
|
/**
|
|
5089
5298
|
* Number of React hook calls in this function's body (`useState` /
|
|
@@ -5111,11 +5320,30 @@ react_prop_count?: number
|
|
|
5111
5320
|
react_hook_profile?: (ReactHookProfile | null)
|
|
5112
5321
|
exceeded: ExceededThreshold
|
|
5113
5322
|
severity: FindingSeverity
|
|
5323
|
+
/**
|
|
5324
|
+
* CRAP score (change risk anti-pattern), when coverage data exists.
|
|
5325
|
+
*/
|
|
5114
5326
|
crap?: (number | null)
|
|
5327
|
+
/**
|
|
5328
|
+
* Test coverage percentage (0-100) backing the CRAP score.
|
|
5329
|
+
*/
|
|
5115
5330
|
coverage_pct?: (number | null)
|
|
5331
|
+
/**
|
|
5332
|
+
* Coverage tier bucket derived from `coverage_pct`.
|
|
5333
|
+
*/
|
|
5116
5334
|
coverage_tier?: (CoverageTier | null)
|
|
5335
|
+
/**
|
|
5336
|
+
* Provenance of the coverage signal.
|
|
5337
|
+
*/
|
|
5117
5338
|
coverage_source?: (CoverageSource | null)
|
|
5339
|
+
/**
|
|
5340
|
+
* Component file the inherited coverage estimate came from, for
|
|
5341
|
+
* component-inherited coverage.
|
|
5342
|
+
*/
|
|
5118
5343
|
inherited_from?: (string | null)
|
|
5344
|
+
/**
|
|
5345
|
+
* Aggregate of the enclosing component's findings, when rolled up.
|
|
5346
|
+
*/
|
|
5119
5347
|
component_rollup?: (ComponentRollup | null)
|
|
5120
5348
|
/**
|
|
5121
5349
|
* Per-decision-point complexity breakdown explaining WHICH constructs drove
|
|
@@ -5186,13 +5414,38 @@ custom: number
|
|
|
5186
5414
|
*/
|
|
5187
5415
|
max_effect_dep_arity?: (number | null)
|
|
5188
5416
|
}
|
|
5417
|
+
/**
|
|
5418
|
+
* Component-level aggregate attached to a template complexity finding,
|
|
5419
|
+
* pairing the template's scores with the worst class-side function.
|
|
5420
|
+
*/
|
|
5189
5421
|
export interface ComponentRollup {
|
|
5422
|
+
/**
|
|
5423
|
+
* Component name.
|
|
5424
|
+
*/
|
|
5190
5425
|
component: string
|
|
5426
|
+
/**
|
|
5427
|
+
* Name of the worst-scoring function in the component class.
|
|
5428
|
+
*/
|
|
5191
5429
|
class_worst_function: string
|
|
5430
|
+
/**
|
|
5431
|
+
* Cyclomatic complexity of that worst class function.
|
|
5432
|
+
*/
|
|
5192
5433
|
class_cyclomatic: number
|
|
5434
|
+
/**
|
|
5435
|
+
* Cognitive complexity of that worst class function.
|
|
5436
|
+
*/
|
|
5193
5437
|
class_cognitive: number
|
|
5438
|
+
/**
|
|
5439
|
+
* Template file path relative to the project root.
|
|
5440
|
+
*/
|
|
5194
5441
|
template_path: string
|
|
5442
|
+
/**
|
|
5443
|
+
* Cyclomatic complexity of the template.
|
|
5444
|
+
*/
|
|
5195
5445
|
template_cyclomatic: number
|
|
5446
|
+
/**
|
|
5447
|
+
* Cognitive complexity of the template.
|
|
5448
|
+
*/
|
|
5196
5449
|
template_cognitive: number
|
|
5197
5450
|
}
|
|
5198
5451
|
/**
|
|
@@ -5229,8 +5482,17 @@ nesting: number
|
|
|
5229
5482
|
* Resolved thresholds used to evaluate a health finding.
|
|
5230
5483
|
*/
|
|
5231
5484
|
export interface HealthEffectiveThresholds {
|
|
5485
|
+
/**
|
|
5486
|
+
* Effective cyclomatic-complexity ceiling for the matched file.
|
|
5487
|
+
*/
|
|
5232
5488
|
max_cyclomatic: number
|
|
5489
|
+
/**
|
|
5490
|
+
* Effective cognitive-complexity ceiling for the matched file.
|
|
5491
|
+
*/
|
|
5233
5492
|
max_cognitive: number
|
|
5493
|
+
/**
|
|
5494
|
+
* Effective CRAP-score ceiling for the matched file.
|
|
5495
|
+
*/
|
|
5234
5496
|
max_crap: number
|
|
5235
5497
|
/**
|
|
5236
5498
|
* Effective unit-size ceiling (maximum function length in lines) for the
|
|
@@ -5285,8 +5547,13 @@ comment?: (string | null)
|
|
|
5285
5547
|
/**
|
|
5286
5548
|
* Where to insert the suppress comment
|
|
5287
5549
|
* (e.g., `above-function-declaration`, `above-angular-decorator`,
|
|
5288
|
-
* `above-component-worst-method`, or
|
|
5289
|
-
* `suppress-line` and `suppress-file`
|
|
5550
|
+
* `above-template-anchor-line`, `above-component-worst-method`, or
|
|
5551
|
+
* `top-of-template`). Present on `suppress-line` and `suppress-file`
|
|
5552
|
+
* action variants. `above-template-anchor-line` is used for
|
|
5553
|
+
* single-file-component markup (`.svelte`, `.vue`, `.astro`), where the
|
|
5554
|
+
* synthetic `<template>` unit is anchored at its first contributing
|
|
5555
|
+
* construct rather than at the top of the file, so the comment belongs on
|
|
5556
|
+
* the line immediately preceding the reported line.
|
|
5290
5557
|
*/
|
|
5291
5558
|
placement?: (string | null)
|
|
5292
5559
|
/**
|
|
@@ -5305,11 +5572,29 @@ target_path?: (string | null)
|
|
|
5305
5572
|
* Summary statistics for the health report.
|
|
5306
5573
|
*/
|
|
5307
5574
|
export interface HealthSummary {
|
|
5575
|
+
/**
|
|
5576
|
+
* Files included in the health analysis.
|
|
5577
|
+
*/
|
|
5308
5578
|
files_analyzed: number
|
|
5579
|
+
/**
|
|
5580
|
+
* Functions scored across the analyzed files.
|
|
5581
|
+
*/
|
|
5309
5582
|
functions_analyzed: number
|
|
5583
|
+
/**
|
|
5584
|
+
* Functions exceeding at least one complexity or CRAP threshold.
|
|
5585
|
+
*/
|
|
5310
5586
|
functions_above_threshold: number
|
|
5587
|
+
/**
|
|
5588
|
+
* Global cyclomatic-complexity ceiling for this run.
|
|
5589
|
+
*/
|
|
5311
5590
|
max_cyclomatic_threshold: number
|
|
5591
|
+
/**
|
|
5592
|
+
* Global cognitive-complexity ceiling for this run.
|
|
5593
|
+
*/
|
|
5312
5594
|
max_cognitive_threshold: number
|
|
5595
|
+
/**
|
|
5596
|
+
* Global CRAP-score ceiling for this run.
|
|
5597
|
+
*/
|
|
5313
5598
|
max_crap_threshold: number
|
|
5314
5599
|
/**
|
|
5315
5600
|
* Effective global unit-size ceiling (`health.maxUnitSize`, maximum
|
|
@@ -5319,14 +5604,42 @@ max_crap_threshold: number
|
|
|
5319
5604
|
* here; this is the global default.
|
|
5320
5605
|
*/
|
|
5321
5606
|
max_unit_size_threshold: number
|
|
5607
|
+
/**
|
|
5608
|
+
* Files with a computed maintainability score; absent when file scoring
|
|
5609
|
+
* did not run.
|
|
5610
|
+
*/
|
|
5322
5611
|
files_scored?: (number | null)
|
|
5612
|
+
/**
|
|
5613
|
+
* Mean maintainability index over scored files (0-100).
|
|
5614
|
+
*/
|
|
5323
5615
|
average_maintainability?: (number | null)
|
|
5616
|
+
/**
|
|
5617
|
+
* Coverage model behind the CRAP scores, when coverage was used.
|
|
5618
|
+
*/
|
|
5324
5619
|
coverage_model?: (CoverageModel | null)
|
|
5620
|
+
/**
|
|
5621
|
+
* Whether CRAP findings mix coverage sources.
|
|
5622
|
+
*/
|
|
5325
5623
|
coverage_source_consistency?: (CoverageSourceConsistency | null)
|
|
5624
|
+
/**
|
|
5625
|
+
* Functions matched against the Istanbul coverage file, in Istanbul mode.
|
|
5626
|
+
*/
|
|
5326
5627
|
istanbul_matched?: (number | null)
|
|
5628
|
+
/**
|
|
5629
|
+
* Functions in the Istanbul coverage file, in Istanbul mode.
|
|
5630
|
+
*/
|
|
5327
5631
|
istanbul_total?: (number | null)
|
|
5632
|
+
/**
|
|
5633
|
+
* Findings with critical severity.
|
|
5634
|
+
*/
|
|
5328
5635
|
severity_critical_count: number
|
|
5636
|
+
/**
|
|
5637
|
+
* Findings with high severity.
|
|
5638
|
+
*/
|
|
5329
5639
|
severity_high_count: number
|
|
5640
|
+
/**
|
|
5641
|
+
* Findings with moderate severity.
|
|
5642
|
+
*/
|
|
5330
5643
|
severity_moderate_count: number
|
|
5331
5644
|
/**
|
|
5332
5645
|
* Baseline staleness data, present only when a baseline was loaded.
|
|
@@ -5382,30 +5695,95 @@ stale: boolean
|
|
|
5382
5695
|
*/
|
|
5383
5696
|
export interface ThresholdOverrideState {
|
|
5384
5697
|
status: ThresholdOverrideStatus
|
|
5698
|
+
/**
|
|
5699
|
+
* Index of the entry in the configured `thresholdOverrides` array.
|
|
5700
|
+
* Several rows can share one index when the override participates in more
|
|
5701
|
+
* than one dimension; group on this to count configured overrides.
|
|
5702
|
+
*/
|
|
5385
5703
|
override_index: number
|
|
5704
|
+
dimension: ThresholdOverrideDimension
|
|
5705
|
+
/**
|
|
5706
|
+
* Dimensions the matched unit still breaches despite this override,
|
|
5707
|
+
* whether or not this override configures their ceilings. Non-empty means
|
|
5708
|
+
* raising the ceiling did not settle the matter: a complexity or CRAP
|
|
5709
|
+
* finding survived, or the unit is still longer than the resolved
|
|
5710
|
+
* `maxUnitSize`, which keeps it in the large-function list without
|
|
5711
|
+
* emitting a finding of its own.
|
|
5712
|
+
*/
|
|
5713
|
+
outstanding?: ThresholdOverrideDimension[]
|
|
5714
|
+
/**
|
|
5715
|
+
* Matched file path, when the override matched one.
|
|
5716
|
+
*/
|
|
5386
5717
|
path?: (string | null)
|
|
5718
|
+
/**
|
|
5719
|
+
* Matched function name, for function-scoped overrides.
|
|
5720
|
+
*/
|
|
5387
5721
|
function?: (string | null)
|
|
5722
|
+
/**
|
|
5723
|
+
* 1-based line of the matched unit. Absent on `no_match` rows, which
|
|
5724
|
+
* describe an entry that matched nothing. Name alone is not an identity:
|
|
5725
|
+
* one file can hold several units sharing a name, so this pairs with
|
|
5726
|
+
* `col` to keep their rows distinct (issue #2163).
|
|
5727
|
+
*/
|
|
5728
|
+
line?: (number | null)
|
|
5729
|
+
/**
|
|
5730
|
+
* 0-based byte column of the matched unit. Absent on `no_match` rows.
|
|
5731
|
+
*/
|
|
5732
|
+
col?: (number | null)
|
|
5388
5733
|
configured_thresholds: HealthConfiguredThresholds
|
|
5389
5734
|
effective_thresholds: HealthEffectiveThresholds
|
|
5735
|
+
/**
|
|
5736
|
+
* Current complexity metrics of the matched code, when matched.
|
|
5737
|
+
*/
|
|
5390
5738
|
metrics?: (ThresholdOverrideMetrics | null)
|
|
5739
|
+
/**
|
|
5740
|
+
* Human-readable explanation of the status.
|
|
5741
|
+
*/
|
|
5391
5742
|
reason?: (string | null)
|
|
5392
5743
|
}
|
|
5393
5744
|
/**
|
|
5394
5745
|
* Threshold values configured by a single override entry.
|
|
5395
5746
|
*/
|
|
5396
5747
|
export interface HealthConfiguredThresholds {
|
|
5748
|
+
/**
|
|
5749
|
+
* Cyclomatic ceiling set by the override, when it sets one.
|
|
5750
|
+
*/
|
|
5397
5751
|
max_cyclomatic?: (number | null)
|
|
5752
|
+
/**
|
|
5753
|
+
* Cognitive ceiling set by the override, when it sets one.
|
|
5754
|
+
*/
|
|
5398
5755
|
max_cognitive?: (number | null)
|
|
5756
|
+
/**
|
|
5757
|
+
* CRAP ceiling set by the override, when it sets one.
|
|
5758
|
+
*/
|
|
5399
5759
|
max_crap?: (number | null)
|
|
5760
|
+
/**
|
|
5761
|
+
* Unit-size ceiling set by the override, when it sets one.
|
|
5762
|
+
*/
|
|
5400
5763
|
max_unit_size?: (number | null)
|
|
5401
5764
|
}
|
|
5402
5765
|
/**
|
|
5403
5766
|
* Current complexity metrics for a matched threshold override entry.
|
|
5404
5767
|
*/
|
|
5405
5768
|
export interface ThresholdOverrideMetrics {
|
|
5769
|
+
/**
|
|
5770
|
+
* Current cyclomatic complexity of the matched function.
|
|
5771
|
+
*/
|
|
5406
5772
|
cyclomatic: number
|
|
5773
|
+
/**
|
|
5774
|
+
* Current cognitive complexity of the matched function.
|
|
5775
|
+
*/
|
|
5407
5776
|
cognitive: number
|
|
5777
|
+
/**
|
|
5778
|
+
* Current CRAP score, when coverage data exists.
|
|
5779
|
+
*/
|
|
5408
5780
|
crap?: (number | null)
|
|
5781
|
+
/**
|
|
5782
|
+
* Measured line count of the matched unit. Present on complexity rows,
|
|
5783
|
+
* where `maxUnitSize` participates in the dimension; absent on CRAP rows
|
|
5784
|
+
* and `<component>` rollup rows, which are never scored on unit size.
|
|
5785
|
+
*/
|
|
5786
|
+
line_count?: (number | null)
|
|
5409
5787
|
}
|
|
5410
5788
|
/**
|
|
5411
5789
|
* Project-wide vital signs: a fixed set of metrics for trend tracking.
|
|
@@ -5564,11 +5942,30 @@ total_files: number
|
|
|
5564
5942
|
* Total number of exports across all files.
|
|
5565
5943
|
*/
|
|
5566
5944
|
total_exports: number
|
|
5945
|
+
/**
|
|
5946
|
+
* Number of unreachable files.
|
|
5947
|
+
*/
|
|
5567
5948
|
dead_files: number
|
|
5949
|
+
/**
|
|
5950
|
+
* Number of unused exports.
|
|
5951
|
+
*/
|
|
5568
5952
|
dead_exports: number
|
|
5953
|
+
/**
|
|
5954
|
+
* Lines inside detected clones; absent when duplication did not run.
|
|
5955
|
+
*/
|
|
5569
5956
|
duplicated_lines?: (number | null)
|
|
5957
|
+
/**
|
|
5958
|
+
* Lines scanned by duplication; absent when duplication did not run.
|
|
5959
|
+
*/
|
|
5570
5960
|
total_lines?: (number | null)
|
|
5961
|
+
/**
|
|
5962
|
+
* Files with a computed maintainability score; absent when file scoring
|
|
5963
|
+
* did not run.
|
|
5964
|
+
*/
|
|
5571
5965
|
files_scored?: (number | null)
|
|
5966
|
+
/**
|
|
5967
|
+
* Total declared dependencies across manifest sections.
|
|
5968
|
+
*/
|
|
5572
5969
|
total_deps: number
|
|
5573
5970
|
}
|
|
5574
5971
|
/**
|
|
@@ -5632,9 +6029,21 @@ render_sites: number
|
|
|
5632
6029
|
*/
|
|
5633
6030
|
distinct_parents: number
|
|
5634
6031
|
}
|
|
6032
|
+
/**
|
|
6033
|
+
* Overall project health score: 100 minus capped per-category penalties.
|
|
6034
|
+
*/
|
|
5635
6035
|
export interface HealthScore {
|
|
6036
|
+
/**
|
|
6037
|
+
* Score formula version; see [`HEALTH_SCORE_FORMULA_VERSION`].
|
|
6038
|
+
*/
|
|
5636
6039
|
formula_version: number
|
|
6040
|
+
/**
|
|
6041
|
+
* Health score in `[0, 100]`; higher is healthier.
|
|
6042
|
+
*/
|
|
5637
6043
|
score: number
|
|
6044
|
+
/**
|
|
6045
|
+
* Letter grade from [`letter_grade`] (A>=85, B>=70, C>=55, D>=40, F<40).
|
|
6046
|
+
*/
|
|
5638
6047
|
grade: string
|
|
5639
6048
|
penalties: HealthScorePenalties
|
|
5640
6049
|
}
|
|
@@ -5642,13 +6051,44 @@ penalties: HealthScorePenalties
|
|
|
5642
6051
|
* Per-component penalty breakdown for the health score.
|
|
5643
6052
|
*/
|
|
5644
6053
|
export interface HealthScorePenalties {
|
|
6054
|
+
/**
|
|
6055
|
+
* Points subtracted for unreachable files; absent when dead-code data
|
|
6056
|
+
* was not available.
|
|
6057
|
+
*/
|
|
5645
6058
|
dead_files?: (number | null)
|
|
6059
|
+
/**
|
|
6060
|
+
* Points subtracted for unused exports; absent when dead-code data was
|
|
6061
|
+
* not available.
|
|
6062
|
+
*/
|
|
5646
6063
|
dead_exports?: (number | null)
|
|
6064
|
+
/**
|
|
6065
|
+
* Points subtracted for overall complexity load.
|
|
6066
|
+
*/
|
|
5647
6067
|
complexity: number
|
|
6068
|
+
/**
|
|
6069
|
+
* Points subtracted for the complexity tail (v1: p90 cyclomatic; v2:
|
|
6070
|
+
* critical-complexity density).
|
|
6071
|
+
*/
|
|
5648
6072
|
p90_complexity: number
|
|
6073
|
+
/**
|
|
6074
|
+
* Points subtracted for low maintainability-index files; absent when
|
|
6075
|
+
* file scores were not computed.
|
|
6076
|
+
*/
|
|
5649
6077
|
maintainability?: (number | null)
|
|
6078
|
+
/**
|
|
6079
|
+
* Points subtracted for churn-times-complexity hotspots; absent without
|
|
6080
|
+
* git history.
|
|
6081
|
+
*/
|
|
5650
6082
|
hotspots?: (number | null)
|
|
6083
|
+
/**
|
|
6084
|
+
* Points subtracted for unused dependencies; absent when dead-code data
|
|
6085
|
+
* was not available.
|
|
6086
|
+
*/
|
|
5651
6087
|
unused_deps?: (number | null)
|
|
6088
|
+
/**
|
|
6089
|
+
* Points subtracted for circular dependency chains; absent when
|
|
6090
|
+
* dead-code data was not available.
|
|
6091
|
+
*/
|
|
5652
6092
|
circular_deps?: (number | null)
|
|
5653
6093
|
/**
|
|
5654
6094
|
* Penalty for oversized functions, computed against fixed calibration
|
|
@@ -5658,7 +6098,15 @@ circular_deps?: (number | null)
|
|
|
5658
6098
|
* penalty. `health.ignore` removes files from the score entirely.
|
|
5659
6099
|
*/
|
|
5660
6100
|
unit_size?: (number | null)
|
|
6101
|
+
/**
|
|
6102
|
+
* Points subtracted for fan-in coupling concentration; absent when the
|
|
6103
|
+
* module graph was not available.
|
|
6104
|
+
*/
|
|
5661
6105
|
coupling?: (number | null)
|
|
6106
|
+
/**
|
|
6107
|
+
* Points subtracted for duplicated code; absent when the duplication
|
|
6108
|
+
* pipeline did not run.
|
|
6109
|
+
*/
|
|
5662
6110
|
duplication?: (number | null)
|
|
5663
6111
|
/**
|
|
5664
6112
|
* Small capped penalty for prop-drilling chains. `None` unless the opt-in
|
|
@@ -5670,18 +6118,72 @@ prop_drilling?: (number | null)
|
|
|
5670
6118
|
* Per-file health score combining complexity, coupling, and dead code metrics.
|
|
5671
6119
|
*/
|
|
5672
6120
|
export interface FileHealthScore {
|
|
6121
|
+
/**
|
|
6122
|
+
* File path relative to the project root.
|
|
6123
|
+
*/
|
|
5673
6124
|
path: string
|
|
6125
|
+
/**
|
|
6126
|
+
* Modules importing this file.
|
|
6127
|
+
*/
|
|
5674
6128
|
fan_in: number
|
|
6129
|
+
/**
|
|
6130
|
+
* Modules this file imports.
|
|
6131
|
+
*/
|
|
5675
6132
|
fan_out: number
|
|
6133
|
+
/**
|
|
6134
|
+
* Unused exports as a fraction of the file's exports, in `[0, 1]`.
|
|
6135
|
+
*/
|
|
5676
6136
|
dead_code_ratio: number
|
|
6137
|
+
/**
|
|
6138
|
+
* Total cyclomatic complexity per line of code.
|
|
6139
|
+
*/
|
|
5677
6140
|
complexity_density: number
|
|
6141
|
+
/**
|
|
6142
|
+
* Maintainability index (0-100); higher is healthier.
|
|
6143
|
+
*/
|
|
5678
6144
|
maintainability_index: number
|
|
6145
|
+
/**
|
|
6146
|
+
* Summed cyclomatic complexity over the file's functions.
|
|
6147
|
+
*/
|
|
5679
6148
|
total_cyclomatic: number
|
|
6149
|
+
/**
|
|
6150
|
+
* Summed cognitive complexity over the file's functions.
|
|
6151
|
+
*/
|
|
5680
6152
|
total_cognitive: number
|
|
6153
|
+
/**
|
|
6154
|
+
* Functions in the file.
|
|
6155
|
+
*/
|
|
5681
6156
|
function_count: number
|
|
6157
|
+
/**
|
|
6158
|
+
* Lines of code in the file.
|
|
6159
|
+
*/
|
|
5682
6160
|
lines: number
|
|
6161
|
+
/**
|
|
6162
|
+
* Highest CRAP score among the file's functions. Always the raw measured
|
|
6163
|
+
* value; threshold overrides never rewrite it.
|
|
6164
|
+
*/
|
|
5683
6165
|
crap_max: number
|
|
6166
|
+
/**
|
|
6167
|
+
* Functions whose rounded CRAP score meets or exceeds their effective
|
|
6168
|
+
* ceiling, resolved from `health.thresholdOverrides` over the global
|
|
6169
|
+
* `maxCrap` / `--max-crap` value. Zero when CRAP enforcement is disabled
|
|
6170
|
+
* (global ceiling `0`).
|
|
6171
|
+
*/
|
|
5684
6172
|
crap_above_threshold: number
|
|
6173
|
+
/**
|
|
6174
|
+
* Functions whose rounded CRAP score is at or above the canonical 30.0
|
|
6175
|
+
* baseline but below their effective ceiling: the count the configuration
|
|
6176
|
+
* let through. Stays `0` when the effective ceiling is stricter than 30.
|
|
6177
|
+
* When CRAP enforcement is disabled (global ceiling `0`), counts every
|
|
6178
|
+
* function at or above the canonical baseline. Omitted when zero.
|
|
6179
|
+
*/
|
|
6180
|
+
crap_exempted?: number
|
|
6181
|
+
/**
|
|
6182
|
+
* Lowest effective CRAP ceiling among the file's functions, present only
|
|
6183
|
+
* when it differs from the run global (`summary.max_crap_threshold`).
|
|
6184
|
+
* Consumers fall back to `summary.max_crap_threshold` when absent.
|
|
6185
|
+
*/
|
|
6186
|
+
crap_effective_threshold?: (number | null)
|
|
5685
6187
|
}
|
|
5686
6188
|
/**
|
|
5687
6189
|
* Static test coverage gaps derived from the module graph. Shows runtime files
|
|
@@ -5864,16 +6366,46 @@ comment?: (string | null)
|
|
|
5864
6366
|
* test code.
|
|
5865
6367
|
*/
|
|
5866
6368
|
export interface HotspotFinding {
|
|
6369
|
+
/**
|
|
6370
|
+
* File path relative to the project root.
|
|
6371
|
+
*/
|
|
5867
6372
|
path: string
|
|
6373
|
+
/**
|
|
6374
|
+
* Churn-times-complexity hotspot score; higher is riskier.
|
|
6375
|
+
*/
|
|
5868
6376
|
score: number
|
|
6377
|
+
/**
|
|
6378
|
+
* Commits touching the file in the analysis window.
|
|
6379
|
+
*/
|
|
5869
6380
|
commits: number
|
|
6381
|
+
/**
|
|
6382
|
+
* Recency-weighted commit count.
|
|
6383
|
+
*/
|
|
5870
6384
|
weighted_commits: number
|
|
6385
|
+
/**
|
|
6386
|
+
* Lines added to the file in the analysis window.
|
|
6387
|
+
*/
|
|
5871
6388
|
lines_added: number
|
|
6389
|
+
/**
|
|
6390
|
+
* Lines deleted from the file in the analysis window.
|
|
6391
|
+
*/
|
|
5872
6392
|
lines_deleted: number
|
|
6393
|
+
/**
|
|
6394
|
+
* Total cyclomatic complexity per line of code.
|
|
6395
|
+
*/
|
|
5873
6396
|
complexity_density: number
|
|
6397
|
+
/**
|
|
6398
|
+
* Modules importing this file.
|
|
6399
|
+
*/
|
|
5874
6400
|
fan_in: number
|
|
5875
6401
|
trend: ChurnTrend
|
|
6402
|
+
/**
|
|
6403
|
+
* Ownership metrics, when ownership analysis ran.
|
|
6404
|
+
*/
|
|
5876
6405
|
ownership?: (OwnershipMetrics | null)
|
|
6406
|
+
/**
|
|
6407
|
+
* True for files matched by test-path patterns; omitted when false.
|
|
6408
|
+
*/
|
|
5877
6409
|
is_test_path?: boolean
|
|
5878
6410
|
/**
|
|
5879
6411
|
* Machine-actionable refactor and review hints. Always populated;
|
|
@@ -5885,23 +6417,67 @@ is_test_path?: boolean
|
|
|
5885
6417
|
*/
|
|
5886
6418
|
actions: HotspotAction[]
|
|
5887
6419
|
}
|
|
6420
|
+
/**
|
|
6421
|
+
* Ownership metrics for a hotspot file, derived from git history and
|
|
6422
|
+
* CODEOWNERS declarations.
|
|
6423
|
+
*/
|
|
5888
6424
|
export interface OwnershipMetrics {
|
|
6425
|
+
/**
|
|
6426
|
+
* Minimum contributors covering half the file's commits.
|
|
6427
|
+
*/
|
|
5889
6428
|
bus_factor: number
|
|
6429
|
+
/**
|
|
6430
|
+
* Distinct contributors touching the file in the window.
|
|
6431
|
+
*/
|
|
5890
6432
|
contributor_count: number
|
|
5891
6433
|
top_contributor: ContributorEntry
|
|
6434
|
+
/**
|
|
6435
|
+
* Contributors active in the recent window; omitted when empty.
|
|
6436
|
+
*/
|
|
5892
6437
|
recent_contributors?: ContributorEntry[]
|
|
6438
|
+
/**
|
|
6439
|
+
* Contributors best positioned to review changes; omitted when empty.
|
|
6440
|
+
*/
|
|
5893
6441
|
suggested_reviewers?: ContributorEntry[]
|
|
6442
|
+
/**
|
|
6443
|
+
* Owner declared in CODEOWNERS, when one matches the file.
|
|
6444
|
+
*/
|
|
5894
6445
|
declared_owner?: (string | null)
|
|
6446
|
+
/**
|
|
6447
|
+
* Whether no owner could be resolved; `null` when ownership resolution
|
|
6448
|
+
* did not run.
|
|
6449
|
+
*/
|
|
5895
6450
|
unowned?: (boolean | null)
|
|
5896
6451
|
ownership_state: OwnershipState
|
|
6452
|
+
/**
|
|
6453
|
+
* True when recent contributions drift away from the declared ownership.
|
|
6454
|
+
*/
|
|
5897
6455
|
drift: boolean
|
|
6456
|
+
/**
|
|
6457
|
+
* Human-readable explanation of the drift, when drifting.
|
|
6458
|
+
*/
|
|
5898
6459
|
drift_reason?: (string | null)
|
|
5899
6460
|
}
|
|
6461
|
+
/**
|
|
6462
|
+
* One contributor row in ownership metrics.
|
|
6463
|
+
*/
|
|
5900
6464
|
export interface ContributorEntry {
|
|
6465
|
+
/**
|
|
6466
|
+
* Contributor identifier, encoded per `format`.
|
|
6467
|
+
*/
|
|
5901
6468
|
identifier: string
|
|
5902
6469
|
format: ContributorIdentifierFormat
|
|
6470
|
+
/**
|
|
6471
|
+
* Contributor's share of the file's commits, in `[0, 1]`.
|
|
6472
|
+
*/
|
|
5903
6473
|
share: number
|
|
6474
|
+
/**
|
|
6475
|
+
* Days since the contributor's last commit to the file.
|
|
6476
|
+
*/
|
|
5904
6477
|
stale_days: number
|
|
6478
|
+
/**
|
|
6479
|
+
* Contributor's commits touching the file in the window.
|
|
6480
|
+
*/
|
|
5905
6481
|
commits: number
|
|
5906
6482
|
}
|
|
5907
6483
|
/**
|
|
@@ -5944,11 +6520,30 @@ suggested_pattern?: (string | null)
|
|
|
5944
6520
|
*/
|
|
5945
6521
|
heuristic?: (HotspotActionHeuristic | null)
|
|
5946
6522
|
}
|
|
6523
|
+
/**
|
|
6524
|
+
* Scope metadata for the hotspot analysis.
|
|
6525
|
+
*/
|
|
5947
6526
|
export interface HotspotSummary {
|
|
6527
|
+
/**
|
|
6528
|
+
* Start of the churn window, as passed to `git log --since`.
|
|
6529
|
+
*/
|
|
5948
6530
|
since: string
|
|
6531
|
+
/**
|
|
6532
|
+
* Minimum commit count for a file to qualify as a hotspot.
|
|
6533
|
+
*/
|
|
5949
6534
|
min_commits: number
|
|
6535
|
+
/**
|
|
6536
|
+
* Files with churn data in the window.
|
|
6537
|
+
*/
|
|
5950
6538
|
files_analyzed: number
|
|
6539
|
+
/**
|
|
6540
|
+
* Files excluded by test-path and ignore filters.
|
|
6541
|
+
*/
|
|
5951
6542
|
files_excluded: number
|
|
6543
|
+
/**
|
|
6544
|
+
* True when the repository is a shallow clone, so churn counts are
|
|
6545
|
+
* truncated.
|
|
6546
|
+
*/
|
|
5952
6547
|
shallow_clone: boolean
|
|
5953
6548
|
}
|
|
5954
6549
|
/**
|
|
@@ -6101,6 +6696,9 @@ lazy_parse_warning: boolean
|
|
|
6101
6696
|
*/
|
|
6102
6697
|
untracked_ratio_percent: number
|
|
6103
6698
|
}
|
|
6699
|
+
/**
|
|
6700
|
+
* One per-function runtime-coverage finding in `runtime_coverage.findings`.
|
|
6701
|
+
*/
|
|
6104
6702
|
export interface RuntimeCoverageFinding {
|
|
6105
6703
|
/**
|
|
6106
6704
|
* Per-finding suppression key of the form `fallow:prod:<hash>` (first 8 hex
|
|
@@ -6207,6 +6805,9 @@ export interface RuntimeCoverageAction {
|
|
|
6207
6805
|
* consumers should treat unknown values as forward-compat extensions.
|
|
6208
6806
|
*/
|
|
6209
6807
|
type: string
|
|
6808
|
+
/**
|
|
6809
|
+
* Human-readable action description.
|
|
6810
|
+
*/
|
|
6210
6811
|
description: string
|
|
6211
6812
|
/**
|
|
6212
6813
|
* Whether fallow can apply this action automatically.
|
|
@@ -6255,6 +6856,9 @@ min_observation_volume: number
|
|
|
6255
6856
|
*/
|
|
6256
6857
|
meets_observation_volume: boolean
|
|
6257
6858
|
}
|
|
6859
|
+
/**
|
|
6860
|
+
* One hot function in `runtime_coverage.hot_paths`, ranked by invocations.
|
|
6861
|
+
*/
|
|
6258
6862
|
export interface RuntimeCoverageHotPath {
|
|
6259
6863
|
/**
|
|
6260
6864
|
* Stable content-hash ID of the form `fallow:hot:<hash>`.
|
|
@@ -6301,6 +6905,10 @@ percentile: number
|
|
|
6301
6905
|
*/
|
|
6302
6906
|
actions?: RuntimeCoverageAction[]
|
|
6303
6907
|
}
|
|
6908
|
+
/**
|
|
6909
|
+
* One blast-radius entry in `runtime_coverage.blast_radius`: how far a
|
|
6910
|
+
* change to the function would ripple.
|
|
6911
|
+
*/
|
|
6304
6912
|
export interface RuntimeCoverageBlastRadiusEntry {
|
|
6305
6913
|
/**
|
|
6306
6914
|
* Stable content-hash ID of the form `fallow:blast:<hash>`.
|
|
@@ -6339,6 +6947,10 @@ caller_count_weighted_by_traffic: number
|
|
|
6339
6947
|
deploys_touched?: (number | null)
|
|
6340
6948
|
risk_band: RuntimeCoverageRiskBand
|
|
6341
6949
|
}
|
|
6950
|
+
/**
|
|
6951
|
+
* One production-importance entry in `runtime_coverage.importance`, scoring
|
|
6952
|
+
* how much a function matters in production.
|
|
6953
|
+
*/
|
|
6342
6954
|
export interface RuntimeCoverageImportanceEntry {
|
|
6343
6955
|
/**
|
|
6344
6956
|
* Stable content-hash ID of the form `fallow:importance:<hash>`.
|
|
@@ -6385,7 +6997,13 @@ importance_score: number
|
|
|
6385
6997
|
*/
|
|
6386
6998
|
reason: string
|
|
6387
6999
|
}
|
|
7000
|
+
/**
|
|
7001
|
+
* Non-fatal diagnostic emitted while merging runtime coverage.
|
|
7002
|
+
*/
|
|
6388
7003
|
export interface RuntimeCoverageMessage {
|
|
7004
|
+
/**
|
|
7005
|
+
* Stable machine-readable warning code.
|
|
7006
|
+
*/
|
|
6389
7007
|
code: string
|
|
6390
7008
|
/**
|
|
6391
7009
|
* Human-readable warning message.
|
|
@@ -6437,17 +7055,38 @@ export interface CoverageIntelligenceReport {
|
|
|
6437
7055
|
schema_version: CoverageIntelligenceSchemaVersion
|
|
6438
7056
|
verdict: CoverageIntelligenceVerdict
|
|
6439
7057
|
summary: CoverageIntelligenceSummary
|
|
7058
|
+
/**
|
|
7059
|
+
* Combined findings, one per matched unit.
|
|
7060
|
+
*/
|
|
6440
7061
|
findings: CoverageIntelligenceFinding[]
|
|
6441
7062
|
}
|
|
6442
7063
|
/**
|
|
6443
7064
|
* Aggregate metadata for coverage-intelligence output.
|
|
6444
7065
|
*/
|
|
6445
7066
|
export interface CoverageIntelligenceSummary {
|
|
7067
|
+
/**
|
|
7068
|
+
* Total combined findings.
|
|
7069
|
+
*/
|
|
6446
7070
|
findings: number
|
|
7071
|
+
/**
|
|
7072
|
+
* Findings with the risky-change verdict.
|
|
7073
|
+
*/
|
|
6447
7074
|
risky_changes: number
|
|
7075
|
+
/**
|
|
7076
|
+
* Findings with the high-confidence-delete verdict.
|
|
7077
|
+
*/
|
|
6448
7078
|
high_confidence_deletes: number
|
|
7079
|
+
/**
|
|
7080
|
+
* Findings with the review-required verdict.
|
|
7081
|
+
*/
|
|
6449
7082
|
review_required: number
|
|
7083
|
+
/**
|
|
7084
|
+
* Findings with the refactor-carefully verdict.
|
|
7085
|
+
*/
|
|
6450
7086
|
refactor_carefully: number
|
|
7087
|
+
/**
|
|
7088
|
+
* Candidate joins dropped because the cross-surface match was ambiguous.
|
|
7089
|
+
*/
|
|
6451
7090
|
skipped_ambiguous_matches: number
|
|
6452
7091
|
}
|
|
6453
7092
|
/**
|
|
@@ -6471,24 +7110,58 @@ identity?: (string | null)
|
|
|
6471
7110
|
*/
|
|
6472
7111
|
line: number
|
|
6473
7112
|
verdict: CoverageIntelligenceVerdict
|
|
7113
|
+
/**
|
|
7114
|
+
* Ordered evidence signals behind the verdict.
|
|
7115
|
+
*/
|
|
6474
7116
|
signals: CoverageIntelligenceSignal[]
|
|
6475
7117
|
recommendation: CoverageIntelligenceRecommendation
|
|
6476
7118
|
confidence: CoverageIntelligenceConfidence
|
|
7119
|
+
/**
|
|
7120
|
+
* IDs of related findings from other fallow surfaces.
|
|
7121
|
+
*/
|
|
6477
7122
|
related_ids?: string[]
|
|
6478
7123
|
evidence: CoverageIntelligenceEvidence
|
|
7124
|
+
/**
|
|
7125
|
+
* Machine-actionable follow-up actions.
|
|
7126
|
+
*/
|
|
6479
7127
|
actions: CoverageIntelligenceAction[]
|
|
6480
7128
|
}
|
|
6481
7129
|
/**
|
|
6482
7130
|
* Compact evidence values that led to a recommendation.
|
|
6483
7131
|
*/
|
|
6484
7132
|
export interface CoverageIntelligenceEvidence {
|
|
7133
|
+
/**
|
|
7134
|
+
* Test coverage percentage (0-100), when coverage data exists.
|
|
7135
|
+
*/
|
|
6485
7136
|
coverage_pct?: (number | null)
|
|
7137
|
+
/**
|
|
7138
|
+
* CRAP score, when complexity and coverage both exist.
|
|
7139
|
+
*/
|
|
6486
7140
|
crap?: (number | null)
|
|
7141
|
+
/**
|
|
7142
|
+
* Runtime-coverage verdict label, e.g. `hot` or `cold`.
|
|
7143
|
+
*/
|
|
6487
7144
|
runtime_verdict?: (string | null)
|
|
7145
|
+
/**
|
|
7146
|
+
* Observed runtime invocation count.
|
|
7147
|
+
*/
|
|
6488
7148
|
invocations?: (number | null)
|
|
7149
|
+
/**
|
|
7150
|
+
* Static usage status label, e.g. `unused`.
|
|
7151
|
+
*/
|
|
6489
7152
|
static_status?: (string | null)
|
|
7153
|
+
/**
|
|
7154
|
+
* Static test-coverage status label, e.g. `no-test-path`.
|
|
7155
|
+
*/
|
|
6490
7156
|
test_coverage?: (string | null)
|
|
7157
|
+
/**
|
|
7158
|
+
* True when the unit is inside the current change scope; omitted when
|
|
7159
|
+
* false.
|
|
7160
|
+
*/
|
|
6491
7161
|
changed?: boolean
|
|
7162
|
+
/**
|
|
7163
|
+
* Ownership-drift state label, when ownership analysis ran.
|
|
7164
|
+
*/
|
|
6492
7165
|
ownership_state?: (string | null)
|
|
6493
7166
|
match_confidence: CoverageIntelligenceMatchConfidence
|
|
6494
7167
|
}
|
|
@@ -6500,6 +7173,9 @@ export interface CoverageIntelligenceAction {
|
|
|
6500
7173
|
* Action identifier, normalized to `type` in JSON output.
|
|
6501
7174
|
*/
|
|
6502
7175
|
type: string
|
|
7176
|
+
/**
|
|
7177
|
+
* Human-readable action description.
|
|
7178
|
+
*/
|
|
6503
7179
|
description: string
|
|
6504
7180
|
/**
|
|
6505
7181
|
* Whether fallow can apply this action automatically.
|
|
@@ -6510,9 +7186,21 @@ auto_fixable: boolean
|
|
|
6510
7186
|
* A function exceeding the very-high-risk size threshold (>60 LOC).
|
|
6511
7187
|
*/
|
|
6512
7188
|
export interface LargeFunctionEntry {
|
|
7189
|
+
/**
|
|
7190
|
+
* File path relative to the project root.
|
|
7191
|
+
*/
|
|
6513
7192
|
path: string
|
|
7193
|
+
/**
|
|
7194
|
+
* Function name, or a synthesized name for anonymous functions.
|
|
7195
|
+
*/
|
|
6514
7196
|
name: string
|
|
7197
|
+
/**
|
|
7198
|
+
* 1-based line the function starts on.
|
|
7199
|
+
*/
|
|
6515
7200
|
line: number
|
|
7201
|
+
/**
|
|
7202
|
+
* Lines of code in the function body.
|
|
7203
|
+
*/
|
|
6516
7204
|
line_count: number
|
|
6517
7205
|
}
|
|
6518
7206
|
/**
|
|
@@ -8005,8 +8693,17 @@ count: number
|
|
|
8005
8693
|
* (A>=85, B>=70, C>=55, D>=40, F<40), so the two axes are read on one scale.
|
|
8006
8694
|
*/
|
|
8007
8695
|
export interface StylingHealth {
|
|
8696
|
+
/**
|
|
8697
|
+
* Styling formula version; see [`STYLING_HEALTH_FORMULA_VERSION`].
|
|
8698
|
+
*/
|
|
8008
8699
|
formula_version: number
|
|
8700
|
+
/**
|
|
8701
|
+
* Styling-health score in `[0, 100]`; higher is healthier.
|
|
8702
|
+
*/
|
|
8009
8703
|
score: number
|
|
8704
|
+
/**
|
|
8705
|
+
* Letter grade from the shared [`letter_grade`] thresholds.
|
|
8706
|
+
*/
|
|
8010
8707
|
grade: string
|
|
8011
8708
|
penalties: StylingHealthPenalties
|
|
8012
8709
|
confidence: StylingHealthConfidence
|
|
@@ -8135,12 +8832,33 @@ introduced?: (boolean | null)
|
|
|
8135
8832
|
* fallow JSON-producing command.
|
|
8136
8833
|
*/
|
|
8137
8834
|
export interface ExplainOutput {
|
|
8835
|
+
/**
|
|
8836
|
+
* Issue-type identifier, e.g. `unused-export`.
|
|
8837
|
+
*/
|
|
8138
8838
|
id: string
|
|
8839
|
+
/**
|
|
8840
|
+
* Human-readable issue-type name.
|
|
8841
|
+
*/
|
|
8139
8842
|
name: string
|
|
8843
|
+
/**
|
|
8844
|
+
* One-line description of what the issue type reports.
|
|
8845
|
+
*/
|
|
8140
8846
|
summary: string
|
|
8847
|
+
/**
|
|
8848
|
+
* Why the issue matters.
|
|
8849
|
+
*/
|
|
8141
8850
|
rationale: string
|
|
8851
|
+
/**
|
|
8852
|
+
* Illustrative code example of the issue.
|
|
8853
|
+
*/
|
|
8142
8854
|
example: string
|
|
8855
|
+
/**
|
|
8856
|
+
* How to resolve findings of this type.
|
|
8857
|
+
*/
|
|
8143
8858
|
how_to_fix: string
|
|
8859
|
+
/**
|
|
8860
|
+
* Public documentation URL for the issue type.
|
|
8861
|
+
*/
|
|
8144
8862
|
docs: string
|
|
8145
8863
|
}
|
|
8146
8864
|
/**
|
|
@@ -8150,27 +8868,83 @@ export interface InspectOutput {
|
|
|
8150
8868
|
target: InspectTargetDescriptor
|
|
8151
8869
|
identity: InspectIdentity
|
|
8152
8870
|
evidence: InspectEvidence
|
|
8871
|
+
/**
|
|
8872
|
+
* Non-fatal problems encountered while gathering evidence.
|
|
8873
|
+
*/
|
|
8153
8874
|
warnings: string[]
|
|
8875
|
+
/**
|
|
8876
|
+
* `_meta` block with type-aware backend info, when applicable.
|
|
8877
|
+
*/
|
|
8154
8878
|
_meta?: (Meta | null)
|
|
8155
8879
|
}
|
|
8880
|
+
/**
|
|
8881
|
+
* Graph identity facts for a file target. `Value`-typed fields carry the
|
|
8882
|
+
* graph's verdict when analysis ran and are `null` when it did not.
|
|
8883
|
+
*/
|
|
8156
8884
|
export interface InspectFileIdentity {
|
|
8885
|
+
/**
|
|
8886
|
+
* File path relative to the analysed root.
|
|
8887
|
+
*/
|
|
8157
8888
|
file: string
|
|
8158
|
-
|
|
8159
|
-
|
|
8889
|
+
/**
|
|
8890
|
+
* Whether the module graph can reach the file from an entry point.
|
|
8891
|
+
*/
|
|
8892
|
+
is_reachable?: (boolean | null)
|
|
8893
|
+
/**
|
|
8894
|
+
* Whether the file is itself an entry point.
|
|
8895
|
+
*/
|
|
8896
|
+
is_entry_point?: (boolean | null)
|
|
8897
|
+
/**
|
|
8898
|
+
* Number of exports the file declares.
|
|
8899
|
+
*/
|
|
8160
8900
|
export_count?: (number | null)
|
|
8901
|
+
/**
|
|
8902
|
+
* Number of modules the file imports.
|
|
8903
|
+
*/
|
|
8161
8904
|
import_count?: (number | null)
|
|
8905
|
+
/**
|
|
8906
|
+
* Number of modules that import the file.
|
|
8907
|
+
*/
|
|
8162
8908
|
imported_by_count?: (number | null)
|
|
8163
8909
|
}
|
|
8910
|
+
/**
|
|
8911
|
+
* Graph identity facts for a symbol target. `Value`-typed fields carry the
|
|
8912
|
+
* graph's verdict when analysis ran and are `null` when it did not.
|
|
8913
|
+
*/
|
|
8164
8914
|
export interface InspectSymbolIdentity {
|
|
8915
|
+
/**
|
|
8916
|
+
* File path relative to the analysed root.
|
|
8917
|
+
*/
|
|
8165
8918
|
file: string
|
|
8919
|
+
/**
|
|
8920
|
+
* Name of the inspected export.
|
|
8921
|
+
*/
|
|
8166
8922
|
export_name: string
|
|
8167
|
-
|
|
8168
|
-
|
|
8169
|
-
|
|
8170
|
-
|
|
8923
|
+
/**
|
|
8924
|
+
* Whether the containing file is reachable from an entry point.
|
|
8925
|
+
*/
|
|
8926
|
+
file_reachable?: (boolean | null)
|
|
8927
|
+
/**
|
|
8928
|
+
* Whether the containing file is itself an entry point.
|
|
8929
|
+
*/
|
|
8930
|
+
is_entry_point?: (boolean | null)
|
|
8931
|
+
/**
|
|
8932
|
+
* Whether the export has any recorded consumer.
|
|
8933
|
+
*/
|
|
8934
|
+
is_used?: (boolean | null)
|
|
8935
|
+
/**
|
|
8936
|
+
* Explanation of the usage verdict, when the graph recorded one.
|
|
8937
|
+
*/
|
|
8938
|
+
reason?: (string | null)
|
|
8171
8939
|
}
|
|
8940
|
+
/**
|
|
8941
|
+
* `evidence` block of [`InspectOutput`]: one section per analysis.
|
|
8942
|
+
*/
|
|
8172
8943
|
export interface InspectEvidence {
|
|
8173
8944
|
trace_file: InspectEvidenceSection
|
|
8945
|
+
/**
|
|
8946
|
+
* Export-level usage trace; present only for symbol targets.
|
|
8947
|
+
*/
|
|
8174
8948
|
trace_export?: (InspectEvidenceSection | null)
|
|
8175
8949
|
dead_code: InspectEvidenceSection
|
|
8176
8950
|
duplication: InspectEvidenceSection
|
|
@@ -8210,11 +8984,23 @@ symbol_impact?: (InspectEvidenceSection | null)
|
|
|
8210
8984
|
*/
|
|
8211
8985
|
targeted_tests?: (InspectEvidenceSection | null)
|
|
8212
8986
|
}
|
|
8987
|
+
/**
|
|
8988
|
+
* One evidence section: status, the scope the evidence covers, and either a
|
|
8989
|
+
* data payload or a message explaining its absence.
|
|
8990
|
+
*/
|
|
8213
8991
|
export interface InspectEvidenceSection {
|
|
8214
8992
|
status: InspectSectionStatus
|
|
8215
8993
|
scope: InspectEvidenceScope
|
|
8994
|
+
/**
|
|
8995
|
+
* Explanation for `error` / `unavailable` sections.
|
|
8996
|
+
*/
|
|
8216
8997
|
message?: (string | null)
|
|
8217
|
-
|
|
8998
|
+
/**
|
|
8999
|
+
* Section payload; present when the analysis ran.
|
|
9000
|
+
*/
|
|
9001
|
+
data?: {
|
|
9002
|
+
[k: string]: unknown
|
|
9003
|
+
}
|
|
8218
9004
|
}
|
|
8219
9005
|
/**
|
|
8220
9006
|
* Result of tracing an export: why it is considered used or unused.
|
|
@@ -8228,6 +9014,7 @@ file: string
|
|
|
8228
9014
|
* The export name being traced.
|
|
8229
9015
|
*/
|
|
8230
9016
|
export_name: string
|
|
9017
|
+
namespace?: SemanticNamespace
|
|
8231
9018
|
/**
|
|
8232
9019
|
* Whether the file is reachable from an entry point.
|
|
8233
9020
|
*/
|
|
@@ -8484,6 +9271,14 @@ token_count: number
|
|
|
8484
9271
|
* Number of lines in the duplicated block.
|
|
8485
9272
|
*/
|
|
8486
9273
|
line_count: number
|
|
9274
|
+
/**
|
|
9275
|
+
* Maximum directory-tree or same-file line distance between instances.
|
|
9276
|
+
*/
|
|
9277
|
+
spread: number
|
|
9278
|
+
/**
|
|
9279
|
+
* Lowest all-pairs similarity for a near-miss clone group.
|
|
9280
|
+
*/
|
|
9281
|
+
similarity?: number
|
|
8487
9282
|
/**
|
|
8488
9283
|
* Root-relative clone instances in this group.
|
|
8489
9284
|
*/
|
|
@@ -8631,27 +9426,59 @@ meta: ReviewEnvelopeMeta
|
|
|
8631
9426
|
* Summary block on [`ReviewEnvelopeOutput`].
|
|
8632
9427
|
*/
|
|
8633
9428
|
export interface ReviewEnvelopeSummary {
|
|
9429
|
+
/**
|
|
9430
|
+
* Summary comment body markdown.
|
|
9431
|
+
*/
|
|
8634
9432
|
body: string
|
|
9433
|
+
/**
|
|
9434
|
+
* Stable fingerprint of the summary body, used for sticky updates.
|
|
9435
|
+
*/
|
|
8635
9436
|
fingerprint: string
|
|
8636
9437
|
}
|
|
8637
9438
|
/**
|
|
8638
9439
|
* GitHub pull-request review comment.
|
|
8639
9440
|
*/
|
|
8640
9441
|
export interface GitHubReviewComment {
|
|
9442
|
+
/**
|
|
9443
|
+
* File path relative to the repository root.
|
|
9444
|
+
*/
|
|
8641
9445
|
path: string
|
|
9446
|
+
/**
|
|
9447
|
+
* 1-based line on the new side of the diff.
|
|
9448
|
+
*/
|
|
8642
9449
|
line: number
|
|
8643
9450
|
side: GitHubReviewSide
|
|
9451
|
+
/**
|
|
9452
|
+
* Comment body markdown, fingerprint marker included.
|
|
9453
|
+
*/
|
|
8644
9454
|
body: string
|
|
9455
|
+
/**
|
|
9456
|
+
* Stable finding fingerprint used for comment reconciliation.
|
|
9457
|
+
*/
|
|
8645
9458
|
fingerprint: string
|
|
9459
|
+
/**
|
|
9460
|
+
* True when the body was cut to fit the provider size limit; omitted
|
|
9461
|
+
* when false.
|
|
9462
|
+
*/
|
|
8646
9463
|
truncated?: boolean
|
|
8647
9464
|
}
|
|
8648
9465
|
/**
|
|
8649
9466
|
* GitLab merge-request discussion comment.
|
|
8650
9467
|
*/
|
|
8651
9468
|
export interface GitLabReviewComment {
|
|
9469
|
+
/**
|
|
9470
|
+
* Comment body markdown, fingerprint marker included.
|
|
9471
|
+
*/
|
|
8652
9472
|
body: string
|
|
8653
9473
|
position: GitLabReviewPosition
|
|
9474
|
+
/**
|
|
9475
|
+
* Stable finding fingerprint used for comment reconciliation.
|
|
9476
|
+
*/
|
|
8654
9477
|
fingerprint: string
|
|
9478
|
+
/**
|
|
9479
|
+
* True when the body was cut to fit the provider size limit; omitted
|
|
9480
|
+
* when false.
|
|
9481
|
+
*/
|
|
8655
9482
|
truncated?: boolean
|
|
8656
9483
|
}
|
|
8657
9484
|
/**
|
|
@@ -8659,12 +9486,31 @@ truncated?: boolean
|
|
|
8659
9486
|
* merge-request discussion-position API.
|
|
8660
9487
|
*/
|
|
8661
9488
|
export interface GitLabReviewPosition {
|
|
9489
|
+
/**
|
|
9490
|
+
* Merge-base SHA of the MR diff; absent when refs were not supplied.
|
|
9491
|
+
*/
|
|
8662
9492
|
base_sha?: (string | null)
|
|
9493
|
+
/**
|
|
9494
|
+
* First commit SHA of the MR diff; absent when refs were not supplied.
|
|
9495
|
+
*/
|
|
8663
9496
|
start_sha?: (string | null)
|
|
9497
|
+
/**
|
|
9498
|
+
* Head commit SHA of the MR diff; absent when refs were not supplied.
|
|
9499
|
+
*/
|
|
8664
9500
|
head_sha?: (string | null)
|
|
8665
9501
|
position_type: GitLabReviewPositionType
|
|
9502
|
+
/**
|
|
9503
|
+
* Pre-rename path when the diff renamed the file, else the same as
|
|
9504
|
+
* `new_path`.
|
|
9505
|
+
*/
|
|
8666
9506
|
old_path: string
|
|
9507
|
+
/**
|
|
9508
|
+
* File path on the new side of the diff.
|
|
9509
|
+
*/
|
|
8667
9510
|
new_path: string
|
|
9511
|
+
/**
|
|
9512
|
+
* 1-based line on the new side of the diff.
|
|
9513
|
+
*/
|
|
8668
9514
|
new_line: number
|
|
8669
9515
|
}
|
|
8670
9516
|
/**
|
|
@@ -8684,21 +9530,69 @@ review_id?: (ReviewId | null)
|
|
|
8684
9530
|
export interface ReviewReconcileOutput {
|
|
8685
9531
|
schema: ReviewReconcileSchema
|
|
8686
9532
|
provider: ReviewProvider
|
|
9533
|
+
/**
|
|
9534
|
+
* PR / MR reference that was reconciled, when one was resolved.
|
|
9535
|
+
*/
|
|
8687
9536
|
target?: (string | null)
|
|
9537
|
+
/**
|
|
9538
|
+
* True when no provider mutations were performed.
|
|
9539
|
+
*/
|
|
8688
9540
|
dry_run: boolean
|
|
9541
|
+
/**
|
|
9542
|
+
* Inline comments in the review envelope being reconciled.
|
|
9543
|
+
*/
|
|
8689
9544
|
comments: number
|
|
9545
|
+
/**
|
|
9546
|
+
* Distinct fingerprints in the current run's findings.
|
|
9547
|
+
*/
|
|
8690
9548
|
current_fingerprints: number
|
|
9549
|
+
/**
|
|
9550
|
+
* Distinct fingerprints found in existing comments.
|
|
9551
|
+
*/
|
|
8691
9552
|
existing_fingerprints: number
|
|
9553
|
+
/**
|
|
9554
|
+
* Fingerprints present in the current run but not yet commented.
|
|
9555
|
+
*/
|
|
8692
9556
|
new_fingerprints: number
|
|
9557
|
+
/**
|
|
9558
|
+
* Fingerprints commented earlier whose findings no longer exist.
|
|
9559
|
+
*/
|
|
8693
9560
|
stale_fingerprints: number
|
|
9561
|
+
/**
|
|
9562
|
+
* The new fingerprints themselves.
|
|
9563
|
+
*/
|
|
8694
9564
|
new: string[]
|
|
9565
|
+
/**
|
|
9566
|
+
* The stale fingerprints themselves.
|
|
9567
|
+
*/
|
|
8695
9568
|
stale: string[]
|
|
9569
|
+
/**
|
|
9570
|
+
* Non-fatal provider API warning encountered during reconciliation.
|
|
9571
|
+
*/
|
|
8696
9572
|
provider_warning?: (string | null)
|
|
9573
|
+
/**
|
|
9574
|
+
* Resolution replies posted to stale comment threads.
|
|
9575
|
+
*/
|
|
8697
9576
|
resolution_comments_posted: number
|
|
9577
|
+
/**
|
|
9578
|
+
* Stale discussion threads resolved (GitLab).
|
|
9579
|
+
*/
|
|
8698
9580
|
threads_resolved: number
|
|
9581
|
+
/**
|
|
9582
|
+
* Remediation guidance when the apply loop stopped before finishing.
|
|
9583
|
+
*/
|
|
8699
9584
|
apply_hint?: (string | null)
|
|
9585
|
+
/**
|
|
9586
|
+
* Errors encountered while applying provider mutations.
|
|
9587
|
+
*/
|
|
8700
9588
|
apply_errors: string[]
|
|
9589
|
+
/**
|
|
9590
|
+
* Fingerprints whose provider mutation failed.
|
|
9591
|
+
*/
|
|
8701
9592
|
failed_fingerprints?: string[]
|
|
9593
|
+
/**
|
|
9594
|
+
* Fingerprints left unprocessed after a failure aborted the apply loop.
|
|
9595
|
+
*/
|
|
8702
9596
|
unapplied_fingerprints?: string[]
|
|
8703
9597
|
}
|
|
8704
9598
|
/**
|
|
@@ -8707,43 +9601,135 @@ unapplied_fingerprints?: string[]
|
|
|
8707
9601
|
export interface CoverageSetupOutput {
|
|
8708
9602
|
schema_version: CoverageSetupSchemaVersion
|
|
8709
9603
|
framework_detected: CoverageSetupFramework
|
|
9604
|
+
/**
|
|
9605
|
+
* Package manager detected from lockfiles, when one was found.
|
|
9606
|
+
*/
|
|
8710
9607
|
package_manager?: (CoverageSetupPackageManager | null)
|
|
9608
|
+
/**
|
|
9609
|
+
* Runtimes the instrumentation must cover at the project root.
|
|
9610
|
+
*/
|
|
8711
9611
|
runtime_targets: CoverageSetupRuntimeTarget[]
|
|
9612
|
+
/**
|
|
9613
|
+
* Per-member setup guidance for workspace projects.
|
|
9614
|
+
*/
|
|
8712
9615
|
members: CoverageSetupMember[]
|
|
8713
|
-
|
|
9616
|
+
/**
|
|
9617
|
+
* Coverage config that was written to disk, when setup wrote one.
|
|
9618
|
+
*/
|
|
9619
|
+
config_written?: {
|
|
9620
|
+
[k: string]: unknown
|
|
9621
|
+
}
|
|
9622
|
+
/**
|
|
9623
|
+
* Shell commands the user should run to complete setup.
|
|
9624
|
+
*/
|
|
8714
9625
|
commands: string[]
|
|
9626
|
+
/**
|
|
9627
|
+
* Files the user must edit by hand, with reasons.
|
|
9628
|
+
*/
|
|
8715
9629
|
files_to_edit: CoverageSetupFileToEdit[]
|
|
9630
|
+
/**
|
|
9631
|
+
* Ready-to-paste code snippets for the files to edit.
|
|
9632
|
+
*/
|
|
8716
9633
|
snippets: CoverageSetupSnippet[]
|
|
9634
|
+
/**
|
|
9635
|
+
* Dockerfile additions needed for containerized capture, when relevant.
|
|
9636
|
+
*/
|
|
8717
9637
|
dockerfile_snippet?: (string | null)
|
|
9638
|
+
/**
|
|
9639
|
+
* Ordered human-readable follow-up instructions.
|
|
9640
|
+
*/
|
|
8718
9641
|
next_steps: string[]
|
|
9642
|
+
/**
|
|
9643
|
+
* Non-fatal problems encountered during detection.
|
|
9644
|
+
*/
|
|
8719
9645
|
warnings: string[]
|
|
8720
|
-
|
|
9646
|
+
/**
|
|
9647
|
+
* `_meta` block with docs and field definitions, when requested.
|
|
9648
|
+
*/
|
|
9649
|
+
_meta?: {
|
|
9650
|
+
[k: string]: unknown
|
|
8721
9651
|
}
|
|
9652
|
+
}
|
|
9653
|
+
/**
|
|
9654
|
+
* Per-workspace-member setup guidance inside [`CoverageSetupOutput::members`].
|
|
9655
|
+
*/
|
|
8722
9656
|
export interface CoverageSetupMember {
|
|
9657
|
+
/**
|
|
9658
|
+
* Package name of the workspace member.
|
|
9659
|
+
*/
|
|
8723
9660
|
name: string
|
|
9661
|
+
/**
|
|
9662
|
+
* Member path relative to the workspace root.
|
|
9663
|
+
*/
|
|
8724
9664
|
path: string
|
|
8725
9665
|
framework_detected: CoverageSetupFramework
|
|
9666
|
+
/**
|
|
9667
|
+
* Package manager detected for this member, when one was found.
|
|
9668
|
+
*/
|
|
8726
9669
|
package_manager?: (CoverageSetupPackageManager | null)
|
|
9670
|
+
/**
|
|
9671
|
+
* Runtimes the instrumentation must cover for this member.
|
|
9672
|
+
*/
|
|
8727
9673
|
runtime_targets: CoverageSetupRuntimeTarget[]
|
|
9674
|
+
/**
|
|
9675
|
+
* Files the user must edit by hand, with reasons.
|
|
9676
|
+
*/
|
|
8728
9677
|
files_to_edit: CoverageSetupFileToEdit[]
|
|
9678
|
+
/**
|
|
9679
|
+
* Ready-to-paste code snippets for the files to edit.
|
|
9680
|
+
*/
|
|
8729
9681
|
snippets: CoverageSetupSnippet[]
|
|
9682
|
+
/**
|
|
9683
|
+
* Dockerfile additions needed for containerized capture, when relevant.
|
|
9684
|
+
*/
|
|
8730
9685
|
dockerfile_snippet?: (string | null)
|
|
9686
|
+
/**
|
|
9687
|
+
* Non-fatal problems encountered during detection.
|
|
9688
|
+
*/
|
|
8731
9689
|
warnings: string[]
|
|
8732
9690
|
}
|
|
9691
|
+
/**
|
|
9692
|
+
* One manual edit the user must make to wire up coverage capture.
|
|
9693
|
+
*/
|
|
8733
9694
|
export interface CoverageSetupFileToEdit {
|
|
9695
|
+
/**
|
|
9696
|
+
* File path relative to the project root.
|
|
9697
|
+
*/
|
|
8734
9698
|
path: string
|
|
9699
|
+
/**
|
|
9700
|
+
* Why the file needs editing.
|
|
9701
|
+
*/
|
|
8735
9702
|
reason: string
|
|
8736
9703
|
}
|
|
9704
|
+
/**
|
|
9705
|
+
* Ready-to-paste code snippet accompanying a file edit.
|
|
9706
|
+
*/
|
|
8737
9707
|
export interface CoverageSetupSnippet {
|
|
9708
|
+
/**
|
|
9709
|
+
* Short description of what the snippet does.
|
|
9710
|
+
*/
|
|
8738
9711
|
label: string
|
|
9712
|
+
/**
|
|
9713
|
+
* File path the snippet belongs in.
|
|
9714
|
+
*/
|
|
8739
9715
|
path: string
|
|
9716
|
+
/**
|
|
9717
|
+
* The snippet source text.
|
|
9718
|
+
*/
|
|
8740
9719
|
content: string
|
|
8741
9720
|
}
|
|
9721
|
+
/**
|
|
9722
|
+
* Envelope emitted by `fallow coverage analyze --format json`.
|
|
9723
|
+
*/
|
|
8742
9724
|
export interface CoverageAnalyzeOutput {
|
|
8743
9725
|
schema_version: CoverageAnalyzeSchemaVersion
|
|
8744
9726
|
version: ToolVersion
|
|
8745
9727
|
elapsed_ms: ElapsedMs
|
|
8746
9728
|
runtime_coverage: RuntimeCoverageReport
|
|
9729
|
+
/**
|
|
9730
|
+
* `_meta` block with docs and metric definitions, when `--explain` was
|
|
9731
|
+
* passed.
|
|
9732
|
+
*/
|
|
8747
9733
|
_meta?: (Meta | null)
|
|
8748
9734
|
}
|
|
8749
9735
|
/**
|
|
@@ -8759,12 +9745,33 @@ boundaries: BoundariesListing
|
|
|
8759
9745
|
* `boundaries` block carried by [`ListBoundariesOutput`].
|
|
8760
9746
|
*/
|
|
8761
9747
|
export interface BoundariesListing {
|
|
9748
|
+
/**
|
|
9749
|
+
* Whether the project configures architecture boundaries at all.
|
|
9750
|
+
*/
|
|
8762
9751
|
configured: boolean
|
|
9752
|
+
/**
|
|
9753
|
+
* Number of entries in `zones`.
|
|
9754
|
+
*/
|
|
8763
9755
|
zone_count: number
|
|
9756
|
+
/**
|
|
9757
|
+
* Boundary zones after preset and `autoDiscover` expansion.
|
|
9758
|
+
*/
|
|
8764
9759
|
zones: BoundariesListZone[]
|
|
9760
|
+
/**
|
|
9761
|
+
* Number of entries in `rules`.
|
|
9762
|
+
*/
|
|
8765
9763
|
rule_count: number
|
|
9764
|
+
/**
|
|
9765
|
+
* Import rules operating on expanded zone names.
|
|
9766
|
+
*/
|
|
8766
9767
|
rules: BoundariesListRule[]
|
|
9768
|
+
/**
|
|
9769
|
+
* Number of entries in `logical_groups`.
|
|
9770
|
+
*/
|
|
8767
9771
|
logical_group_count: number
|
|
9772
|
+
/**
|
|
9773
|
+
* Pre-expansion `autoDiscover` logical groups.
|
|
9774
|
+
*/
|
|
8768
9775
|
logical_groups: BoundariesListLogicalGroup[]
|
|
8769
9776
|
}
|
|
8770
9777
|
/**
|
|
@@ -8772,8 +9779,17 @@ logical_groups: BoundariesListLogicalGroup[]
|
|
|
8772
9779
|
* classifies files into a single zone via glob patterns.
|
|
8773
9780
|
*/
|
|
8774
9781
|
export interface BoundariesListZone {
|
|
9782
|
+
/**
|
|
9783
|
+
* Zone name referenced by rules.
|
|
9784
|
+
*/
|
|
8775
9785
|
name: string
|
|
9786
|
+
/**
|
|
9787
|
+
* Glob patterns that classify files into the zone.
|
|
9788
|
+
*/
|
|
8776
9789
|
patterns: string[]
|
|
9790
|
+
/**
|
|
9791
|
+
* Number of analyzable files the zone matched.
|
|
9792
|
+
*/
|
|
8777
9793
|
file_count: number
|
|
8778
9794
|
}
|
|
8779
9795
|
/**
|
|
@@ -8783,7 +9799,13 @@ file_count: number
|
|
|
8783
9799
|
* corresponding [`BoundariesListLogicalGroup::authored_rule`].
|
|
8784
9800
|
*/
|
|
8785
9801
|
export interface BoundariesListRule {
|
|
9802
|
+
/**
|
|
9803
|
+
* Zone the rule constrains imports from.
|
|
9804
|
+
*/
|
|
8786
9805
|
from: string
|
|
9806
|
+
/**
|
|
9807
|
+
* Zone names the `from` zone may import.
|
|
9808
|
+
*/
|
|
8787
9809
|
allow: string[]
|
|
8788
9810
|
}
|
|
8789
9811
|
/**
|
|
@@ -8793,16 +9815,46 @@ allow: string[]
|
|
|
8793
9815
|
* [`BoundariesListing::zones`].
|
|
8794
9816
|
*/
|
|
8795
9817
|
export interface BoundariesListLogicalGroup {
|
|
9818
|
+
/**
|
|
9819
|
+
* User-authored parent zone name.
|
|
9820
|
+
*/
|
|
8796
9821
|
name: string
|
|
9822
|
+
/**
|
|
9823
|
+
* Child zone names produced by discovery.
|
|
9824
|
+
*/
|
|
8797
9825
|
children: string[]
|
|
9826
|
+
/**
|
|
9827
|
+
* Authored `autoDiscover` paths.
|
|
9828
|
+
*/
|
|
8798
9829
|
auto_discover: string[]
|
|
8799
9830
|
status: LogicalGroupStatus
|
|
9831
|
+
/**
|
|
9832
|
+
* Index of the authored entry in the pre-expansion `zones[]` config.
|
|
9833
|
+
*/
|
|
8800
9834
|
source_zone_index: number
|
|
9835
|
+
/**
|
|
9836
|
+
* Files matched across the group's zones.
|
|
9837
|
+
*/
|
|
8801
9838
|
file_count: number
|
|
9839
|
+
/**
|
|
9840
|
+
* User's pre-expansion rule keyed on the parent name, when authored.
|
|
9841
|
+
*/
|
|
8802
9842
|
authored_rule?: (AuthoredRule | null)
|
|
9843
|
+
/**
|
|
9844
|
+
* Zone that keeps the parent's own patterns when the parent kept any.
|
|
9845
|
+
*/
|
|
8803
9846
|
fallback_zone?: (string | null)
|
|
9847
|
+
/**
|
|
9848
|
+
* `zones[]` indices of duplicate parents merged into this group.
|
|
9849
|
+
*/
|
|
8804
9850
|
merged_from?: (number[] | null)
|
|
9851
|
+
/**
|
|
9852
|
+
* Authored parent `root`, when one was declared.
|
|
9853
|
+
*/
|
|
8805
9854
|
original_zone_root?: (string | null)
|
|
9855
|
+
/**
|
|
9856
|
+
* Per-child indices into the pre-expansion `zones[]` config.
|
|
9857
|
+
*/
|
|
8806
9858
|
child_source_indices?: number[]
|
|
8807
9859
|
}
|
|
8808
9860
|
/**
|
|
@@ -8872,7 +9924,7 @@ is_internal_dependency: boolean
|
|
|
8872
9924
|
* documents the field and serde populates it natively.
|
|
8873
9925
|
*/
|
|
8874
9926
|
export interface HealthOutput {
|
|
8875
|
-
schema_version:
|
|
9927
|
+
schema_version: HealthSchemaVersion
|
|
8876
9928
|
version: ToolVersion
|
|
8877
9929
|
elapsed_ms: ElapsedMs
|
|
8878
9930
|
/**
|
|
@@ -8996,9 +10048,21 @@ styling_health?: (StylingHealth | null)
|
|
|
8996
10048
|
* run is byte-unchanged.
|
|
8997
10049
|
*/
|
|
8998
10050
|
styling_findings?: StylingFinding[]
|
|
10051
|
+
/**
|
|
10052
|
+
* Grouping mode when `--group-by` was passed.
|
|
10053
|
+
*/
|
|
8999
10054
|
grouped_by?: (GroupByMode | null)
|
|
10055
|
+
/**
|
|
10056
|
+
* Per-bucket recomputed metrics; present only in grouped output.
|
|
10057
|
+
*/
|
|
9000
10058
|
groups?: (HealthGroup[] | null)
|
|
10059
|
+
/**
|
|
10060
|
+
* `_meta` block with metric definitions, when `--explain` was passed.
|
|
10061
|
+
*/
|
|
9001
10062
|
_meta?: (Meta | null)
|
|
10063
|
+
/**
|
|
10064
|
+
* Workspace-discovery diagnostics surfaced during config load.
|
|
10065
|
+
*/
|
|
9002
10066
|
workspace_diagnostics?: WorkspaceDiagnostic[]
|
|
9003
10067
|
/**
|
|
9004
10068
|
* Read-only follow-up commands computed from this run's findings. See
|
|
@@ -9106,7 +10170,7 @@ actions_meta?: (HealthActionsMeta | null)
|
|
|
9106
10170
|
* internals continue to migrate out of CLI/API-specific crates.
|
|
9107
10171
|
*/
|
|
9108
10172
|
export interface DupesOutput {
|
|
9109
|
-
schema_version:
|
|
10173
|
+
schema_version: DupesSchemaVersion
|
|
9110
10174
|
version: ToolVersion
|
|
9111
10175
|
elapsed_ms: ElapsedMs
|
|
9112
10176
|
/**
|
|
@@ -9128,8 +10192,17 @@ clone_families: CloneFamilyFinding[]
|
|
|
9128
10192
|
*/
|
|
9129
10193
|
mirrored_directories?: MirroredDirectory[]
|
|
9130
10194
|
stats: DuplicationStats
|
|
10195
|
+
/**
|
|
10196
|
+
* Grouping mode when `--group-by` was passed.
|
|
10197
|
+
*/
|
|
9131
10198
|
grouped_by?: (GroupByMode | null)
|
|
10199
|
+
/**
|
|
10200
|
+
* Total finding count across all groups; present only in grouped output.
|
|
10201
|
+
*/
|
|
9132
10202
|
total_issues?: (number | null)
|
|
10203
|
+
/**
|
|
10204
|
+
* Grouped findings; present only in grouped output.
|
|
10205
|
+
*/
|
|
9133
10206
|
groups?: (DuplicationGroup[] | null)
|
|
9134
10207
|
/**
|
|
9135
10208
|
* `_meta` block with metric / rule definitions, emitted when `--explain`
|
|
@@ -9196,6 +10269,10 @@ token_count: number
|
|
|
9196
10269
|
* Number of source lines in the clone group.
|
|
9197
10270
|
*/
|
|
9198
10271
|
line_count: number
|
|
10272
|
+
/**
|
|
10273
|
+
* Lowest all-pairs similarity for a near-miss clone group.
|
|
10274
|
+
*/
|
|
10275
|
+
similarity?: number
|
|
9199
10276
|
/**
|
|
9200
10277
|
* Each instance carries its own `owner` field alongside the standard
|
|
9201
10278
|
* CloneInstance shape.
|
|
@@ -9208,6 +10285,10 @@ instances: AttributedInstance[]
|
|
|
9208
10285
|
* `clone_groups[].fingerprint` for the same clone.
|
|
9209
10286
|
*/
|
|
9210
10287
|
fingerprint: string
|
|
10288
|
+
/**
|
|
10289
|
+
* Maximum directory-tree or same-file line distance between instances.
|
|
10290
|
+
*/
|
|
10291
|
+
spread: number
|
|
9211
10292
|
/**
|
|
9212
10293
|
* Suggested next steps. Always emitted.
|
|
9213
10294
|
*/
|
|
@@ -9262,12 +10343,22 @@ owner: string
|
|
|
9262
10343
|
* `CheckOutput` body, plus per-group `key` / `owners` / `total_issues`.
|
|
9263
10344
|
*/
|
|
9264
10345
|
export interface CheckGroupedOutput {
|
|
9265
|
-
schema_version:
|
|
10346
|
+
schema_version: CheckSchemaVersion
|
|
9266
10347
|
version: ToolVersion
|
|
9267
10348
|
elapsed_ms: ElapsedMs
|
|
9268
10349
|
grouped_by: GroupByMode
|
|
10350
|
+
/**
|
|
10351
|
+
* Total findings across all groups.
|
|
10352
|
+
*/
|
|
9269
10353
|
total_issues: number
|
|
10354
|
+
/**
|
|
10355
|
+
* One bucket per resolver key.
|
|
10356
|
+
*/
|
|
9270
10357
|
groups: CheckGroupedEntry[]
|
|
10358
|
+
/**
|
|
10359
|
+
* `_meta` block with docs and rule definitions, when `--explain` was
|
|
10360
|
+
* passed.
|
|
10361
|
+
*/
|
|
9271
10362
|
_meta?: (Meta | null)
|
|
9272
10363
|
/**
|
|
9273
10364
|
* Diagnostics collected for the full analysis before issue grouping.
|
|
@@ -9286,8 +10377,17 @@ next_steps?: NextStep[]
|
|
|
9286
10377
|
* `AnalysisResults`.
|
|
9287
10378
|
*/
|
|
9288
10379
|
export interface CheckGroupedEntry {
|
|
10380
|
+
/**
|
|
10381
|
+
* Resolver key: team name, directory prefix, package name, or section.
|
|
10382
|
+
*/
|
|
9289
10383
|
key: string
|
|
10384
|
+
/**
|
|
10385
|
+
* Owners of a GitLab CODEOWNERS section; present for section grouping.
|
|
10386
|
+
*/
|
|
9290
10387
|
owners?: (string[] | null)
|
|
10388
|
+
/**
|
|
10389
|
+
* Findings in this group.
|
|
10390
|
+
*/
|
|
9291
10391
|
total_issues: number
|
|
9292
10392
|
/**
|
|
9293
10393
|
* Files not reachable from any entry point. Wrapped in
|
|
@@ -9622,10 +10722,23 @@ duplicate_prop_shapes?: DuplicatePropShapeFinding[]
|
|
|
9622
10722
|
*/
|
|
9623
10723
|
export interface ImpactReport {
|
|
9624
10724
|
schema_version: ImpactReportSchemaVersion
|
|
10725
|
+
/**
|
|
10726
|
+
* Whether impact tracking is active for this project.
|
|
10727
|
+
*/
|
|
9625
10728
|
enabled: boolean
|
|
9626
10729
|
enabled_source: EnabledSource
|
|
10730
|
+
/**
|
|
10731
|
+
* Number of recorded runs in the store.
|
|
10732
|
+
*/
|
|
9627
10733
|
record_count: number
|
|
10734
|
+
/**
|
|
10735
|
+
* `_meta` block with docs and field definitions, when `--explain` was
|
|
10736
|
+
* passed.
|
|
10737
|
+
*/
|
|
9628
10738
|
_meta?: (Meta | null)
|
|
10739
|
+
/**
|
|
10740
|
+
* Timestamp of the earliest recorded run; absent with no records.
|
|
10741
|
+
*/
|
|
9629
10742
|
first_recorded?: (string | null)
|
|
9630
10743
|
/**
|
|
9631
10744
|
* Git SHA of the most recent recorded run, so a consumer can tell which
|
|
@@ -9645,6 +10758,8 @@ latest_git_sha?: (string | null)
|
|
|
9645
10758
|
surfacing?: (ImpactCounts | null)
|
|
9646
10759
|
/**
|
|
9647
10760
|
* Trend between the two most recent records. None until two records exist.
|
|
10761
|
+
* Trend between the two most recent changed-file records. None until two
|
|
10762
|
+
* records exist.
|
|
9648
10763
|
*/
|
|
9649
10764
|
trend?: (TrendSummary | null)
|
|
9650
10765
|
/**
|
|
@@ -9660,6 +10775,9 @@ project_surfacing?: (ImpactCounts | null)
|
|
|
9660
10775
|
* `trend`. None until two full `fallow` runs exist. v1.6.
|
|
9661
10776
|
*/
|
|
9662
10777
|
project_trend?: (TrendSummary | null)
|
|
10778
|
+
/**
|
|
10779
|
+
* Lifetime count of commit-gate containment events.
|
|
10780
|
+
*/
|
|
9663
10781
|
containment_count: number
|
|
9664
10782
|
/**
|
|
9665
10783
|
* Most recent containment events (newest last), capped for display.
|
|
@@ -9703,9 +10821,21 @@ explicit_decision: boolean
|
|
|
9703
10821
|
* Per-category issue counts captured at a recorded run.
|
|
9704
10822
|
*/
|
|
9705
10823
|
export interface ImpactCounts {
|
|
10824
|
+
/**
|
|
10825
|
+
* Sum of the category counts.
|
|
10826
|
+
*/
|
|
9706
10827
|
total_issues: number
|
|
10828
|
+
/**
|
|
10829
|
+
* Dead-code findings.
|
|
10830
|
+
*/
|
|
9707
10831
|
dead_code: number
|
|
10832
|
+
/**
|
|
10833
|
+
* Complexity findings.
|
|
10834
|
+
*/
|
|
9708
10835
|
complexity: number
|
|
10836
|
+
/**
|
|
10837
|
+
* Duplication findings.
|
|
10838
|
+
*/
|
|
9709
10839
|
duplication: number
|
|
9710
10840
|
}
|
|
9711
10841
|
/**
|
|
@@ -9717,15 +10847,30 @@ direction: ImpactTrendDirection
|
|
|
9717
10847
|
* Signed delta in total issues, current minus previous.
|
|
9718
10848
|
*/
|
|
9719
10849
|
total_delta: number
|
|
10850
|
+
/**
|
|
10851
|
+
* Total issues in the earlier run.
|
|
10852
|
+
*/
|
|
9720
10853
|
previous_total: number
|
|
10854
|
+
/**
|
|
10855
|
+
* Total issues in the later run.
|
|
10856
|
+
*/
|
|
9721
10857
|
current_total: number
|
|
9722
10858
|
}
|
|
9723
10859
|
/**
|
|
9724
10860
|
* A commit-gate containment event recorded by `fallow impact`.
|
|
9725
10861
|
*/
|
|
9726
10862
|
export interface ContainmentEvent {
|
|
10863
|
+
/**
|
|
10864
|
+
* Timestamp when the commit gate blocked the commit.
|
|
10865
|
+
*/
|
|
9727
10866
|
blocked_at: string
|
|
10867
|
+
/**
|
|
10868
|
+
* Timestamp when a later run passed clean.
|
|
10869
|
+
*/
|
|
9728
10870
|
cleared_at: string
|
|
10871
|
+
/**
|
|
10872
|
+
* Abbreviated SHA of the cleared commit, when in a git repo.
|
|
10873
|
+
*/
|
|
9729
10874
|
git_sha?: (string | null)
|
|
9730
10875
|
blocked_counts: ImpactCounts
|
|
9731
10876
|
}
|
|
@@ -9733,10 +10878,25 @@ blocked_counts: ImpactCounts
|
|
|
9733
10878
|
* A resolved or suppressed finding attribution event.
|
|
9734
10879
|
*/
|
|
9735
10880
|
export interface ResolutionEvent {
|
|
10881
|
+
/**
|
|
10882
|
+
* Finding kind that was resolved or suppressed, e.g. `unused-export`.
|
|
10883
|
+
*/
|
|
9736
10884
|
kind: string
|
|
10885
|
+
/**
|
|
10886
|
+
* Root-relative path of the resolved finding.
|
|
10887
|
+
*/
|
|
9737
10888
|
path: string
|
|
10889
|
+
/**
|
|
10890
|
+
* Symbol name, for symbol-level findings.
|
|
10891
|
+
*/
|
|
9738
10892
|
symbol?: (string | null)
|
|
10893
|
+
/**
|
|
10894
|
+
* Abbreviated SHA of the resolving commit, when in a git repo.
|
|
10895
|
+
*/
|
|
9739
10896
|
git_sha?: (string | null)
|
|
10897
|
+
/**
|
|
10898
|
+
* Timestamp the resolution was recorded.
|
|
10899
|
+
*/
|
|
9740
10900
|
timestamp: string
|
|
9741
10901
|
}
|
|
9742
10902
|
/**
|
|
@@ -9759,6 +10919,9 @@ tracked_count: number
|
|
|
9759
10919
|
*/
|
|
9760
10920
|
unreadable_count: number
|
|
9761
10921
|
totals: CrossRepoTotals
|
|
10922
|
+
/**
|
|
10923
|
+
* Per-project rows, one for each store with recorded history.
|
|
10924
|
+
*/
|
|
9762
10925
|
projects: CrossRepoProjectEntry[]
|
|
9763
10926
|
}
|
|
9764
10927
|
/**
|
|
@@ -9766,8 +10929,17 @@ projects: CrossRepoProjectEntry[]
|
|
|
9766
10929
|
* longer exists on disk: their past wins still count toward lifetime impact).
|
|
9767
10930
|
*/
|
|
9768
10931
|
export interface CrossRepoTotals {
|
|
10932
|
+
/**
|
|
10933
|
+
* Lifetime genuinely-resolved findings across projects.
|
|
10934
|
+
*/
|
|
9769
10935
|
resolved_total: number
|
|
10936
|
+
/**
|
|
10937
|
+
* Lifetime `fallow-ignore` suppressions across projects.
|
|
10938
|
+
*/
|
|
9770
10939
|
suppressed_total: number
|
|
10940
|
+
/**
|
|
10941
|
+
* Lifetime commit-gate containment events across projects.
|
|
10942
|
+
*/
|
|
9771
10943
|
containment_count: number
|
|
9772
10944
|
/**
|
|
9773
10945
|
* Sum of whole-project issue totals across projects that have a full-run
|
|
@@ -9775,6 +10947,9 @@ containment_count: number
|
|
|
9775
10947
|
* snapshot).
|
|
9776
10948
|
*/
|
|
9777
10949
|
project_wide_issues: number
|
|
10950
|
+
/**
|
|
10951
|
+
* Projects that have recorded at least one full `fallow` run.
|
|
10952
|
+
*/
|
|
9778
10953
|
projects_with_baseline: number
|
|
9779
10954
|
}
|
|
9780
10955
|
/**
|
|
@@ -9862,10 +11037,16 @@ categories_include: (string[] | null)
|
|
|
9862
11037
|
*/
|
|
9863
11038
|
categories_exclude: (string[] | null)
|
|
9864
11039
|
}
|
|
11040
|
+
/**
|
|
11041
|
+
* Per-rule severity context inside [`SecurityOutputConfig::rules`].
|
|
11042
|
+
*/
|
|
9865
11043
|
export interface SecurityOutputRulesConfig {
|
|
9866
11044
|
security_client_server_leak: SecurityRuleSeverityConfig
|
|
9867
11045
|
security_sink: SecurityRuleSeverityConfig
|
|
9868
11046
|
}
|
|
11047
|
+
/**
|
|
11048
|
+
* Configured-versus-effective severity for one security rule.
|
|
11049
|
+
*/
|
|
9869
11050
|
export interface SecurityRuleSeverityConfig {
|
|
9870
11051
|
configured: Severity
|
|
9871
11052
|
effective: Severity
|
|
@@ -10373,8 +11554,17 @@ top_files_limit: number
|
|
|
10373
11554
|
* One sampled unresolved-callee row.
|
|
10374
11555
|
*/
|
|
10375
11556
|
export interface SecurityUnresolvedCalleeSample {
|
|
11557
|
+
/**
|
|
11558
|
+
* File path relative to the analysed root.
|
|
11559
|
+
*/
|
|
10376
11560
|
path: string
|
|
11561
|
+
/**
|
|
11562
|
+
* 1-based line of the skipped call site.
|
|
11563
|
+
*/
|
|
10377
11564
|
line: number
|
|
11565
|
+
/**
|
|
11566
|
+
* 1-based column of the skipped call site.
|
|
11567
|
+
*/
|
|
10378
11568
|
col: number
|
|
10379
11569
|
reason: SkippedSecurityCalleeReason
|
|
10380
11570
|
expression_kind: SkippedSecurityCalleeExpressionKind
|
|
@@ -10383,6 +11573,9 @@ expression_kind: SkippedSecurityCalleeExpressionKind
|
|
|
10383
11573
|
* Count of unresolved callees in one file.
|
|
10384
11574
|
*/
|
|
10385
11575
|
export interface SecurityUnresolvedCalleeTopFile {
|
|
11576
|
+
/**
|
|
11577
|
+
* File path relative to the analysed root.
|
|
11578
|
+
*/
|
|
10386
11579
|
path: string
|
|
10387
11580
|
/**
|
|
10388
11581
|
* Number of unresolved callees in this file.
|
|
@@ -10454,31 +11647,79 @@ attack_surface_entries: number
|
|
|
10454
11647
|
* Fixed severity counters for summary JSON.
|
|
10455
11648
|
*/
|
|
10456
11649
|
export interface SecuritySeverityCounts {
|
|
11650
|
+
/**
|
|
11651
|
+
* High-severity candidates.
|
|
11652
|
+
*/
|
|
10457
11653
|
high: number
|
|
11654
|
+
/**
|
|
11655
|
+
* Medium-severity candidates.
|
|
11656
|
+
*/
|
|
10458
11657
|
medium: number
|
|
11658
|
+
/**
|
|
11659
|
+
* Low-severity candidates.
|
|
11660
|
+
*/
|
|
10459
11661
|
low: number
|
|
10460
11662
|
}
|
|
10461
11663
|
/**
|
|
10462
11664
|
* Fixed reachability counters for summary JSON.
|
|
10463
11665
|
*/
|
|
10464
11666
|
export interface SecurityReachabilityCounts {
|
|
11667
|
+
/**
|
|
11668
|
+
* Candidates reachable from an entry point.
|
|
11669
|
+
*/
|
|
10465
11670
|
entry_reachable: number
|
|
11671
|
+
/**
|
|
11672
|
+
* Candidates reachable from an untrusted input source.
|
|
11673
|
+
*/
|
|
10466
11674
|
untrusted_source_reachable: number
|
|
11675
|
+
/**
|
|
11676
|
+
* Candidates where taint flows through a call argument.
|
|
11677
|
+
*/
|
|
10467
11678
|
arg_level: number
|
|
11679
|
+
/**
|
|
11680
|
+
* Candidates where taint is only module-level.
|
|
11681
|
+
*/
|
|
10468
11682
|
module_level: number
|
|
11683
|
+
/**
|
|
11684
|
+
* Candidates whose flow crosses a client/server boundary.
|
|
11685
|
+
*/
|
|
10469
11686
|
crosses_boundary: number
|
|
11687
|
+
/**
|
|
11688
|
+
* Candidates backed by a concrete taint source.
|
|
11689
|
+
*/
|
|
10470
11690
|
source_backed: number
|
|
10471
11691
|
}
|
|
10472
11692
|
/**
|
|
10473
11693
|
* Fixed runtime coverage counters for summary JSON.
|
|
10474
11694
|
*/
|
|
10475
11695
|
export interface SecurityRuntimeStateCounts {
|
|
11696
|
+
/**
|
|
11697
|
+
* Candidates on frequently executed runtime paths.
|
|
11698
|
+
*/
|
|
10476
11699
|
runtime_hot: number
|
|
11700
|
+
/**
|
|
11701
|
+
* Candidates on rarely executed runtime paths.
|
|
11702
|
+
*/
|
|
10477
11703
|
runtime_cold: number
|
|
11704
|
+
/**
|
|
11705
|
+
* Candidates on paths never seen executing.
|
|
11706
|
+
*/
|
|
10478
11707
|
never_executed: number
|
|
11708
|
+
/**
|
|
11709
|
+
* Candidates on low-traffic paths.
|
|
11710
|
+
*/
|
|
10479
11711
|
low_traffic: number
|
|
11712
|
+
/**
|
|
11713
|
+
* Candidates in files runtime coverage did not observe.
|
|
11714
|
+
*/
|
|
10480
11715
|
coverage_unavailable: number
|
|
11716
|
+
/**
|
|
11717
|
+
* Candidates whose runtime state could not be classified.
|
|
11718
|
+
*/
|
|
10481
11719
|
runtime_unknown: number
|
|
11720
|
+
/**
|
|
11721
|
+
* Candidates analysed without any runtime coverage data.
|
|
11722
|
+
*/
|
|
10482
11723
|
not_collected: number
|
|
10483
11724
|
}
|
|
10484
11725
|
/**
|
|
@@ -10507,11 +11748,29 @@ needs_human_review: {
|
|
|
10507
11748
|
* Aggregate counts for survivor rendering.
|
|
10508
11749
|
*/
|
|
10509
11750
|
export interface SecuritySurvivorsSummary {
|
|
11751
|
+
/**
|
|
11752
|
+
* Candidates in the input security report.
|
|
11753
|
+
*/
|
|
10510
11754
|
candidates: number
|
|
11755
|
+
/**
|
|
11756
|
+
* Verifier verdicts supplied.
|
|
11757
|
+
*/
|
|
10511
11758
|
verdicts: number
|
|
11759
|
+
/**
|
|
11760
|
+
* Candidates the verifier retained.
|
|
11761
|
+
*/
|
|
10512
11762
|
survivors: number
|
|
11763
|
+
/**
|
|
11764
|
+
* Candidates the verifier dismissed.
|
|
11765
|
+
*/
|
|
10513
11766
|
dismissed: number
|
|
11767
|
+
/**
|
|
11768
|
+
* Candidates the verifier flagged as ambiguous.
|
|
11769
|
+
*/
|
|
10514
11770
|
needs_human_review: number
|
|
11771
|
+
/**
|
|
11772
|
+
* Candidates without any verdict.
|
|
11773
|
+
*/
|
|
10515
11774
|
unverdicted: number
|
|
10516
11775
|
}
|
|
10517
11776
|
/**
|
|
@@ -10523,7 +11782,13 @@ export interface SecuritySurvivor {
|
|
|
10523
11782
|
*/
|
|
10524
11783
|
finding_id: string
|
|
10525
11784
|
verdict: SecurityVerifierVerdictStatus
|
|
11785
|
+
/**
|
|
11786
|
+
* Short machine-oriented verdict reason.
|
|
11787
|
+
*/
|
|
10526
11788
|
reason?: (string | null)
|
|
11789
|
+
/**
|
|
11790
|
+
* Longer free-form verdict explanation.
|
|
11791
|
+
*/
|
|
10527
11792
|
rationale?: (string | null)
|
|
10528
11793
|
/**
|
|
10529
11794
|
* Optional verifier-provided confidence or review priority.
|
|
@@ -10556,8 +11821,17 @@ groups: SecurityBlindSpotGroup[]
|
|
|
10556
11821
|
* Aggregate counts for blind-spot output.
|
|
10557
11822
|
*/
|
|
10558
11823
|
export interface SecurityBlindSpotsSummary {
|
|
11824
|
+
/**
|
|
11825
|
+
* Files containing at least one unresolved callee.
|
|
11826
|
+
*/
|
|
10559
11827
|
unresolved_edge_files: number
|
|
11828
|
+
/**
|
|
11829
|
+
* Total unresolved callee sites in the analysis.
|
|
11830
|
+
*/
|
|
10560
11831
|
unresolved_callee_sites: number
|
|
11832
|
+
/**
|
|
11833
|
+
* Callee sites captured in the bounded diagnostic sample.
|
|
11834
|
+
*/
|
|
10561
11835
|
sampled_callee_sites: number
|
|
10562
11836
|
}
|
|
10563
11837
|
/**
|
|
@@ -10583,6 +11857,9 @@ suggestion: string
|
|
|
10583
11857
|
* One file inside a blind-spot group.
|
|
10584
11858
|
*/
|
|
10585
11859
|
export interface SecurityBlindSpotFile {
|
|
11860
|
+
/**
|
|
11861
|
+
* File path relative to the analysed root.
|
|
11862
|
+
*/
|
|
10586
11863
|
path: string
|
|
10587
11864
|
/**
|
|
10588
11865
|
* Count in the bounded diagnostic sample.
|
|
@@ -10593,12 +11870,24 @@ sampled_count: number
|
|
|
10593
11870
|
* Bare `fallow --format json` envelope.
|
|
10594
11871
|
*/
|
|
10595
11872
|
export interface CombinedOutput {
|
|
10596
|
-
schema_version:
|
|
11873
|
+
schema_version: CombinedSchemaVersion
|
|
10597
11874
|
version: ToolVersion
|
|
10598
11875
|
elapsed_ms: ElapsedMs
|
|
11876
|
+
/**
|
|
11877
|
+
* Per-section `_meta` blocks, when `--explain` was passed.
|
|
11878
|
+
*/
|
|
10599
11879
|
_meta?: (CombinedMeta | null)
|
|
11880
|
+
/**
|
|
11881
|
+
* Dead-code section of the combined run.
|
|
11882
|
+
*/
|
|
10600
11883
|
check?: (CheckOutput | null)
|
|
11884
|
+
/**
|
|
11885
|
+
* Duplication section of the combined run.
|
|
11886
|
+
*/
|
|
10601
11887
|
dupes?: (DupesReportPayload | null)
|
|
11888
|
+
/**
|
|
11889
|
+
* Health section of the combined run.
|
|
11890
|
+
*/
|
|
10602
11891
|
health?: (HealthReport | null)
|
|
10603
11892
|
/**
|
|
10604
11893
|
* Read-only follow-up commands aggregated across the combined run's
|
|
@@ -10610,34 +11899,76 @@ next_steps?: NextStep[]
|
|
|
10610
11899
|
* Optional `_meta` block for [`CombinedOutput`].
|
|
10611
11900
|
*/
|
|
10612
11901
|
export interface CombinedMeta {
|
|
11902
|
+
/**
|
|
11903
|
+
* `_meta` block for the dead-code section.
|
|
11904
|
+
*/
|
|
10613
11905
|
check?: (Meta | null)
|
|
11906
|
+
/**
|
|
11907
|
+
* `_meta` block for the duplication section.
|
|
11908
|
+
*/
|
|
10614
11909
|
dupes?: (Meta | null)
|
|
11910
|
+
/**
|
|
11911
|
+
* `_meta` block for the health section.
|
|
11912
|
+
*/
|
|
10615
11913
|
health?: (Meta | null)
|
|
11914
|
+
/**
|
|
11915
|
+
* Telemetry identifiers for the run.
|
|
11916
|
+
*/
|
|
10616
11917
|
telemetry?: (TelemetryMeta | null)
|
|
10617
11918
|
}
|
|
10618
11919
|
/**
|
|
10619
11920
|
* Envelope emitted by `fallow flags --format json`.
|
|
10620
11921
|
*/
|
|
10621
11922
|
export interface FeatureFlagsOutput {
|
|
10622
|
-
schema_version:
|
|
11923
|
+
schema_version: FeatureFlagsSchemaVersion
|
|
10623
11924
|
version: ToolVersion
|
|
10624
11925
|
elapsed_ms: ElapsedMs
|
|
11926
|
+
/**
|
|
11927
|
+
* Detected feature-flag findings.
|
|
11928
|
+
*/
|
|
10625
11929
|
feature_flags: FeatureFlagFinding[]
|
|
11930
|
+
/**
|
|
11931
|
+
* Number of entries in `feature_flags`.
|
|
11932
|
+
*/
|
|
10626
11933
|
total_flags: number
|
|
11934
|
+
/**
|
|
11935
|
+
* `_meta` block; see [`FeatureFlagsMeta`].
|
|
11936
|
+
*/
|
|
10627
11937
|
_meta?: (FeatureFlagsMeta | null)
|
|
10628
11938
|
}
|
|
10629
11939
|
/**
|
|
10630
11940
|
* One feature flag finding in JSON output.
|
|
10631
11941
|
*/
|
|
10632
11942
|
export interface FeatureFlagFinding {
|
|
11943
|
+
/**
|
|
11944
|
+
* File path relative to the analysed root.
|
|
11945
|
+
*/
|
|
10633
11946
|
path: string
|
|
11947
|
+
/**
|
|
11948
|
+
* Detected flag identifier, e.g. the env var or SDK key name.
|
|
11949
|
+
*/
|
|
10634
11950
|
flag_name: string
|
|
10635
11951
|
kind: FeatureFlagKind
|
|
10636
11952
|
confidence: FeatureFlagConfidence
|
|
11953
|
+
/**
|
|
11954
|
+
* 1-based line of the flag usage.
|
|
11955
|
+
*/
|
|
10637
11956
|
line: number
|
|
11957
|
+
/**
|
|
11958
|
+
* 1-based column of the flag usage.
|
|
11959
|
+
*/
|
|
10638
11960
|
col: number
|
|
11961
|
+
/**
|
|
11962
|
+
* Suggested follow-up actions (investigate / suppress).
|
|
11963
|
+
*/
|
|
10639
11964
|
actions: FeatureFlagAction[]
|
|
11965
|
+
/**
|
|
11966
|
+
* Flag SDK the call belongs to, for SDK-call findings.
|
|
11967
|
+
*/
|
|
10640
11968
|
sdk_name?: (string | null)
|
|
11969
|
+
/**
|
|
11970
|
+
* Overlap with dead-code findings when the flag guards unused exports.
|
|
11971
|
+
*/
|
|
10641
11972
|
dead_code_overlap?: (FeatureFlagDeadCodeOverlap | null)
|
|
10642
11973
|
}
|
|
10643
11974
|
/**
|
|
@@ -10645,16 +11976,34 @@ dead_code_overlap?: (FeatureFlagDeadCodeOverlap | null)
|
|
|
10645
11976
|
*/
|
|
10646
11977
|
export interface FeatureFlagAction {
|
|
10647
11978
|
type: FeatureFlagActionType
|
|
11979
|
+
/**
|
|
11980
|
+
* Whether `fallow fix` can apply the action automatically.
|
|
11981
|
+
*/
|
|
10648
11982
|
auto_fixable: boolean
|
|
11983
|
+
/**
|
|
11984
|
+
* Human-readable action description.
|
|
11985
|
+
*/
|
|
10649
11986
|
description: string
|
|
11987
|
+
/**
|
|
11988
|
+
* Suppression comment to insert, for suppress actions.
|
|
11989
|
+
*/
|
|
10650
11990
|
comment?: (string | null)
|
|
10651
11991
|
}
|
|
10652
11992
|
/**
|
|
10653
11993
|
* Dead-code overlap block attached when a flag guards unused exports.
|
|
10654
11994
|
*/
|
|
10655
11995
|
export interface FeatureFlagDeadCodeOverlap {
|
|
11996
|
+
/**
|
|
11997
|
+
* Lines inside the flag-guarded region.
|
|
11998
|
+
*/
|
|
10656
11999
|
guarded_lines: number
|
|
12000
|
+
/**
|
|
12001
|
+
* Number of unused exports the flag guards.
|
|
12002
|
+
*/
|
|
10657
12003
|
dead_export_count: number
|
|
12004
|
+
/**
|
|
12005
|
+
* Names of the unused exports the flag guards.
|
|
12006
|
+
*/
|
|
10658
12007
|
dead_exports: string[]
|
|
10659
12008
|
}
|
|
10660
12009
|
/**
|
|
@@ -10679,25 +12028,49 @@ telemetry?: (TelemetryMeta | null)
|
|
|
10679
12028
|
* Feature flag explanatory metadata.
|
|
10680
12029
|
*/
|
|
10681
12030
|
export interface FeatureFlagsMetaDetails {
|
|
12031
|
+
/**
|
|
12032
|
+
* What the flags command reports.
|
|
12033
|
+
*/
|
|
10682
12034
|
description: string
|
|
10683
12035
|
kinds: FeatureFlagsKindMeta
|
|
10684
12036
|
confidence: FeatureFlagsConfidenceMeta
|
|
12037
|
+
/**
|
|
12038
|
+
* Public documentation URL for the flags command.
|
|
12039
|
+
*/
|
|
10685
12040
|
docs: string
|
|
10686
12041
|
}
|
|
10687
12042
|
/**
|
|
10688
12043
|
* Feature flag kind explanations.
|
|
10689
12044
|
*/
|
|
10690
12045
|
export interface FeatureFlagsKindMeta {
|
|
12046
|
+
/**
|
|
12047
|
+
* Explanation of the `environment_variable` kind.
|
|
12048
|
+
*/
|
|
10691
12049
|
environment_variable: string
|
|
12050
|
+
/**
|
|
12051
|
+
* Explanation of the `sdk_call` kind.
|
|
12052
|
+
*/
|
|
10692
12053
|
sdk_call: string
|
|
12054
|
+
/**
|
|
12055
|
+
* Explanation of the `config_object` kind.
|
|
12056
|
+
*/
|
|
10693
12057
|
config_object: string
|
|
10694
12058
|
}
|
|
10695
12059
|
/**
|
|
10696
12060
|
* Feature flag confidence explanations.
|
|
10697
12061
|
*/
|
|
10698
12062
|
export interface FeatureFlagsConfidenceMeta {
|
|
12063
|
+
/**
|
|
12064
|
+
* Explanation of the `high` confidence level.
|
|
12065
|
+
*/
|
|
10699
12066
|
high: string
|
|
12067
|
+
/**
|
|
12068
|
+
* Explanation of the `medium` confidence level.
|
|
12069
|
+
*/
|
|
10700
12070
|
medium: string
|
|
12071
|
+
/**
|
|
12072
|
+
* Explanation of the `low` confidence level.
|
|
12073
|
+
*/
|
|
10701
12074
|
low: string
|
|
10702
12075
|
}
|
|
10703
12076
|
/**
|
|
@@ -11656,19 +13029,40 @@ reason_present: boolean
|
|
|
11656
13029
|
* Envelope emitted by `fallow type-aware status --format json`.
|
|
11657
13030
|
*/
|
|
11658
13031
|
export interface TypeAwareStatusOutput {
|
|
11659
|
-
schema_version:
|
|
13032
|
+
schema_version: TypeAwareStatusSchemaVersion
|
|
11660
13033
|
version: ToolVersion
|
|
13034
|
+
/**
|
|
13035
|
+
* Whether a usable type-aware companion was found.
|
|
13036
|
+
*/
|
|
11661
13037
|
available: boolean
|
|
13038
|
+
/**
|
|
13039
|
+
* How the companion was discovered, e.g. `installed-sibling`.
|
|
13040
|
+
*/
|
|
11662
13041
|
discovery_source?: (string | null)
|
|
11663
13042
|
/**
|
|
11664
13043
|
* Root-relative companion path, or only the executable name when the
|
|
11665
13044
|
* companion lives outside the analyzed project.
|
|
11666
13045
|
*/
|
|
11667
13046
|
companion_path?: (string | null)
|
|
13047
|
+
/**
|
|
13048
|
+
* npm package version of the companion, when known.
|
|
13049
|
+
*/
|
|
11668
13050
|
package_version?: (string | null)
|
|
13051
|
+
/**
|
|
13052
|
+
* Type-aware protocol version fallow speaks.
|
|
13053
|
+
*/
|
|
11669
13054
|
protocol_version: number
|
|
13055
|
+
/**
|
|
13056
|
+
* Checker backend family, e.g. `typescript-go`.
|
|
13057
|
+
*/
|
|
11670
13058
|
backend_family?: (string | null)
|
|
13059
|
+
/**
|
|
13060
|
+
* Version of the checker backend, when known.
|
|
13061
|
+
*/
|
|
11671
13062
|
backend_version?: (string | null)
|
|
13063
|
+
/**
|
|
13064
|
+
* How to make the companion available, when it is not.
|
|
13065
|
+
*/
|
|
11672
13066
|
remediation?: (string | null)
|
|
11673
13067
|
}
|
|
11674
13068
|
/**
|
|
@@ -11676,10 +13070,22 @@ remediation?: (string | null)
|
|
|
11676
13070
|
*/
|
|
11677
13071
|
export interface CodeClimateIssue {
|
|
11678
13072
|
type: CodeClimateIssueKind
|
|
13073
|
+
/**
|
|
13074
|
+
* Fallow rule identifier, e.g. `fallow/unused-file`.
|
|
13075
|
+
*/
|
|
11679
13076
|
check_name: string
|
|
13077
|
+
/**
|
|
13078
|
+
* Human-readable finding description.
|
|
13079
|
+
*/
|
|
11680
13080
|
description: string
|
|
13081
|
+
/**
|
|
13082
|
+
* CodeClimate category labels, e.g. `Clarity` or `Duplication`.
|
|
13083
|
+
*/
|
|
11681
13084
|
categories: string[]
|
|
11682
13085
|
severity: CodeClimateSeverity
|
|
13086
|
+
/**
|
|
13087
|
+
* Stable finding fingerprint GitLab uses to track issues across pushes.
|
|
13088
|
+
*/
|
|
11683
13089
|
fingerprint: string
|
|
11684
13090
|
location: CodeClimateLocation
|
|
11685
13091
|
/**
|
|
@@ -11735,6 +13141,11 @@ message: string
|
|
|
11735
13141
|
exit_code: number
|
|
11736
13142
|
}
|
|
11737
13143
|
|
|
13144
|
+
|
|
13145
|
+
/**
|
|
13146
|
+
* @deprecated Legacy alias for the dead-code/check schema version. Use the exact envelope-specific alias instead.
|
|
13147
|
+
*/
|
|
13148
|
+
export type SchemaVersion = CheckSchemaVersion;
|
|
11738
13149
|
/**
|
|
11739
13150
|
* Inner complexity-violation payload, flattened into `HealthFinding`
|
|
11740
13151
|
* on the wire via `#[serde(flatten)]`. Exposed here because
|