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