fallow 3.9.1 → 3.11.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
  /**
27
- * Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field.
27
+ * Schemas for the JSON output of fallow commands. Object-shaped envelopes covered by the `FallowOutput` contract carry a top-level `kind` discriminator. Current kind values: `audit`, `explain`, `inspect_target`, `trace`, `review-envelope`, `review-reconcile`, `coverage-setup`, `coverage-analyze`, `list-boundaries`, `list-workspaces`, `health`, `dupes`, `dead-code-grouped`, `impact`, `impact-cross-repo`, `security`, `security-survivors`, `security-blind-spots`, `dead-code`, `combined`, `feature-flags`, `audit-brief`, `decision-surface`, `review-walkthrough-guide`, `review-walkthrough-validation`, `suppression-inventory`, `type-aware-status`. Consumers should branch on `kind` instead of probing for unique field presence. `CodeClimateOutput` is a bare JSON array (per the Code Climate / GitLab Code Quality spec) and stays a sibling root branch discriminated by checking whether the document root is an array. `ErrorOutput` is the `--format json` failure document, emitted on stdout with a non-zero exit; it carries no `kind` and is discriminated by the `error: true` field.
28
28
  */
29
29
  export type FallowJsonOutput = (FallowOutput | CodeClimateOutput | ErrorOutput)
30
30
  /**
@@ -50,7 +50,7 @@ kind: "audit"
50
50
  kind: "explain"
51
51
  }) | (InspectOutput & {
52
52
  kind: "inspect_target"
53
- }) | (SymbolChainTrace & {
53
+ }) | ((ExportTrace | ClassMemberTrace | FileTrace | DependencyTrace | CloneTrace | ImpactClosureTrace | SymbolChainTrace | SemanticSymbolTrace) & {
54
54
  kind: "trace"
55
55
  }) | (ReviewEnvelopeOutput & {
56
56
  kind: "review-envelope"
@@ -70,7 +70,7 @@ kind: "health"
70
70
  kind: "dupes"
71
71
  }) | (CheckGroupedOutput & {
72
72
  kind: "dead-code-grouped"
73
- }) | (ImpactReport & {
73
+ }) | ((ImpactReport | SemanticSymbolImpact) & {
74
74
  kind: "impact"
75
75
  }) | (CrossRepoImpactReport & {
76
76
  kind: "impact-cross-repo"
@@ -96,6 +96,8 @@ kind: "review-walkthrough-guide"
96
96
  kind: "review-walkthrough-validation"
97
97
  }) | (SuppressionInventoryOutput & {
98
98
  kind: "suppression-inventory"
99
+ }) | (TypeAwareStatusOutput & {
100
+ kind: "type-aware-status"
99
101
  }))
100
102
  /**
101
103
  * Schema version for this output format (independent of tool version). Bump
@@ -138,6 +140,62 @@ export type AuditVerdict = ("pass" | "warn" | "fail")
138
140
  */
139
141
  export type ElapsedMs = number
140
142
  export type AuditGate = ("new-only" | "all")
143
+ /**
144
+ * Analysis mode stored with baselines, snapshots, audit sides, and impact data.
145
+ */
146
+ export type SemanticAnalysisMode = ("syntactic" | "type-aware")
147
+ /**
148
+ * Semantic capabilities that can share one TypeScript Program session.
149
+ */
150
+ export type SemanticCapability = ("symbol-use" | "symbol-trace" | "api-surface" | "symbol-impact" | "type-coupling")
151
+ /**
152
+ * Whether the semantic backend answered every requested query safely.
153
+ */
154
+ export type SemanticCompleteness = ("complete" | "partial" | "unavailable")
155
+ /**
156
+ * Effective policy applied when semantic evidence is incomplete.
157
+ */
158
+ export type SemanticCompletenessRequirement = ("best-effort" | "complete")
159
+ /**
160
+ * Stable reason why semantic evidence is partial or unavailable.
161
+ */
162
+ export type SemanticGapReason = ("no-project" | "ambiguous-project" | "blocking-diagnostics" | "unknown-symbol" | "unknown-entry-point" | "evidence-limit" | "dynamic-behavior" | "virtual-dispatch" | "dynamic-member-access" | "decorated-declaration" | "optional-contract" | "accessor-pair" | "overload-set" | "attached-comment" | "abstract-declaration" | "incomplete-project-coverage" | "framework-contract-provenance" | "capacity" | "unsupported-syntax")
163
+ /**
164
+ * Value or type namespace for one exact declaration or reference.
165
+ */
166
+ export type SemanticNamespace = ("value" | "type")
167
+ /**
168
+ * Conservative outcome for one existing Fallow dead-code candidate.
169
+ */
170
+ export type SemanticCandidateDecisionKind = ("confirmed-used" | "contract-preserved" | "confirmed-no-static-references" | "retained-abstained" | "retained-unresolved")
171
+ /**
172
+ * How a class member participates in an inherited or implemented relation.
173
+ */
174
+ export type SemanticContractRelation = ("interface-implementation" | "abstract-implementation" | "override" | "optional-contract")
175
+ /**
176
+ * Heritage relation used by a framework-owned class-member contract.
177
+ */
178
+ export type SemanticFrameworkRelation = ("extends" | "implements")
179
+ /**
180
+ * Confidence of exact-symbol impact analysis after known dynamic gaps.
181
+ */
182
+ export type SemanticImpactConfidence = ("high" | "bounded" | "unavailable")
183
+ /**
184
+ * How a TypeScript project was selected for semantic refinement.
185
+ */
186
+ export type TypeAwareProjectSource = ("auto" | "explicit")
187
+ /**
188
+ * Outcome of semantic refinement for one TypeScript project.
189
+ */
190
+ export type TypeAwareProjectStatus = ("refined" | "abstained" | "complete" | "unavailable")
191
+ /**
192
+ * How a persistent semantic snapshot was refreshed.
193
+ */
194
+ export type TypeAwareInvalidationKind = ("full" | "incremental" | "none")
195
+ /**
196
+ * Closed set of reasons for retaining a candidate without semantic scanning.
197
+ */
198
+ export type TypeAwareAbstentionReason = ("no-project" | "ambiguous-project" | "blocking-diagnostics")
141
199
  /**
142
200
  * A suggested action attached to a finding in the JSON output. Each finding
143
201
  * carries an `actions` array; consumers (agents, IDE clients, CI bots) can
@@ -651,7 +709,7 @@ export_name: string
651
709
  type: "symbol"
652
710
  })
653
711
  export type InspectIdentity = (InspectFileIdentity | InspectSymbolIdentity)
654
- export type InspectSectionStatus = ("ok" | "unavailable" | "error")
712
+ export type InspectSectionStatus = ("ok" | "partial" | "unavailable" | "error")
655
713
  export type InspectEvidenceScope = ("symbol" | "file" | "project_filtered_to_file")
656
714
  /**
657
715
  * Best-effort classification of why a callee did not resolve to an edge.
@@ -689,6 +747,11 @@ export type ReviewProvider = ("github" | "gitlab")
689
747
  * GitHub Checks API conclusion field.
690
748
  */
691
749
  export type ReviewCheckConclusion = ("success" | "neutral" | "failure")
750
+ /**
751
+ * Stable identifier used to isolate independent review integrations on the
752
+ * same pull or merge request.
753
+ */
754
+ export type ReviewId = string
692
755
  /**
693
756
  * Schema-version discriminator for the review reconcile envelope.
694
757
  */
@@ -935,78 +998,906 @@ dead_code?: (CheckOutput | null)
935
998
  duplication?: (DupesReportPayload | null)
936
999
  complexity?: (HealthReport | null)
937
1000
  /**
938
- * Read-only follow-up commands computed from this run's findings. See
939
- * `CheckOutput::next_steps` for the contract.
1001
+ * Read-only follow-up commands computed from this run's findings. See
1002
+ * `CheckOutput::next_steps` for the contract.
1003
+ */
1004
+ next_steps?: NextStep[]
1005
+ }
1006
+ /**
1007
+ * Per-category summary counts for the audit result.
1008
+ */
1009
+ export interface AuditSummary {
1010
+ dead_code_issues: number
1011
+ dead_code_has_errors: boolean
1012
+ complexity_findings: number
1013
+ max_cyclomatic?: (number | null)
1014
+ duplication_clone_groups: number
1015
+ }
1016
+ /**
1017
+ * New-vs-inherited issue counts for audit.
1018
+ */
1019
+ export interface AuditAttribution {
1020
+ gate: AuditGate
1021
+ dead_code_introduced: number
1022
+ dead_code_inherited: number
1023
+ complexity_introduced: number
1024
+ complexity_inherited: number
1025
+ duplication_introduced: number
1026
+ duplication_inherited: number
1027
+ styling_introduced: number
1028
+ styling_inherited: number
1029
+ }
1030
+ /**
1031
+ * Metric and rule definitions emitted under `_meta` when `--explain` is
1032
+ * passed (always present in MCP responses). Helps AI agents and CI systems
1033
+ * interpret metric values without re-reading the docs site.
1034
+ */
1035
+ export interface Meta {
1036
+ /**
1037
+ * URL to the documentation page for this command.
1038
+ */
1039
+ docs?: (string | null)
1040
+ /**
1041
+ * Local telemetry correlation metadata for agent follow-up runs.
1042
+ */
1043
+ telemetry?: (TelemetryMeta | null)
1044
+ /**
1045
+ * Provenance for the opt-in TypeScript semantic analysis pass.
1046
+ */
1047
+ type_aware?: (TypeAwareMeta | null)
1048
+ /**
1049
+ * Per-field definitions for envelope fields and action payload fields.
1050
+ */
1051
+ field_definitions?: {
1052
+ [k: string]: string
1053
+ }
1054
+ /**
1055
+ * Per-metric definitions: name, description, range, interpretation.
1056
+ */
1057
+ metrics?: {
1058
+ [k: string]: MetaMetric
1059
+ }
1060
+ /**
1061
+ * Per-rule definitions for check command output.
1062
+ */
1063
+ rules?: {
1064
+ [k: string]: MetaRule
1065
+ }
1066
+ }
1067
+ /**
1068
+ * Privacy-safe local run metadata emitted for JSON consumers.
1069
+ */
1070
+ export interface TelemetryMeta {
1071
+ /**
1072
+ * Ephemeral local token that may be passed to the hidden `--parent-run`
1073
+ * flag on a later command. It is not derived from repository, path, user,
1074
+ * machine, project, or cloud data.
1075
+ */
1076
+ analysis_run_id?: (string | null)
1077
+ }
1078
+ /**
1079
+ * Bounded provenance emitted when the opt-in type-aware pass runs.
1080
+ */
1081
+ export interface TypeAwareMeta {
1082
+ /**
1083
+ * Compatibility identity used by audit, baselines, snapshots, and stores.
1084
+ */
1085
+ identity?: (SemanticAnalysisIdentity | null)
1086
+ /**
1087
+ * Effective CLI or repository policy for incomplete semantic evidence.
1088
+ */
1089
+ required_completeness?: (SemanticCompletenessRequirement | null)
1090
+ /**
1091
+ * Compact status for every requested semantic query.
1092
+ */
1093
+ queries?: SemanticQuerySummary[]
1094
+ /**
1095
+ * Bounded decision and evidence for each semantic dead-code candidate.
1096
+ */
1097
+ candidate_decisions?: SemanticCandidateDecision[]
1098
+ /**
1099
+ * Checker-backed trace evidence requested by focused symbol queries.
1100
+ */
1101
+ symbol_traces?: SemanticSymbolTrace[]
1102
+ /**
1103
+ * Package-public surface and confirmed private type leaks.
1104
+ */
1105
+ api_surface?: (ApiSurfaceResult | null)
1106
+ /**
1107
+ * Exact-symbol blast radius and targeted-test recommendations.
1108
+ */
1109
+ symbol_impacts?: SemanticSymbolImpact[]
1110
+ /**
1111
+ * Advisory project-local public-signature coupling.
1112
+ */
1113
+ type_coupling?: (TypeCouplingReport | null)
1114
+ /**
1115
+ * Whether the semantic companion executed at least one query.
1116
+ */
1117
+ executed: boolean
1118
+ /**
1119
+ * Version of Fallow's backend-neutral sidecar protocol.
1120
+ */
1121
+ protocol_version: number
1122
+ /**
1123
+ * Version of the sidecar package that executed the query.
1124
+ */
1125
+ sidecar_version?: (string | null)
1126
+ /**
1127
+ * Semantic backend capability identifier.
1128
+ */
1129
+ backend: string
1130
+ /**
1131
+ * Backend compiler or engine version that executed the query.
1132
+ */
1133
+ backend_version?: (string | null)
1134
+ /**
1135
+ * TypeScript project configs selected for candidate files.
1136
+ */
1137
+ selected_tsconfigs: string[]
1138
+ /**
1139
+ * Number of candidate findings sent to the sidecar.
1140
+ */
1141
+ candidate_count: number
1142
+ /**
1143
+ * Number of candidates confirmed as used and removed.
1144
+ */
1145
+ confirmed_used_count: number
1146
+ /**
1147
+ * Number of candidates preserved because they implement or override a contract.
1148
+ */
1149
+ contract_preserved_count: number
1150
+ /**
1151
+ * Number of candidates with complete, closed-world no-static-reference evidence.
1152
+ */
1153
+ no_static_references_count: number
1154
+ /**
1155
+ * Number of retained class members eligible for a guarded type-aware fix.
1156
+ */
1157
+ fix_eligible_count: number
1158
+ /**
1159
+ * Number of candidates retained because semantic use was unresolved.
1160
+ */
1161
+ unresolved_count: number
1162
+ /**
1163
+ * Number of candidates retained because semantic analysis abstained.
1164
+ */
1165
+ abstained_count: number
1166
+ abstention_reasons: TypeAwareAbstentionCounts
1167
+ /**
1168
+ * Per-project semantic refinement status and evidence.
1169
+ */
1170
+ projects: TypeAwareProjectMeta[]
1171
+ /**
1172
+ * Number of bounded warnings returned by the sidecar.
1173
+ */
1174
+ warning_count: number
1175
+ /**
1176
+ * Bounded semantic warnings. Findings mentioned here were retained.
1177
+ */
1178
+ warnings: string[]
1179
+ /**
1180
+ * Semantic pass duration as reported by the sidecar.
1181
+ */
1182
+ elapsed_ms: number
1183
+ phase_timings_ms: TypeAwarePhaseTimings
1184
+ }
1185
+ /**
1186
+ * Compatibility identity for comparing two analysis results.
1187
+ */
1188
+ export interface SemanticAnalysisIdentity {
1189
+ mode: SemanticAnalysisMode
1190
+ /**
1191
+ * Version of the semantic result schema, independent of tool versions.
1192
+ */
1193
+ semantic_schema_version: number
1194
+ /**
1195
+ * Sorted capability set requested for the analysis.
1196
+ */
1197
+ capabilities: SemanticCapability[]
1198
+ /**
1199
+ * Hash of normalized project ownership and compiler configuration.
1200
+ */
1201
+ project_config_hash: string
1202
+ /**
1203
+ * Backend family, such as `typescript-go`.
1204
+ */
1205
+ backend_family: string
1206
+ completeness: SemanticCompleteness
1207
+ }
1208
+ /**
1209
+ * Compact per-query status embedded in run metadata.
1210
+ */
1211
+ export interface SemanticQuerySummary {
1212
+ /**
1213
+ * Stable query identifier within this analysis run.
1214
+ */
1215
+ query_id: number
1216
+ capability: SemanticCapability
1217
+ /**
1218
+ * Operation-specific assertion, never a generic compiler verdict.
1219
+ */
1220
+ assertion: string
1221
+ status: SemanticCompleteness
1222
+ /**
1223
+ * Stable primary gap reason when partial or unavailable.
1224
+ */
1225
+ reason_code?: (SemanticGapReason | null)
1226
+ /**
1227
+ * Evidence count before bounding.
1228
+ */
1229
+ total_evidence_count: number
1230
+ /**
1231
+ * Whether evidence or payload arrays were truncated.
1232
+ */
1233
+ truncated: boolean
1234
+ /**
1235
+ * Counted omissions.
1236
+ */
1237
+ omissions?: SemanticOmission[]
1238
+ /**
1239
+ * Plain next actions.
1240
+ */
1241
+ actions?: string[]
1242
+ }
1243
+ /**
1244
+ * Counted omission attached to a partial or unavailable result.
1245
+ */
1246
+ export interface SemanticOmission {
1247
+ reason_code: SemanticGapReason
1248
+ /**
1249
+ * Number of omitted items or relations.
1250
+ */
1251
+ count: number
1252
+ }
1253
+ /**
1254
+ * Bounded, inspectable decision record for one semantic dead-code candidate.
1255
+ */
1256
+ export interface SemanticCandidateDecision {
1257
+ /**
1258
+ * Query identifier used to correlate low-level query metadata.
1259
+ */
1260
+ query_id: number
1261
+ subject: SemanticSymbol
1262
+ decision: SemanticCandidateDecisionKind
1263
+ status: SemanticCompleteness
1264
+ /**
1265
+ * Every selected TypeScript project that owns the declaration.
1266
+ */
1267
+ owning_projects: string[]
1268
+ /**
1269
+ * Bounded checker-resolved reference or uncertainty evidence.
1270
+ */
1271
+ evidence?: SemanticReference[]
1272
+ /**
1273
+ * Inherited contract evidence, when present.
1274
+ */
1275
+ contract?: (SemanticContractEvidence | null)
1276
+ /**
1277
+ * Framework-owned contract evidence, distinct from TypeScript contracts.
1278
+ */
1279
+ framework_contract?: (SemanticFrameworkContractEvidence | null)
1280
+ /**
1281
+ * Whether this exact decision may enable a guarded class-member fix.
1282
+ */
1283
+ closed_world_eligible: boolean
1284
+ /**
1285
+ * Exact declaration guard required before a source edit.
1286
+ */
1287
+ edit_guard?: (SemanticEditGuard | null)
1288
+ /**
1289
+ * Primary reason when the candidate remains unresolved or abstained.
1290
+ */
1291
+ reason_code?: (SemanticGapReason | null)
1292
+ /**
1293
+ * Concise explanation suitable for dry-run and agent output.
1294
+ */
1295
+ explanation: string
1296
+ /**
1297
+ * Plain next actions.
1298
+ */
1299
+ actions?: string[]
1300
+ /**
1301
+ * Evidence count before bounding.
1302
+ */
1303
+ total_evidence_count: number
1304
+ /**
1305
+ * Whether evidence was truncated.
1306
+ */
1307
+ truncated: boolean
1308
+ /**
1309
+ * Counted omissions.
1310
+ */
1311
+ omissions?: SemanticOmission[]
1312
+ }
1313
+ /**
1314
+ * Stable identity for a declaration sent to or returned by the backend.
1315
+ */
1316
+ export interface SemanticSymbol {
1317
+ /**
1318
+ * Project-root-relative declaration path.
1319
+ */
1320
+ path: string
1321
+ namespace: SemanticNamespace
1322
+ /**
1323
+ * Stable declaration kind, such as `function` or `class-method`.
1324
+ */
1325
+ declaration_kind: string
1326
+ /**
1327
+ * Name exposed to consumers.
1328
+ */
1329
+ exported_name: string
1330
+ /**
1331
+ * Local declaration name.
1332
+ */
1333
+ local_name: string
1334
+ /**
1335
+ * Optional owning class or namespace.
1336
+ */
1337
+ owner?: (string | null)
1338
+ /**
1339
+ * One-based declaration line.
1340
+ */
1341
+ line: number
1342
+ /**
1343
+ * Zero-based UTF-8 byte column.
1344
+ */
1345
+ col: number
1346
+ }
1347
+ /**
1348
+ * Located semantic reference evidence.
1349
+ */
1350
+ export interface SemanticReference {
1351
+ /**
1352
+ * Project-root-relative reference path.
1353
+ */
1354
+ path: string
1355
+ /**
1356
+ * One-based source line.
1357
+ */
1358
+ line: number
1359
+ /**
1360
+ * Zero-based UTF-8 byte column.
1361
+ */
1362
+ col: number
1363
+ /**
1364
+ * Reference role, such as `read`, `type`, `alias`, or `re-export`.
1365
+ */
1366
+ role: string
1367
+ namespace: SemanticNamespace
1368
+ /**
1369
+ * Alias and re-export hops between the reference and declaration.
1370
+ */
1371
+ via?: SemanticAliasHop[]
1372
+ }
1373
+ /**
1374
+ * One alias or re-export hop in semantic provenance.
1375
+ */
1376
+ export interface SemanticAliasHop {
1377
+ /**
1378
+ * Project-root-relative hop path.
1379
+ */
1380
+ path: string
1381
+ /**
1382
+ * Name before this hop.
1383
+ */
1384
+ from_name: string
1385
+ /**
1386
+ * Name exposed after this hop.
1387
+ */
1388
+ to_name: string
1389
+ /**
1390
+ * Relation, such as `import-alias` or `re-export`.
1391
+ */
1392
+ relation: string
1393
+ }
1394
+ /**
1395
+ * Exact declaration evidence for an inherited or implemented class-member relation.
1396
+ */
1397
+ export interface SemanticContractEvidence {
1398
+ relation: SemanticContractRelation
1399
+ declaration: SemanticSymbol
1400
+ /**
1401
+ * Whether the source contract marks this member optional.
1402
+ */
1403
+ optional: boolean
1404
+ }
1405
+ /**
1406
+ * Checker-validated evidence that a framework contract preserves a member.
1407
+ */
1408
+ export interface SemanticFrameworkContractEvidence {
1409
+ /**
1410
+ * Fallow plugin that supplied the contract.
1411
+ */
1412
+ framework: string
1413
+ /**
1414
+ * Exact package that owns the heritage declaration.
1415
+ */
1416
+ package: string
1417
+ relation: SemanticFrameworkRelation
1418
+ declaration: SemanticSymbol
1419
+ }
1420
+ /**
1421
+ * Exact source span and content hash used to guard semantic source edits.
1422
+ */
1423
+ export interface SemanticEditGuard {
1424
+ /**
1425
+ * Zero-based UTF-8 byte offset where the declaration starts.
1426
+ */
1427
+ start: number
1428
+ /**
1429
+ * Exclusive zero-based UTF-8 byte offset where the declaration ends.
1430
+ */
1431
+ end: number
1432
+ /**
1433
+ * Lowercase SHA-256 digest of the exact declaration text.
1434
+ */
1435
+ declaration_sha256: string
1436
+ }
1437
+ /**
1438
+ * Typed semantic trace attached to an existing syntactic trace.
1439
+ */
1440
+ export interface SemanticSymbolTrace {
1441
+ target: SemanticSymbol
1442
+ identity: SemanticAnalysisIdentity
1443
+ /**
1444
+ * TypeScript project selected for this symbol.
1445
+ */
1446
+ selected_project: string
1447
+ /**
1448
+ * Concrete assertion, such as `references-found`.
1449
+ */
1450
+ assertion: string
1451
+ status: SemanticCompleteness
1452
+ /**
1453
+ * Bounded reference evidence.
1454
+ */
1455
+ references: SemanticReference[]
1456
+ /**
1457
+ * Count before evidence bounding.
1458
+ */
1459
+ total_reference_count: number
1460
+ /**
1461
+ * Exact reference locations found by the TypeScript checker.
1462
+ */
1463
+ checker_evidence_count: number
1464
+ /**
1465
+ * Alias and re-export hops derived from the semantic graph.
1466
+ */
1467
+ graph_evidence_count: number
1468
+ /**
1469
+ * Whether reference evidence was truncated.
1470
+ */
1471
+ truncated: boolean
1472
+ /**
1473
+ * Counted omissions.
1474
+ */
1475
+ omissions?: SemanticOmission[]
1476
+ /**
1477
+ * Plain next actions for a user or automation consumer.
1478
+ */
1479
+ actions?: string[]
1480
+ }
1481
+ /**
1482
+ * Package API surface result shared by inspect and private-leak analysis.
1483
+ */
1484
+ export interface ApiSurfaceResult {
1485
+ /**
1486
+ * Concrete assertion, such as `leak-confirmed`.
1487
+ */
1488
+ assertion: string
1489
+ status: SemanticCompleteness
1490
+ /**
1491
+ * Public API entries.
1492
+ */
1493
+ entries: ApiSurfaceEntry[]
1494
+ /**
1495
+ * Confirmed private type leaks.
1496
+ */
1497
+ private_type_leaks: SemanticPrivateTypeLeak[]
1498
+ /**
1499
+ * Counted omissions.
1500
+ */
1501
+ omissions?: SemanticOmission[]
1502
+ /**
1503
+ * Plain next actions.
1504
+ */
1505
+ actions?: string[]
1506
+ }
1507
+ /**
1508
+ * One package-public API entry described by the semantic backend.
1509
+ */
1510
+ export interface ApiSurfaceEntry {
1511
+ exposed: SemanticSymbol
1512
+ origin: SemanticSymbol
1513
+ /**
1514
+ * Stable normalized signature fingerprint.
1515
+ */
1516
+ signature_fingerprint: string
1517
+ /**
1518
+ * Project-local types referenced by the signature.
1519
+ */
1520
+ referenced_types: PublicTypeReference[]
1521
+ }
1522
+ /**
1523
+ * One project-local type referenced by a public signature.
1524
+ */
1525
+ export interface PublicTypeReference {
1526
+ declaration: SemanticSymbol
1527
+ /**
1528
+ * Signature relation, such as return type or generic constraint.
1529
+ */
1530
+ relation: string
1531
+ }
1532
+ /**
1533
+ * Exact semantic evidence for a private type leak.
1534
+ */
1535
+ export interface SemanticPrivateTypeLeak {
1536
+ exposed: SemanticSymbol
1537
+ private_declaration: SemanticSymbol
1538
+ /**
1539
+ * Signature relation through which the type is exposed.
1540
+ */
1541
+ relation: string
1542
+ /**
1543
+ * Stable TypeScript diagnostic code used as supporting evidence.
1544
+ */
1545
+ diagnostic_code?: (number | null)
1546
+ }
1547
+ /**
1548
+ * Exact-symbol impact and targeted-test recommendation.
1549
+ */
1550
+ export interface SemanticSymbolImpact {
1551
+ target: SemanticSymbol
1552
+ identity: SemanticAnalysisIdentity
1553
+ /**
1554
+ * TypeScript project selected for this symbol.
1555
+ */
1556
+ selected_project: string
1557
+ /**
1558
+ * Concrete assertion, such as `consumers-found`.
1559
+ */
1560
+ assertion: string
1561
+ status: SemanticCompleteness
1562
+ /**
1563
+ * Files that reference the exact symbol directly.
1564
+ */
1565
+ direct_consumers: SemanticImpactPath[]
1566
+ /**
1567
+ * Direct consumer count before evidence bounding.
1568
+ */
1569
+ total_direct_consumer_count: number
1570
+ /**
1571
+ * Transitively affected production files.
1572
+ */
1573
+ affected_files: SemanticImpactPath[]
1574
+ /**
1575
+ * Transitive affected-file count before evidence bounding.
1576
+ */
1577
+ total_affected_file_count: number
1578
+ /**
1579
+ * Directly relevant test entry points.
1580
+ */
1581
+ targeted_tests: SemanticImpactPath[]
1582
+ /**
1583
+ * Targeted-test count before evidence bounding.
1584
+ */
1585
+ total_targeted_test_count: number
1586
+ confidence: SemanticImpactConfidence
1587
+ /**
1588
+ * Counted omissions, including dynamic behavior.
1589
+ */
1590
+ omissions?: SemanticOmission[]
1591
+ /**
1592
+ * Plain next actions.
1593
+ */
1594
+ actions?: string[]
1595
+ }
1596
+ /**
1597
+ * One production file or test reached by exact-symbol impact analysis.
1598
+ */
1599
+ export interface SemanticImpactPath {
1600
+ /**
1601
+ * Project-root-relative affected path.
1602
+ */
1603
+ path: string
1604
+ /**
1605
+ * Relation to the target, such as `direct-value-consumer`.
1606
+ */
1607
+ relation: string
1608
+ /**
1609
+ * Shortest graph distance from the target.
1610
+ */
1611
+ distance: number
1612
+ /**
1613
+ * Located provenance path.
1614
+ */
1615
+ via?: string[]
1616
+ }
1617
+ /**
1618
+ * Advisory project-local public-signature coupling report.
1619
+ */
1620
+ export interface TypeCouplingReport {
1621
+ identity: SemanticAnalysisIdentity
1622
+ /**
1623
+ * Concrete assertion, such as `coupling-found`.
1624
+ */
1625
+ assertion: string
1626
+ status: SemanticCompleteness
1627
+ /**
1628
+ * Project summary. Absent when analysis is unavailable, never a fake zero.
1629
+ */
1630
+ summary?: (TypeCouplingSummary | null)
1631
+ /**
1632
+ * Per-file coupling details.
1633
+ */
1634
+ files: TypeCouplingFile[]
1635
+ /**
1636
+ * Highest-degree files contributing to project coupling.
1637
+ */
1638
+ top_contributors?: TypeCouplingFile[]
1639
+ /**
1640
+ * Located project-local type cycles.
1641
+ */
1642
+ cycles?: TypeCouplingCycle[]
1643
+ /**
1644
+ * Counted omissions.
1645
+ */
1646
+ omissions?: SemanticOmission[]
1647
+ /**
1648
+ * Plain next actions.
1649
+ */
1650
+ actions?: string[]
1651
+ }
1652
+ /**
1653
+ * Project summary for advisory type coupling.
1654
+ */
1655
+ export interface TypeCouplingSummary {
1656
+ /**
1657
+ * Measurement boundary, currently project-local public signatures.
1658
+ */
1659
+ scope: string
1660
+ /**
1661
+ * Edge direction, currently directed.
1662
+ */
1663
+ direction: string
1664
+ /**
1665
+ * Distinct project files in the selected TypeScript projects.
1666
+ */
1667
+ project_size: number
1668
+ /**
1669
+ * Distinct project files included in the denominator.
1670
+ */
1671
+ files_analyzed: number
1672
+ /**
1673
+ * Files participating in at least one project-local type edge.
1674
+ */
1675
+ distinct_coupled_files: number
1676
+ /**
1677
+ * Project-local public-signature edge count before evidence bounding.
1678
+ */
1679
+ edge_count: number
1680
+ /**
1681
+ * Percentage of analyzed files participating in a type edge.
1682
+ */
1683
+ coupled_file_pct: number
1684
+ /**
1685
+ * Median distinct-file type connections.
1686
+ */
1687
+ p50_distinct_connections: number
1688
+ /**
1689
+ * P90 distinct-file type connections.
1690
+ */
1691
+ p90_distinct_connections: number
1692
+ /**
1693
+ * P95 incoming distinct-file type coupling.
1694
+ */
1695
+ p95_public_types_used_by: number
1696
+ /**
1697
+ * P95 outgoing distinct-file type coupling.
1698
+ */
1699
+ p95_public_api_depends_on: number
1700
+ /**
1701
+ * Percentage of files above the adaptive high-coupling threshold.
1702
+ */
1703
+ high_coupling_pct: number
1704
+ /**
1705
+ * Share of edge endpoints represented by the top contributors.
1706
+ */
1707
+ concentration: number
1708
+ /**
1709
+ * Number of project-local public-signature cycles.
1710
+ */
1711
+ cycle_count: number
1712
+ }
1713
+ /**
1714
+ * Per-file project-local public-signature coupling.
1715
+ */
1716
+ export interface TypeCouplingFile {
1717
+ /**
1718
+ * Project-root-relative file path.
1719
+ */
1720
+ path: string
1721
+ /**
1722
+ * Distinct files this file's public API depends on.
1723
+ */
1724
+ public_api_depends_on: number
1725
+ /**
1726
+ * Located project files this file's public API depends on.
1727
+ */
1728
+ public_api_depends_on_files?: string[]
1729
+ /**
1730
+ * Distinct files whose public types use this file.
1731
+ */
1732
+ public_types_used_by: number
1733
+ /**
1734
+ * Located project files whose public types use this file.
1735
+ */
1736
+ public_types_used_by_files?: string[]
1737
+ /**
1738
+ * Located public-signature edges.
1739
+ */
1740
+ edges: TypeCouplingEdge[]
1741
+ }
1742
+ /**
1743
+ * One project-local public-signature type edge.
1744
+ */
1745
+ export interface TypeCouplingEdge {
1746
+ source: SemanticSymbol
1747
+ target: SemanticSymbol
1748
+ /**
1749
+ * Signature relation.
1750
+ */
1751
+ relation: string
1752
+ evidence: SemanticSourceLocation
1753
+ /**
1754
+ * Scope, such as `module-export` or `package-public`.
1755
+ */
1756
+ scope: string
1757
+ }
1758
+ /**
1759
+ * One project-root-relative source location used as semantic evidence.
1760
+ */
1761
+ export interface SemanticSourceLocation {
1762
+ /**
1763
+ * Project-root-relative source path.
1764
+ */
1765
+ path: string
1766
+ /**
1767
+ * One-based source line.
1768
+ */
1769
+ line: number
1770
+ /**
1771
+ * Zero-based UTF-8 byte column.
1772
+ */
1773
+ col: number
1774
+ }
1775
+ /**
1776
+ * One project-local cycle through public-signature type dependencies.
1777
+ */
1778
+ export interface TypeCouplingCycle {
1779
+ /**
1780
+ * Ordered project-root-relative files, ending at the start file.
1781
+ */
1782
+ files: string[]
1783
+ }
1784
+ /**
1785
+ * Closed abstention reason counts for stable machine consumption.
1786
+ */
1787
+ export interface TypeAwareAbstentionCounts {
1788
+ /**
1789
+ * Candidates not contained by a selected TypeScript project.
1790
+ */
1791
+ no_project: number
1792
+ /**
1793
+ * Candidates contained by more than one explicit TypeScript project.
1794
+ */
1795
+ ambiguous_project: number
1796
+ /**
1797
+ * Candidates retained because structural diagnostics block scanning.
1798
+ */
1799
+ blocking_diagnostics: number
1800
+ /**
1801
+ * Candidates whose exact declaration identity could not be resolved.
1802
+ */
1803
+ unknown_symbol: number
1804
+ /**
1805
+ * Candidates using declaration syntax unsupported by the semantic backend.
1806
+ */
1807
+ unsupported_syntax: number
1808
+ /**
1809
+ * Candidates retained because the bounded semantic request reached capacity.
1810
+ */
1811
+ capacity: number
1812
+ }
1813
+ /**
1814
+ * Bounded provenance for one TypeScript project handled by the sidecar.
1815
+ */
1816
+ export interface TypeAwareProjectMeta {
1817
+ /**
1818
+ * Project config relative to the analysis root, or `<inferred>`.
1819
+ */
1820
+ config: string
1821
+ source: TypeAwareProjectSource
1822
+ status: TypeAwareProjectStatus
1823
+ /**
1824
+ * Candidates assigned to this project.
1825
+ */
1826
+ candidate_count: number
1827
+ /**
1828
+ * Candidates confirmed as used and removed.
1829
+ */
1830
+ confirmed_used_count: number
1831
+ /**
1832
+ * Candidates retained because they implement or override a contract.
1833
+ */
1834
+ contract_preserved_count: number
1835
+ /**
1836
+ * Candidates with complete no-static-reference evidence.
1837
+ */
1838
+ no_static_references_count: number
1839
+ /**
1840
+ * Candidates eligible for a guarded class-member fix.
1841
+ */
1842
+ fix_eligible_count: number
1843
+ /**
1844
+ * Candidates whose exact semantic outcome remained unresolved.
1845
+ */
1846
+ unresolved_count: number
1847
+ /**
1848
+ * Candidates retained without scanning because the project was unsafe.
1849
+ */
1850
+ abstained_count: number
1851
+ /**
1852
+ * Config, program, syntactic, and bind diagnostics that block scanning.
940
1853
  */
941
- next_steps?: NextStep[]
942
- }
1854
+ blocking_diagnostic_count: number
943
1855
  /**
944
- * Per-category summary counts for the audit result.
1856
+ * Source files loaded into this TypeScript program.
945
1857
  */
946
- export interface AuditSummary {
947
- dead_code_issues: number
948
- dead_code_has_errors: boolean
949
- complexity_findings: number
950
- max_cyclomatic?: (number | null)
951
- duplication_clone_groups: number
952
- }
1858
+ source_file_count: number
953
1859
  /**
954
- * New-vs-inherited issue counts for audit.
1860
+ * Whether this Program served more than one semantic query in the batch.
955
1861
  */
956
- export interface AuditAttribution {
957
- gate: AuditGate
958
- dead_code_introduced: number
959
- dead_code_inherited: number
960
- complexity_introduced: number
961
- complexity_inherited: number
962
- duplication_introduced: number
963
- duplication_inherited: number
964
- styling_introduced: number
965
- styling_inherited: number
966
- }
1862
+ program_reused?: (boolean | null)
967
1863
  /**
968
- * Metric and rule definitions emitted under `_meta` when `--explain` is
969
- * passed (always present in MCP responses). Helps AI agents and CI systems
970
- * interpret metric values without re-reading the docs site.
1864
+ * Whether this Program served more than one query in the current batch.
971
1865
  */
972
- export interface Meta {
1866
+ program_shared_across_queries?: (boolean | null)
973
1867
  /**
974
- * URL to the documentation page for this command.
1868
+ * Whether the root-bound semantic session reused the prior snapshot.
975
1869
  */
976
- docs?: (string | null)
1870
+ program_reused_from_previous_snapshot?: (boolean | null)
977
1871
  /**
978
- * Local telemetry correlation metadata for agent follow-up runs.
1872
+ * Monotonic revision within the root-bound semantic session.
979
1873
  */
980
- telemetry?: (TelemetryMeta | null)
1874
+ snapshot_revision?: (number | null)
981
1875
  /**
982
- * Per-field definitions for envelope fields and action payload fields.
1876
+ * Full, incremental, or no invalidation before this query.
983
1877
  */
984
- field_definitions?: {
985
- [k: string]: string
986
- }
1878
+ invalidation_kind?: (TypeAwareInvalidationKind | null)
987
1879
  /**
988
- * Per-metric definitions: name, description, range, interpretation.
1880
+ * Stable project-level gap reason.
989
1881
  */
990
- metrics?: {
991
- [k: string]: MetaMetric
1882
+ reason_code?: (SemanticGapReason | null)
1883
+ abstain_reason?: TypeAwareAbstentionReason
992
1884
  }
993
1885
  /**
994
- * Per-rule definitions for check command output.
1886
+ * Semantic sidecar timings, separated from Fallow's syntactic pipeline.
995
1887
  */
996
- rules?: {
997
- [k: string]: MetaRule
998
- }
999
- }
1888
+ export interface TypeAwarePhaseTimings {
1000
1889
  /**
1001
- * Privacy-safe local run metadata emitted for JSON consumers.
1890
+ * TypeScript API construction and project snapshot selection.
1002
1891
  */
1003
- export interface TelemetryMeta {
1892
+ project_setup: number
1004
1893
  /**
1005
- * Ephemeral local token that may be passed to the hidden `--parent-run`
1006
- * flag on a later command. It is not derived from repository, path, user,
1007
- * machine, project, or cloud data.
1894
+ * TypeScript diagnostics collected before any candidate refinement.
1008
1895
  */
1009
- analysis_run_id?: (string | null)
1896
+ diagnostics: number
1897
+ /**
1898
+ * Batched symbol lookup and exact declaration matching.
1899
+ */
1900
+ symbol_scan: number
1010
1901
  }
1011
1902
  /**
1012
1903
  * Single-metric definition inside [`Meta::metrics`].
@@ -1238,19 +2129,21 @@ empty_catalog_groups?: EmptyCatalogGroupFinding[]
1238
2129
  */
1239
2130
  unresolved_catalog_references?: UnresolvedCatalogReferenceFinding[]
1240
2131
  /**
1241
- * Entries in pnpm-workspace.yaml's overrides: section, or package.json's
1242
- * pnpm.overrides block, whose target package is not declared by any
1243
- * workspace package and is not present in pnpm-lock.yaml. Default severity
2132
+ * Entries in pnpm-workspace.yaml's overrides: section, package.json's
2133
+ * pnpm.overrides block, or package.json's top-level npm overrides object,
2134
+ * whose target package is not declared by any workspace package and is
2135
+ * not present in pnpm-lock.yaml or package-lock.json. Default severity
1244
2136
  * is warn because projects without a readable lockfile fall back to
1245
2137
  * manifest-only checks; the hint field flags those conservative cases.
1246
2138
  * Wrapped in [`UnusedDependencyOverrideFinding`].
1247
2139
  */
1248
2140
  unused_dependency_overrides?: UnusedDependencyOverrideFinding[]
1249
2141
  /**
1250
- * pnpm.overrides entries whose key or value does not parse as a valid
1251
- * override spec (empty key, empty value, malformed selector, unbalanced
1252
- * parent matcher). pnpm install will reject these. Default severity is
1253
- * error. Wrapped in [`MisconfiguredDependencyOverrideFinding`].
2142
+ * pnpm.overrides or npm overrides entries whose key or value does not
2143
+ * parse as a valid override spec (empty key, empty value, malformed
2144
+ * selector, unbalanced parent matcher). The package manager will reject
2145
+ * these at install time. Default severity is error. Wrapped in
2146
+ * [`MisconfiguredDependencyOverrideFinding`].
1254
2147
  */
1255
2148
  misconfigured_dependency_overrides?: MisconfiguredDependencyOverrideFinding[]
1256
2149
  /**
@@ -1821,6 +2714,10 @@ is_re_export: boolean
1821
2714
  * forward-compat).
1822
2715
  */
1823
2716
  actions: IssueAction[]
2717
+ /**
2718
+ * Type-aware evidence for this exact candidate when requested.
2719
+ */
2720
+ semantic?: (SemanticCandidateDecision | null)
1824
2721
  /**
1825
2722
  * Set by the audit pass when this finding is introduced relative to
1826
2723
  * the merge-base.
@@ -1867,6 +2764,10 @@ is_re_export: boolean
1867
2764
  * forward-compat).
1868
2765
  */
1869
2766
  actions: IssueAction[]
2767
+ /**
2768
+ * Type-aware evidence for this exact candidate when requested.
2769
+ */
2770
+ semantic?: (SemanticCandidateDecision | null)
1870
2771
  /**
1871
2772
  * Set by the audit pass when this finding is introduced relative to
1872
2773
  * the merge-base.
@@ -1903,6 +2804,11 @@ col: number
1903
2804
  * Byte offset of the type reference.
1904
2805
  */
1905
2806
  span_start: number
2807
+ /**
2808
+ * Exact checker-backed provenance when type-aware analysis confirmed the
2809
+ * package-public leak across files or re-exports.
2810
+ */
2811
+ semantic?: (SemanticPrivateTypeLeak | null)
1906
2812
  /**
1907
2813
  * Suggested next steps. Always emitted (possibly empty for
1908
2814
  * forward-compat).
@@ -2095,6 +3001,10 @@ col: number
2095
3001
  * forward-compat).
2096
3002
  */
2097
3003
  actions: IssueAction[]
3004
+ /**
3005
+ * Type-aware evidence for this exact candidate when requested.
3006
+ */
3007
+ semantic?: (SemanticCandidateDecision | null)
2098
3008
  /**
2099
3009
  * Set by the audit pass when this finding is introduced relative to
2100
3010
  * the merge-base.
@@ -7187,6 +8097,7 @@ target: InspectTargetDescriptor
7187
8097
  identity: InspectIdentity
7188
8098
  evidence: InspectEvidence
7189
8099
  warnings: string[]
8100
+ _meta?: (Meta | null)
7190
8101
  }
7191
8102
  export interface InspectFileIdentity {
7192
8103
  file: string
@@ -7224,6 +8135,26 @@ churn?: (InspectEvidenceSection | null)
7224
8135
  * best-effort and not part of the trusted ranked evidence.
7225
8136
  */
7226
8137
  symbol_chain?: (InspectEvidenceSection | null)
8138
+ /**
8139
+ * Checker-backed declaration, alias, re-export, and use-site evidence.
8140
+ * Present only for a symbol target in type-aware mode.
8141
+ */
8142
+ semantic_trace?: (InspectEvidenceSection | null)
8143
+ /**
8144
+ * Package-public TypeScript surface and private-type reachability.
8145
+ * Present only for a symbol target in type-aware mode.
8146
+ */
8147
+ api_surface?: (InspectEvidenceSection | null)
8148
+ /**
8149
+ * Exact-symbol consumers and transitive affected files.
8150
+ * Present only for a symbol target in type-aware mode.
8151
+ */
8152
+ symbol_impact?: (InspectEvidenceSection | null)
8153
+ /**
8154
+ * Test entry points reachable from the exact symbol, with provenance.
8155
+ * Present only for a symbol target in type-aware mode.
8156
+ */
8157
+ targeted_tests?: (InspectEvidenceSection | null)
7227
8158
  }
7228
8159
  export interface InspectEvidenceSection {
7229
8160
  status: InspectSectionStatus
@@ -7231,6 +8162,318 @@ scope: InspectEvidenceScope
7231
8162
  message?: (string | null)
7232
8163
  data?: unknown
7233
8164
  }
8165
+ /**
8166
+ * Result of tracing an export: why it is considered used or unused.
8167
+ */
8168
+ export interface ExportTrace {
8169
+ /**
8170
+ * The file containing the export.
8171
+ */
8172
+ file: string
8173
+ /**
8174
+ * The export name being traced.
8175
+ */
8176
+ export_name: string
8177
+ /**
8178
+ * Whether the file is reachable from an entry point.
8179
+ */
8180
+ file_reachable: boolean
8181
+ /**
8182
+ * Whether the file is an entry point.
8183
+ */
8184
+ is_entry_point: boolean
8185
+ /**
8186
+ * Whether the export is considered used.
8187
+ */
8188
+ is_used: boolean
8189
+ /**
8190
+ * Files that reference this export directly.
8191
+ */
8192
+ direct_references: ExportReference[]
8193
+ /**
8194
+ * Re-export chains that pass through this export.
8195
+ */
8196
+ re_export_chains: ReExportChain[]
8197
+ /**
8198
+ * Human-readable reason summary.
8199
+ */
8200
+ reason: string
8201
+ /**
8202
+ * Exact checker-backed references when type-aware tracing is enabled.
8203
+ */
8204
+ semantic?: (SemanticSymbolTrace | null)
8205
+ }
8206
+ /**
8207
+ * A direct reference to an export.
8208
+ */
8209
+ export interface ExportReference {
8210
+ /**
8211
+ * File that contains the reference.
8212
+ */
8213
+ from_file: string
8214
+ /**
8215
+ * Reference kind, such as named import, default import, or re-export.
8216
+ */
8217
+ kind: string
8218
+ }
8219
+ /**
8220
+ * A re-export chain showing how an export is propagated.
8221
+ */
8222
+ export interface ReExportChain {
8223
+ /**
8224
+ * The barrel file that re-exports this symbol.
8225
+ */
8226
+ barrel_file: string
8227
+ /**
8228
+ * The name it is re-exported as.
8229
+ */
8230
+ exported_as: string
8231
+ /**
8232
+ * Number of references on the barrel's re-exported symbol.
8233
+ */
8234
+ reference_count: number
8235
+ }
8236
+ /**
8237
+ * Result of tracing a class / enum / store MEMBER: the `--trace FILE:NAME`
8238
+ * fallback when `NAME` is not a top-level export but a member declared on one
8239
+ * (issue #1744). The trace runs on the module graph only, so it reports the
8240
+ * OWNING export's reachability and usage (the gating precondition for
8241
+ * member-level crediting) plus a pointer to the right `--unused-*-members`
8242
+ * command, rather than per-member crediting provenance.
8243
+ */
8244
+ export interface ClassMemberTrace {
8245
+ /**
8246
+ * The file containing the member.
8247
+ */
8248
+ file: string
8249
+ /**
8250
+ * The member name being traced.
8251
+ */
8252
+ member_name: string
8253
+ /**
8254
+ * The member kind: `class-method`, `class-property`, `enum-member`,
8255
+ * `store-member`, or `namespace-member`.
8256
+ */
8257
+ member_kind: string
8258
+ /**
8259
+ * The export that declares this member (the class / enum / store name).
8260
+ */
8261
+ owner_export: string
8262
+ /**
8263
+ * Whether the owning export is considered used.
8264
+ */
8265
+ owner_is_used: boolean
8266
+ /**
8267
+ * Whether the file is reachable from an entry point.
8268
+ */
8269
+ owner_file_reachable: boolean
8270
+ /**
8271
+ * Whether the file is an entry point.
8272
+ */
8273
+ owner_is_entry_point: boolean
8274
+ /**
8275
+ * Files that reference the owning export directly.
8276
+ */
8277
+ owner_direct_references: ExportReference[]
8278
+ /**
8279
+ * Re-export chains through which the owning export is reachable. Populated
8280
+ * so a machine consumer can tell "used via a barrel" (empty direct refs but
8281
+ * non-empty chains) from "genuinely unreferenced".
8282
+ */
8283
+ owner_re_export_chains: ReExportChain[]
8284
+ /**
8285
+ * Human-readable reason summary plus the follow-up command to inspect the
8286
+ * member finding.
8287
+ */
8288
+ reason: string
8289
+ /**
8290
+ * Exact checker-backed member references when type-aware tracing is enabled.
8291
+ */
8292
+ semantic?: (SemanticSymbolTrace | null)
8293
+ }
8294
+ /**
8295
+ * Result of tracing all edges for a file.
8296
+ */
8297
+ export interface FileTrace {
8298
+ /**
8299
+ * The traced file.
8300
+ */
8301
+ file: string
8302
+ /**
8303
+ * Whether this file is reachable from entry points.
8304
+ */
8305
+ is_reachable: boolean
8306
+ /**
8307
+ * Whether this file is an entry point.
8308
+ */
8309
+ is_entry_point: boolean
8310
+ /**
8311
+ * Exports declared by this file.
8312
+ */
8313
+ exports: TracedExport[]
8314
+ /**
8315
+ * Files that this file imports from.
8316
+ */
8317
+ imports_from: string[]
8318
+ /**
8319
+ * Files that import from this file.
8320
+ */
8321
+ imported_by: string[]
8322
+ /**
8323
+ * Re-exports declared by this file.
8324
+ */
8325
+ re_exports: TracedReExport[]
8326
+ }
8327
+ /**
8328
+ * An export with usage information.
8329
+ */
8330
+ export interface TracedExport {
8331
+ /**
8332
+ * Export name.
8333
+ */
8334
+ name: string
8335
+ /**
8336
+ * Whether the export is type-only.
8337
+ */
8338
+ is_type_only: boolean
8339
+ /**
8340
+ * Number of references to this export.
8341
+ */
8342
+ reference_count: number
8343
+ /**
8344
+ * Files that reference this export.
8345
+ */
8346
+ referenced_by: ExportReference[]
8347
+ }
8348
+ /**
8349
+ * A re-export with source information.
8350
+ */
8351
+ export interface TracedReExport {
8352
+ /**
8353
+ * Source file being re-exported from.
8354
+ */
8355
+ source_file: string
8356
+ /**
8357
+ * Imported symbol name.
8358
+ */
8359
+ imported_name: string
8360
+ /**
8361
+ * Exported symbol name.
8362
+ */
8363
+ exported_name: string
8364
+ }
8365
+ /**
8366
+ * Result of tracing a dependency: where it is used.
8367
+ */
8368
+ export interface DependencyTrace {
8369
+ /**
8370
+ * The dependency name being traced.
8371
+ */
8372
+ package_name: string
8373
+ /**
8374
+ * Files that import this dependency.
8375
+ */
8376
+ imported_by: string[]
8377
+ /**
8378
+ * Files that import this dependency with type-only imports.
8379
+ */
8380
+ type_only_imported_by: string[]
8381
+ /**
8382
+ * Whether the dependency is invoked from package.json scripts or CI configs.
8383
+ */
8384
+ used_in_scripts: boolean
8385
+ /**
8386
+ * Whether the dependency is used at all.
8387
+ */
8388
+ is_used: boolean
8389
+ /**
8390
+ * Total import count.
8391
+ */
8392
+ import_count: number
8393
+ }
8394
+ /**
8395
+ * Result of tracing a clone: all groups containing the code at a source
8396
+ * location or addressed by a stable clone fingerprint.
8397
+ */
8398
+ export interface CloneTrace {
8399
+ /**
8400
+ * File passed to the trace request, root-relative when a group matches.
8401
+ */
8402
+ file: string
8403
+ /**
8404
+ * 1-based line passed to the trace request or representative group line.
8405
+ */
8406
+ line: number
8407
+ /**
8408
+ * The matched clone instance, if one exists.
8409
+ */
8410
+ matched_instance?: (CloneInstance | null)
8411
+ /**
8412
+ * Clone groups matched by the trace request.
8413
+ */
8414
+ clone_groups: TracedCloneGroup[]
8415
+ }
8416
+ /**
8417
+ * One clone group returned from a clone trace request.
8418
+ */
8419
+ export interface TracedCloneGroup {
8420
+ /**
8421
+ * Stable content fingerprint, usually `dup:<8hex>` and widened on rare
8422
+ * report collisions.
8423
+ */
8424
+ fingerprint: string
8425
+ /**
8426
+ * Number of tokens in the duplicated block.
8427
+ */
8428
+ token_count: number
8429
+ /**
8430
+ * Number of lines in the duplicated block.
8431
+ */
8432
+ line_count: number
8433
+ /**
8434
+ * Root-relative clone instances in this group.
8435
+ */
8436
+ instances: CloneInstance[]
8437
+ suggestion: RefactoringSuggestion
8438
+ /**
8439
+ * Best-effort name for the extracted function. Advisory only.
8440
+ */
8441
+ suggested_name?: (string | null)
8442
+ }
8443
+ /**
8444
+ * Result of computing the impact closure for a single file as the seed.
8445
+ */
8446
+ export interface ImpactClosureTrace {
8447
+ /**
8448
+ * The seed file, root-relative.
8449
+ */
8450
+ seed: string
8451
+ /**
8452
+ * Root-relative paths transitively affected by the seed.
8453
+ */
8454
+ affected_not_shown: string[]
8455
+ /**
8456
+ * Coordination gaps between the seed and consumers.
8457
+ */
8458
+ coordination_gap: ImpactClosureGap[]
8459
+ }
8460
+ /**
8461
+ * One coordination-gap entry in an [`ImpactClosureTrace`].
8462
+ */
8463
+ export interface ImpactClosureGap {
8464
+ /**
8465
+ * Root-relative path of the consumer module.
8466
+ */
8467
+ consumer_file: string
8468
+ /**
8469
+ * Exported symbol names the consumer references.
8470
+ */
8471
+ consumed_symbols: string[]
8472
+ /**
8473
+ * Scope note for the syntactic trace.
8474
+ */
8475
+ note: string
8476
+ }
7234
8477
  /**
7235
8478
  * The result of a symbol-level call-chain trace. Its own surface (`kind:
7236
8479
  * "trace"`), NOT folded into the ranked brief.
@@ -7377,6 +8620,7 @@ export interface ReviewEnvelopeMeta {
7377
8620
  schema: ReviewEnvelopeSchema
7378
8621
  provider: ReviewProvider
7379
8622
  check_conclusion?: (ReviewCheckConclusion | null)
8623
+ review_id?: (ReviewId | null)
7380
8624
  }
7381
8625
  /**
7382
8626
  * Envelope emitted by `fallow ci reconcile-review --format json`. Used by
@@ -8165,19 +9409,21 @@ empty_catalog_groups?: EmptyCatalogGroupFinding[]
8165
9409
  */
8166
9410
  unresolved_catalog_references?: UnresolvedCatalogReferenceFinding[]
8167
9411
  /**
8168
- * Entries in pnpm-workspace.yaml's overrides: section, or package.json's
8169
- * pnpm.overrides block, whose target package is not declared by any
8170
- * workspace package and is not present in pnpm-lock.yaml. Default severity
9412
+ * Entries in pnpm-workspace.yaml's overrides: section, package.json's
9413
+ * pnpm.overrides block, or package.json's top-level npm overrides object,
9414
+ * whose target package is not declared by any workspace package and is
9415
+ * not present in pnpm-lock.yaml or package-lock.json. Default severity
8171
9416
  * is warn because projects without a readable lockfile fall back to
8172
9417
  * manifest-only checks; the hint field flags those conservative cases.
8173
9418
  * Wrapped in [`UnusedDependencyOverrideFinding`].
8174
9419
  */
8175
9420
  unused_dependency_overrides?: UnusedDependencyOverrideFinding[]
8176
9421
  /**
8177
- * pnpm.overrides entries whose key or value does not parse as a valid
8178
- * override spec (empty key, empty value, malformed selector, unbalanced
8179
- * parent matcher). pnpm install will reject these. Default severity is
8180
- * error. Wrapped in [`MisconfiguredDependencyOverrideFinding`].
9422
+ * pnpm.overrides or npm overrides entries whose key or value does not
9423
+ * parse as a valid override spec (empty key, empty value, malformed
9424
+ * selector, unbalanced parent matcher). The package manager will reject
9425
+ * these at install time. Default severity is error. Wrapped in
9426
+ * [`MisconfiguredDependencyOverrideFinding`].
8181
9427
  */
8182
9428
  misconfigured_dependency_overrides?: MisconfiguredDependencyOverrideFinding[]
8183
9429
  /**
@@ -10352,6 +11598,25 @@ reason?: (string | null)
10352
11598
  */
10353
11599
  reason_present: boolean
10354
11600
  }
11601
+ /**
11602
+ * Envelope emitted by `fallow type-aware status --format json`.
11603
+ */
11604
+ export interface TypeAwareStatusOutput {
11605
+ schema_version: SchemaVersion
11606
+ version: ToolVersion
11607
+ available: boolean
11608
+ discovery_source?: (string | null)
11609
+ /**
11610
+ * Root-relative companion path, or only the executable name when the
11611
+ * companion lives outside the analyzed project.
11612
+ */
11613
+ companion_path?: (string | null)
11614
+ package_version?: (string | null)
11615
+ protocol_version: number
11616
+ backend_family?: (string | null)
11617
+ backend_version?: (string | null)
11618
+ remediation?: (string | null)
11619
+ }
10355
11620
  /**
10356
11621
  * Single CodeClimate-compatible issue inside [`CodeClimateOutput`].
10357
11622
  */