fallow 3.30.0 → 3.31.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.
@@ -315,7 +315,7 @@ export type AuditIntroduced = boolean
315
315
  * commands differ: the `fallow audit` `new-only` gate fails only on introduced
316
316
  * findings, so an inherited `error` finding does not fail the audit, and the
317
317
  * combined command (`fallow` without a subcommand) exits 0 for machine
318
- * formats.
318
+ * formats unless `--fail-on-issues` or `--ci` is set.
319
319
  *
320
320
  * Complexity findings carry the same type. The `complexity-cyclomatic`,
321
321
  * `complexity-cognitive` and `complexity-crap` rules set it, and the
@@ -460,7 +460,15 @@ export type BaselineStalenessAdvisory = ("none" | "zero-overlap" | "partial")
460
460
  * `--workspace` and `--changed-workspaces` for the same reason. A consumer
461
461
  * must therefore not assume a given command emits a given name.
462
462
  */
463
- export type ScopeReason = ("diff" | "changed-since" | "changed-files" | "workspace" | "changed-workspaces" | "scope" | "file" | "issue-type-filter" | "production")
463
+ export type ScopeReason = ("diff" | "changed-since" | "package-baselines" | "changed-files" | "workspace" | "changed-workspaces" | "scope" | "file" | "issue-type-filter" | "production" | "include-entry-exports")
464
+ /**
465
+ * One reason why a missing id does not prove that the finding is gone.
466
+ *
467
+ * Serialized as kebab-case inside `inconclusive_reasons`. The set is OPEN: a
468
+ * name this build does not emit means "some reason", not an error, and the
469
+ * query stays inconclusive.
470
+ */
471
+ export type FindingIdQueryReason = ("diff" | "changed-since" | "package-baselines" | "changed-files" | "workspace" | "changed-workspaces" | "scope" | "file" | "issue-type-filter" | "production" | "include-entry-exports" | "baseline" | "rule-off" | "filtered")
464
472
  /**
465
473
  * Status of a regression-check pass.
466
474
  */
@@ -740,6 +748,18 @@ kind: "flag-age-shallow-clone"
740
748
  */
741
749
  cause: string
742
750
  kind: "flag-age-unavailable"
751
+ } | {
752
+ /**
753
+ * The `ignoreDependencies` entry, as written in the config.
754
+ */
755
+ pattern: string
756
+ kind: "ignore-dependencies-glob-unmatched"
757
+ } | {
758
+ /**
759
+ * The `ignoreFindings` entry, as written in the config.
760
+ */
761
+ pattern: string
762
+ kind: "ignore-findings-pattern-unmatched"
743
763
  })
744
764
  /**
745
765
  * Discriminant for [`CloneGroupAction::kind`]. Mirrors the action types
@@ -1667,7 +1687,7 @@ duplication_demoted: number
1667
1687
  * gate and leaves the object absent.
1668
1688
  *
1669
1689
  * The names this build can emit are `error-severity-findings`, `regression`,
1670
- * `stale-baseline`, `duplication-threshold`, `health-min-score`,
1690
+ * `stale-baseline`, `baseline-growth`, `duplication-threshold`, `health-min-score`,
1671
1691
  * `health-min-severity`, `health-findings`, `health-coverage-gaps`,
1672
1692
  * `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`,
1673
1693
  * `type-aware-require` and `parse-error`. The set is OPEN: a name a consumer does not
@@ -1699,7 +1719,7 @@ status: GateStatus
1699
1719
  * True when a `fail` from this gate makes the run exit non-zero. False
1700
1720
  * when the verdict is published for information only: the gate was never
1701
1721
  * armed, the run was told never to fail, or the combined machine formats
1702
- * exit 0 for the gate.
1722
+ * exit 0 for the gate (bare `fallow` without `--fail-on-issues`).
1703
1723
  */
1704
1724
  enforced: boolean
1705
1725
  /**
@@ -2818,6 +2838,12 @@ circular_dependencies: CircularDependencyFinding[]
2818
2838
  * suppression breaks the cycle).
2819
2839
  */
2820
2840
  re_export_cycles?: ReExportCycleFinding[]
2841
+ /**
2842
+ * Dependency cycles between workspace packages, built from resolved
2843
+ * cross-package imports. Wrapped in [`PackageCycleFinding`] so each
2844
+ * entry carries a typed `actions` array natively.
2845
+ */
2846
+ package_cycles?: PackageCycleFinding[]
2821
2847
  /**
2822
2848
  * Imports that cross architecture boundary rules. Wrapped in
2823
2849
  * [`BoundaryViolationFinding`] so each entry carries a typed `actions`
@@ -3046,6 +3072,14 @@ baseline?: (BaselineMatch | null)
3046
3072
  * can report `matched_entries: 0` on a healthy baseline.
3047
3073
  */
3048
3074
  baseline_staleness?: (BaselineStaleness | null)
3075
+ /**
3076
+ * The answer to `--finding-id`, present only when the run received one
3077
+ * or more `--finding-id` values. The report then holds only the
3078
+ * requested findings. Read `missing` as resolved only when `conclusive`
3079
+ * is true; a scope, a baseline or a filter can hide a finding that still
3080
+ * exists. See [`crate::FindingIdQuery`].
3081
+ */
3082
+ finding_id_query?: (FindingIdQuery | null)
3049
3083
  /**
3050
3084
  * Regression verdict against the baseline, in `--fail-on-regression` runs.
3051
3085
  */
@@ -3070,6 +3104,11 @@ gate_outcomes?: (GateOutcomes | null)
3070
3104
  * never "nothing failed". See [`crate::RequestOutcomes`].
3071
3105
  */
3072
3106
  request_outcomes?: (RequestOutcomes | null)
3107
+ /**
3108
+ * Applied Git refs for exact workspace packages. Absent when no package
3109
+ * baselines were selected, including runs with a global changed-since ref.
3110
+ */
3111
+ package_baselines?: PackageBaselineStatus[]
3073
3112
  /**
3074
3113
  * `_meta` block with docs and rule definitions, when `--explain` was
3075
3114
  * passed.
@@ -3090,7 +3129,10 @@ _meta?: (Meta | null)
3090
3129
  * detectors: `malformed-pnpm-workspace-yaml`,
3091
3130
  * `bun-lockb-override-resolution-skipped`;
3092
3131
  * - framework plugins, while they read their own build configs:
3093
- * `plugin-config-unreadable`, `plugin-effect-not-modeled`.
3132
+ * `plugin-config-unreadable`, `plugin-effect-not-modeled`;
3133
+ * - the dead-code result, for config patterns that matched nothing:
3134
+ * `ignore-dependencies-glob-unmatched`,
3135
+ * `ignore-findings-pattern-unmatched`.
3094
3136
  *
3095
3137
  * Analysis-stage and plugin-stage kinds therefore reach only the envelopes
3096
3138
  * whose run includes a dead-code analyze pass, never a standalone
@@ -3272,6 +3314,10 @@ circular_dependencies: number
3272
3314
  * re-exporting from each other in a loop).
3273
3315
  */
3274
3316
  re_export_cycles?: number
3317
+ /**
3318
+ * Dependency cycles between workspace packages.
3319
+ */
3320
+ package_cycles?: number
3275
3321
  /**
3276
3322
  * Imports that cross architecture boundary rules.
3277
3323
  */
@@ -3351,6 +3397,14 @@ export interface UnusedFileFinding {
3351
3397
  * Absolute path to the unused file.
3352
3398
  */
3353
3399
  path: string
3400
+ /**
3401
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3402
+ * `~<k>` suffix when several findings of one type share an identity.
3403
+ * Line and column are not inputs, so the id survives line shifts,
3404
+ * reformats and reorders. A rename of the file or the symbol gives a
3405
+ * new id. Absent in output from older versions.
3406
+ */
3407
+ finding_id?: (string | null)
3354
3408
  /**
3355
3409
  * Suggested next steps: a `delete-file` primary and a `suppress-file`
3356
3410
  * secondary. Always emitted (possibly empty for forward-compat).
@@ -3582,6 +3636,14 @@ deprecated?: boolean
3582
3636
  * not deprecated or the tag carries no text.
3583
3637
  */
3584
3638
  deprecated_reason?: (string | null)
3639
+ /**
3640
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3641
+ * `~<k>` suffix when several findings of one type share an identity.
3642
+ * Line and column are not inputs, so the id survives line shifts,
3643
+ * reformats and reorders. A rename of the file or the symbol gives a
3644
+ * new id. Absent in output from older versions.
3645
+ */
3646
+ finding_id?: (string | null)
3585
3647
  /**
3586
3648
  * Suggested next steps. Always emitted (possibly empty for
3587
3649
  * forward-compat).
@@ -3657,6 +3719,14 @@ deprecated?: boolean
3657
3719
  * not deprecated or the tag carries no text.
3658
3720
  */
3659
3721
  deprecated_reason?: (string | null)
3722
+ /**
3723
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3724
+ * `~<k>` suffix when several findings of one type share an identity.
3725
+ * Line and column are not inputs, so the id survives line shifts,
3726
+ * reformats and reorders. A rename of the file or the symbol gives a
3727
+ * new id. Absent in output from older versions.
3728
+ */
3729
+ finding_id?: (string | null)
3660
3730
  /**
3661
3731
  * Suggested next steps. Always emitted (possibly empty for
3662
3732
  * forward-compat).
@@ -3722,6 +3792,14 @@ span_start: number
3722
3792
  * package-public leak across files or re-exports.
3723
3793
  */
3724
3794
  semantic?: (SemanticPrivateTypeLeak | null)
3795
+ /**
3796
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3797
+ * `~<k>` suffix when several findings of one type share an identity.
3798
+ * Line and column are not inputs, so the id survives line shifts,
3799
+ * reformats and reorders. A rename of the file or the symbol gives a
3800
+ * new id. Absent in output from older versions.
3801
+ */
3802
+ finding_id?: (string | null)
3725
3803
  /**
3726
3804
  * Suggested next steps. Always emitted (possibly empty for
3727
3805
  * forward-compat).
@@ -3794,6 +3872,14 @@ consumers: DeprecatedExportConsumer[]
3794
3872
  * are not visible, so the finding makes no removal claim.
3795
3873
  */
3796
3874
  public_api: boolean
3875
+ /**
3876
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3877
+ * `~<k>` suffix when several findings of one type share an identity.
3878
+ * Line and column are not inputs, so the id survives line shifts,
3879
+ * reformats and reorders. A rename of the file or the symbol gives a
3880
+ * new id. Absent in output from older versions.
3881
+ */
3882
+ finding_id?: (string | null)
3797
3883
  /**
3798
3884
  * Suggested next steps. Always emitted (possibly empty for
3799
3885
  * forward-compat).
@@ -3856,6 +3942,14 @@ line: number
3856
3942
  * Workspace roots that import this package even though the declaring workspace does not.
3857
3943
  */
3858
3944
  used_in_workspaces?: string[]
3945
+ /**
3946
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
3947
+ * `~<k>` suffix when several findings of one type share an identity.
3948
+ * Line and column are not inputs, so the id survives line shifts,
3949
+ * reformats and reorders. A rename of the file or the symbol gives a
3950
+ * new id. Absent in output from older versions.
3951
+ */
3952
+ finding_id?: (string | null)
3859
3953
  /**
3860
3954
  * Suggested next steps. Always emitted (possibly empty for
3861
3955
  * forward-compat).
@@ -3909,6 +4003,14 @@ line: number
3909
4003
  * Workspace roots that import this package even though the declaring workspace does not.
3910
4004
  */
3911
4005
  used_in_workspaces?: string[]
4006
+ /**
4007
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4008
+ * `~<k>` suffix when several findings of one type share an identity.
4009
+ * Line and column are not inputs, so the id survives line shifts,
4010
+ * reformats and reorders. A rename of the file or the symbol gives a
4011
+ * new id. Absent in output from older versions.
4012
+ */
4013
+ finding_id?: (string | null)
3912
4014
  /**
3913
4015
  * Suggested next steps. Always emitted (possibly empty for
3914
4016
  * forward-compat).
@@ -3962,6 +4064,14 @@ line: number
3962
4064
  * Workspace roots that import this package even though the declaring workspace does not.
3963
4065
  */
3964
4066
  used_in_workspaces?: string[]
4067
+ /**
4068
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4069
+ * `~<k>` suffix when several findings of one type share an identity.
4070
+ * Line and column are not inputs, so the id survives line shifts,
4071
+ * reformats and reorders. A rename of the file or the symbol gives a
4072
+ * new id. Absent in output from older versions.
4073
+ */
4074
+ finding_id?: (string | null)
3965
4075
  /**
3966
4076
  * Suggested next steps. Always emitted (possibly empty for
3967
4077
  * forward-compat).
@@ -4015,6 +4125,14 @@ line: number
4015
4125
  * 0-based byte column offset.
4016
4126
  */
4017
4127
  col: number
4128
+ /**
4129
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4130
+ * `~<k>` suffix when several findings of one type share an identity.
4131
+ * Line and column are not inputs, so the id survives line shifts,
4132
+ * reformats and reorders. A rename of the file or the symbol gives a
4133
+ * new id. Absent in output from older versions.
4134
+ */
4135
+ finding_id?: (string | null)
4018
4136
  /**
4019
4137
  * Suggested next steps. Always emitted (possibly empty for
4020
4138
  * forward-compat).
@@ -4070,6 +4188,14 @@ line: number
4070
4188
  * 0-based byte column offset.
4071
4189
  */
4072
4190
  col: number
4191
+ /**
4192
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4193
+ * `~<k>` suffix when several findings of one type share an identity.
4194
+ * Line and column are not inputs, so the id survives line shifts,
4195
+ * reformats and reorders. A rename of the file or the symbol gives a
4196
+ * new id. Absent in output from older versions.
4197
+ */
4198
+ finding_id?: (string | null)
4073
4199
  /**
4074
4200
  * Suggested next steps. Always emitted (possibly empty for
4075
4201
  * forward-compat).
@@ -4134,6 +4260,14 @@ line: number
4134
4260
  * 0-based byte column offset.
4135
4261
  */
4136
4262
  col: number
4263
+ /**
4264
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4265
+ * `~<k>` suffix when several findings of one type share an identity.
4266
+ * Line and column are not inputs, so the id survives line shifts,
4267
+ * reformats and reorders. A rename of the file or the symbol gives a
4268
+ * new id. Absent in output from older versions.
4269
+ */
4270
+ finding_id?: (string | null)
4137
4271
  /**
4138
4272
  * Suggested next steps. Always emitted (possibly empty for
4139
4273
  * forward-compat).
@@ -4191,6 +4325,14 @@ col: number
4191
4325
  * Used by the LSP to underline just the specifier, not the entire import line.
4192
4326
  */
4193
4327
  specifier_col: number
4328
+ /**
4329
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4330
+ * `~<k>` suffix when several findings of one type share an identity.
4331
+ * Line and column are not inputs, so the id survives line shifts,
4332
+ * reformats and reorders. A rename of the file or the symbol gives a
4333
+ * new id. Absent in output from older versions.
4334
+ */
4335
+ finding_id?: (string | null)
4194
4336
  /**
4195
4337
  * Suggested next steps. Always emitted (possibly empty for
4196
4338
  * forward-compat).
@@ -4224,6 +4366,14 @@ package_name: string
4224
4366
  * Import sites where this unlisted dependency is used (file path, line, column).
4225
4367
  */
4226
4368
  imported_from: ImportSite[]
4369
+ /**
4370
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4371
+ * `~<k>` suffix when several findings of one type share an identity.
4372
+ * Line and column are not inputs, so the id survives line shifts,
4373
+ * reformats and reorders. A rename of the file or the symbol gives a
4374
+ * new id. Absent in output from older versions.
4375
+ */
4376
+ finding_id?: (string | null)
4227
4377
  /**
4228
4378
  * Suggested next steps. Always emitted (possibly empty for
4229
4379
  * forward-compat).
@@ -4281,6 +4431,14 @@ export_name: string
4281
4431
  * Locations where this export name appears.
4282
4432
  */
4283
4433
  locations: DuplicateLocation[]
4434
+ /**
4435
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4436
+ * `~<k>` suffix when several findings of one type share an identity.
4437
+ * Line and column are not inputs, so the id survives line shifts,
4438
+ * reformats and reorders. A rename of the file or the symbol gives a
4439
+ * new id. Absent in output from older versions.
4440
+ */
4441
+ finding_id?: (string | null)
4284
4442
  /**
4285
4443
  * Suggested next steps. Always emitted (possibly empty for
4286
4444
  * forward-compat).
@@ -4334,6 +4492,14 @@ path: string
4334
4492
  * 1-based line number of the dependency entry in package.json.
4335
4493
  */
4336
4494
  line: number
4495
+ /**
4496
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4497
+ * `~<k>` suffix when several findings of one type share an identity.
4498
+ * Line and column are not inputs, so the id survives line shifts,
4499
+ * reformats and reorders. A rename of the file or the symbol gives a
4500
+ * new id. Absent in output from older versions.
4501
+ */
4502
+ finding_id?: (string | null)
4337
4503
  /**
4338
4504
  * Suggested next steps. Always emitted (possibly empty for
4339
4505
  * forward-compat).
@@ -4371,6 +4537,14 @@ path: string
4371
4537
  * 1-based line number of the dependency entry in package.json.
4372
4538
  */
4373
4539
  line: number
4540
+ /**
4541
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4542
+ * `~<k>` suffix when several findings of one type share an identity.
4543
+ * Line and column are not inputs, so the id survives line shifts,
4544
+ * reformats and reorders. A rename of the file or the symbol gives a
4545
+ * new id. Absent in output from older versions.
4546
+ */
4547
+ finding_id?: (string | null)
4374
4548
  /**
4375
4549
  * Suggested next steps. Always emitted (possibly empty for
4376
4550
  * forward-compat).
@@ -4409,6 +4583,14 @@ path: string
4409
4583
  * 1-based line number of the dependency entry in package.json.
4410
4584
  */
4411
4585
  line: number
4586
+ /**
4587
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4588
+ * `~<k>` suffix when several findings of one type share an identity.
4589
+ * Line and column are not inputs, so the id survives line shifts,
4590
+ * reformats and reorders. A rename of the file or the symbol gives a
4591
+ * new id. Absent in output from older versions.
4592
+ */
4593
+ finding_id?: (string | null)
4412
4594
  /**
4413
4595
  * Suggested next steps. Always emitted (possibly empty for
4414
4596
  * forward-compat).
@@ -4463,6 +4645,14 @@ edges?: CircularDependencyEdge[]
4463
4645
  * Whether this cycle crosses workspace package boundaries.
4464
4646
  */
4465
4647
  is_cross_package?: boolean
4648
+ /**
4649
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4650
+ * `~<k>` suffix when several findings of one type share an identity.
4651
+ * Line and column are not inputs, so the id survives line shifts,
4652
+ * reformats and reorders. A rename of the file or the symbol gives a
4653
+ * new id. Absent in output from older versions.
4654
+ */
4655
+ finding_id?: (string | null)
4466
4656
  /**
4467
4657
  * Suggested next steps. Always emitted (possibly empty for
4468
4658
  * forward-compat).
@@ -4525,6 +4715,14 @@ export interface ReExportCycleFinding {
4525
4715
  */
4526
4716
  files: string[]
4527
4717
  kind: ReExportCycleKind
4718
+ /**
4719
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4720
+ * `~<k>` suffix when several findings of one type share an identity.
4721
+ * Line and column are not inputs, so the id survives line shifts,
4722
+ * reformats and reorders. A rename of the file or the symbol gives a
4723
+ * new id. Absent in output from older versions.
4724
+ */
4725
+ finding_id?: (string | null)
4528
4726
  /**
4529
4727
  * Suggested next steps. Always emitted (possibly empty for
4530
4728
  * forward-compat).
@@ -4543,6 +4741,109 @@ introduced?: (AuditIntroduced | null)
4543
4741
  */
4544
4742
  effective_severity?: (EffectiveSeverity | null)
4545
4743
  }
4744
+ /**
4745
+ * Wire-shape envelope for a [`PackageCycle`] finding. Mirrors
4746
+ * [`CircularDependencyFinding`]: flattens the bare finding and carries a
4747
+ * typed `actions` array (`refactor-cycle` primary plus `suppress-line`
4748
+ * secondary).
4749
+ */
4750
+ export interface PackageCycleFinding {
4751
+ /**
4752
+ * Workspace package labels in cycle order. The first entry is the
4753
+ * lexicographically smallest label; the last entry imports the first.
4754
+ * A label is the package name. When two or more workspace packages
4755
+ * share a name, the label is `name (root)` with the project-relative
4756
+ * package root, so that each label names one package.
4757
+ */
4758
+ packages: string[]
4759
+ /**
4760
+ * Package root directories in cycle order: `package_roots[i]` is the
4761
+ * root of `packages[i]`.
4762
+ */
4763
+ package_roots: string[]
4764
+ /**
4765
+ * Number of packages in the cycle.
4766
+ */
4767
+ length: number
4768
+ /**
4769
+ * One example import per hop, in cycle order: `edges[i]` goes from
4770
+ * `packages[i]` to `packages[(i + 1) % length]`.
4771
+ */
4772
+ edges: PackageCycleEdge[]
4773
+ /**
4774
+ * True when the group of packages that holds this cycle has more
4775
+ * cycles than fallow lists. The listing stops at 20 cycles per group,
4776
+ * or earlier on a very dense package graph. Break a listed cycle and
4777
+ * run again to see the rest.
4778
+ */
4779
+ group_truncated: boolean
4780
+ /**
4781
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4782
+ * `~<k>` suffix when several findings of one type share an identity.
4783
+ * Line and column are not inputs, so the id survives line shifts,
4784
+ * reformats and reorders. A rename of the file or the symbol gives a
4785
+ * new id. Absent in output from older versions.
4786
+ */
4787
+ finding_id?: (string | null)
4788
+ /**
4789
+ * Suggested next steps. Always emitted (possibly empty for
4790
+ * forward-compat).
4791
+ */
4792
+ actions: IssueAction[]
4793
+ /**
4794
+ * Set by the audit pass when this finding is introduced relative to
4795
+ * the merge-base.
4796
+ */
4797
+ introduced?: (AuditIntroduced | null)
4798
+ /**
4799
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4800
+ * resolve for its path. CI formats read it for the annotation, SARIF
4801
+ * and CodeClimate level. Absent in output from older versions. Not
4802
+ * part of the finding identity, baseline keys or fingerprints.
4803
+ */
4804
+ effective_severity?: (EffectiveSeverity | null)
4805
+ }
4806
+ /**
4807
+ * One package hop in a [`PackageCycle`]: `from_package` imports
4808
+ * `to_package`, and `path` holds one example import for that hop.
4809
+ *
4810
+ * The example import is the first runtime import by `(path, line)`. When
4811
+ * every import on the hop is type-only, it is the first type-only import.
4812
+ */
4813
+ export interface PackageCycleEdge {
4814
+ /**
4815
+ * Label of the importing workspace package, as in
4816
+ * [`PackageCycle::packages`].
4817
+ */
4818
+ from_package: string
4819
+ /**
4820
+ * Label of the imported workspace package, as in
4821
+ * [`PackageCycle::packages`].
4822
+ */
4823
+ to_package: string
4824
+ /**
4825
+ * File in `from_package` that holds the example import.
4826
+ */
4827
+ path: string
4828
+ /**
4829
+ * File in `to_package` that the example import resolves to.
4830
+ */
4831
+ target_path: string
4832
+ /**
4833
+ * 1-based line number of the example import.
4834
+ */
4835
+ line: number
4836
+ /**
4837
+ * 0-based byte column offset of the example import.
4838
+ */
4839
+ col: number
4840
+ /**
4841
+ * True when every import from `from_package` to `to_package` is
4842
+ * type-only. A type-only hop has no runtime effect, but it can still
4843
+ * force a build order (for example with declaration builds).
4844
+ */
4845
+ type_only: boolean
4846
+ }
4546
4847
  /**
4547
4848
  * Wire-shape envelope for a [`BoundaryViolation`] finding. Mirrors
4548
4849
  * [`UnusedFileFinding`]: flattens the bare finding and carries a typed
@@ -4555,7 +4856,9 @@ export interface BoundaryViolationFinding {
4555
4856
  */
4556
4857
  from_path: string
4557
4858
  /**
4558
- * The file being imported that violates the boundary.
4859
+ * The file being imported that violates the boundary. When the import
4860
+ * goes through a re-export chain, this is the origin module that
4861
+ * declares the imported symbol, not the barrel.
4559
4862
  */
4560
4863
  to_path: string
4561
4864
  /**
@@ -4578,6 +4881,19 @@ line: number
4578
4881
  * 0-based byte column offset of the import statement.
4579
4882
  */
4580
4883
  col: number
4884
+ /**
4885
+ * The barrel file that the source file imports directly, when the
4886
+ * violation comes from a re-export chain. Absent for a direct import.
4887
+ */
4888
+ via_path?: (string | null)
4889
+ /**
4890
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4891
+ * `~<k>` suffix when several findings of one type share an identity.
4892
+ * Line and column are not inputs, so the id survives line shifts,
4893
+ * reformats and reorders. A rename of the file or the symbol gives a
4894
+ * new id. Absent in output from older versions.
4895
+ */
4896
+ finding_id?: (string | null)
4581
4897
  /**
4582
4898
  * Suggested next steps. Always emitted (possibly empty for
4583
4899
  * forward-compat).
@@ -4614,6 +4930,14 @@ line: number
4614
4930
  * 0-based byte column offset used for diagnostics.
4615
4931
  */
4616
4932
  col: number
4933
+ /**
4934
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4935
+ * `~<k>` suffix when several findings of one type share an identity.
4936
+ * Line and column are not inputs, so the id survives line shifts,
4937
+ * reformats and reorders. A rename of the file or the symbol gives a
4938
+ * new id. Absent in output from older versions.
4939
+ */
4940
+ finding_id?: (string | null)
4617
4941
  /**
4618
4942
  * Suggested next steps.
4619
4943
  */
@@ -4662,6 +4986,14 @@ callee: string
4662
4986
  * consumers can see both the written path and the rule that fired.
4663
4987
  */
4664
4988
  pattern: string
4989
+ /**
4990
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
4991
+ * `~<k>` suffix when several findings of one type share an identity.
4992
+ * Line and column are not inputs, so the id survives line shifts,
4993
+ * reformats and reorders. A rename of the file or the symbol gives a
4994
+ * new id. Absent in output from older versions.
4995
+ */
4996
+ finding_id?: (string | null)
4665
4997
  /**
4666
4998
  * Suggested next steps.
4667
4999
  */
@@ -4719,6 +5051,14 @@ severity: PolicyViolationSeverity
4719
5051
  * The rule's author-provided message, when set.
4720
5052
  */
4721
5053
  message?: (string | null)
5054
+ /**
5055
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5056
+ * `~<k>` suffix when several findings of one type share an identity.
5057
+ * Line and column are not inputs, so the id survives line shifts,
5058
+ * reformats and reorders. A rename of the file or the symbol gives a
5059
+ * new id. Absent in output from older versions.
5060
+ */
5061
+ finding_id?: (string | null)
4722
5062
  /**
4723
5063
  * Suggested next steps.
4724
5064
  */
@@ -4751,6 +5091,14 @@ origin: SuppressionOrigin
4751
5091
  * comment or tag that has no reason.
4752
5092
  */
4753
5093
  missing_reason?: boolean
5094
+ /**
5095
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5096
+ * `~<k>` suffix when several findings of one type share an identity.
5097
+ * Line and column are not inputs, so the id survives line shifts,
5098
+ * reformats and reorders. A rename of the file or the symbol gives a
5099
+ * new id. Absent in output from older versions.
5100
+ */
5101
+ finding_id?: (string | null)
4754
5102
  /**
4755
5103
  * Suggested next steps. Always emitted.
4756
5104
  */
@@ -4793,6 +5141,14 @@ line: number
4793
5141
  * output.
4794
5142
  */
4795
5143
  hardcoded_consumers?: string[]
5144
+ /**
5145
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5146
+ * `~<k>` suffix when several findings of one type share an identity.
5147
+ * Line and column are not inputs, so the id survives line shifts,
5148
+ * reformats and reorders. A rename of the file or the symbol gives a
5149
+ * new id. Absent in output from older versions.
5150
+ */
5151
+ finding_id?: (string | null)
4796
5152
  /**
4797
5153
  * Suggested next steps. Always emitted.
4798
5154
  */
@@ -4828,6 +5184,14 @@ path: string
4828
5184
  * 1-based line number of the empty group header within the source file.
4829
5185
  */
4830
5186
  line: number
5187
+ /**
5188
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5189
+ * `~<k>` suffix when several findings of one type share an identity.
5190
+ * Line and column are not inputs, so the id survives line shifts,
5191
+ * reformats and reorders. A rename of the file or the symbol gives a
5192
+ * new id. Absent in output from older versions.
5193
+ */
5194
+ finding_id?: (string | null)
4831
5195
  /**
4832
5196
  * Suggested next steps. Always emitted.
4833
5197
  */
@@ -4884,6 +5248,14 @@ line: number
4884
5248
  * catalog or to add the entry to the named catalog.
4885
5249
  */
4886
5250
  available_in_catalogs?: string[]
5251
+ /**
5252
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5253
+ * `~<k>` suffix when several findings of one type share an identity.
5254
+ * Line and column are not inputs, so the id survives line shifts,
5255
+ * reformats and reorders. A rename of the file or the symbol gives a
5256
+ * new id. Absent in output from older versions.
5257
+ */
5258
+ finding_id?: (string | null)
4887
5259
  /**
4888
5260
  * Suggested next steps. Always emitted; position 0 is the discriminated
4889
5261
  * primary (see struct docs).
@@ -4954,6 +5326,14 @@ line: number
4954
5326
  * use the conservative package-manifest fallback.
4955
5327
  */
4956
5328
  hint?: (string | null)
5329
+ /**
5330
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5331
+ * `~<k>` suffix when several findings of one type share an identity.
5332
+ * Line and column are not inputs, so the id survives line shifts,
5333
+ * reformats and reorders. A rename of the file or the symbol gives a
5334
+ * new id. Absent in output from older versions.
5335
+ */
5336
+ finding_id?: (string | null)
4957
5337
  /**
4958
5338
  * Suggested next steps. Always emitted.
4959
5339
  */
@@ -5010,6 +5390,14 @@ path: string
5010
5390
  * 1-based line number of the entry within the source file.
5011
5391
  */
5012
5392
  line: number
5393
+ /**
5394
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5395
+ * `~<k>` suffix when several findings of one type share an identity.
5396
+ * Line and column are not inputs, so the id survives line shifts,
5397
+ * reformats and reorders. A rename of the file or the symbol gives a
5398
+ * new id. Absent in output from older versions.
5399
+ */
5400
+ finding_id?: (string | null)
5013
5401
  /**
5014
5402
  * Suggested next steps. Always emitted.
5015
5403
  */
@@ -5057,6 +5445,14 @@ line: number
5057
5445
  * 0-based byte column offset of the export.
5058
5446
  */
5059
5447
  col: number
5448
+ /**
5449
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5450
+ * `~<k>` suffix when several findings of one type share an identity.
5451
+ * Line and column are not inputs, so the id survives line shifts,
5452
+ * reformats and reorders. A rename of the file or the symbol gives a
5453
+ * new id. Absent in output from older versions.
5454
+ */
5455
+ finding_id?: (string | null)
5060
5456
  /**
5061
5457
  * Suggested next steps. Always emitted (possibly empty for
5062
5458
  * forward-compat).
@@ -5105,6 +5501,14 @@ line: number
5105
5501
  * 0-based byte column offset of the barrel's first offending re-export.
5106
5502
  */
5107
5503
  col: number
5504
+ /**
5505
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5506
+ * `~<k>` suffix when several findings of one type share an identity.
5507
+ * Line and column are not inputs, so the id survives line shifts,
5508
+ * reformats and reorders. A rename of the file or the symbol gives a
5509
+ * new id. Absent in output from older versions.
5510
+ */
5511
+ finding_id?: (string | null)
5108
5512
  /**
5109
5513
  * Suggested next steps. Always emitted (possibly empty for
5110
5514
  * forward-compat).
@@ -5148,6 +5552,14 @@ line: number
5148
5552
  * 0-based byte column offset of the misplaced directive statement.
5149
5553
  */
5150
5554
  col: number
5555
+ /**
5556
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5557
+ * `~<k>` suffix when several findings of one type share an identity.
5558
+ * Line and column are not inputs, so the id survives line shifts,
5559
+ * reformats and reorders. A rename of the file or the symbol gives a
5560
+ * new id. Absent in output from older versions.
5561
+ */
5562
+ finding_id?: (string | null)
5151
5563
  /**
5152
5564
  * Suggested next steps. Always emitted (possibly empty for
5153
5565
  * forward-compat).
@@ -5193,6 +5605,14 @@ line: number
5193
5605
  * 0-based byte column offset of the inject / getContext call.
5194
5606
  */
5195
5607
  col: number
5608
+ /**
5609
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5610
+ * `~<k>` suffix when several findings of one type share an identity.
5611
+ * Line and column are not inputs, so the id survives line shifts,
5612
+ * reformats and reorders. A rename of the file or the symbol gives a
5613
+ * new id. Absent in output from older versions.
5614
+ */
5615
+ finding_id?: (string | null)
5196
5616
  /**
5197
5617
  * Suggested next steps. Always emitted (possibly empty for
5198
5618
  * forward-compat).
@@ -5249,6 +5669,14 @@ line: number
5249
5669
  * 0-based byte column offset.
5250
5670
  */
5251
5671
  col: number
5672
+ /**
5673
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5674
+ * `~<k>` suffix when several findings of one type share an identity.
5675
+ * Line and column are not inputs, so the id survives line shifts,
5676
+ * reformats and reorders. A rename of the file or the symbol gives a
5677
+ * new id. Absent in output from older versions.
5678
+ */
5679
+ finding_id?: (string | null)
5252
5680
  /**
5253
5681
  * Suggested next steps. Always emitted (possibly empty for
5254
5682
  * forward-compat).
@@ -5298,6 +5726,14 @@ line: number
5298
5726
  * 0-based byte column offset (file-level finding, always 0).
5299
5727
  */
5300
5728
  col: number
5729
+ /**
5730
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5731
+ * `~<k>` suffix when several findings of one type share an identity.
5732
+ * Line and column are not inputs, so the id survives line shifts,
5733
+ * reformats and reorders. A rename of the file or the symbol gives a
5734
+ * new id. Absent in output from older versions.
5735
+ */
5736
+ finding_id?: (string | null)
5301
5737
  /**
5302
5738
  * Suggested next steps. Always emitted (possibly empty for
5303
5739
  * forward-compat).
@@ -5351,6 +5787,14 @@ line: number
5351
5787
  * 0-based byte column offset (file-level finding, always 0).
5352
5788
  */
5353
5789
  col: number
5790
+ /**
5791
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5792
+ * `~<k>` suffix when several findings of one type share an identity.
5793
+ * Line and column are not inputs, so the id survives line shifts,
5794
+ * reformats and reorders. A rename of the file or the symbol gives a
5795
+ * new id. Absent in output from older versions.
5796
+ */
5797
+ finding_id?: (string | null)
5354
5798
  /**
5355
5799
  * Suggested next steps. Always emitted (possibly empty for
5356
5800
  * forward-compat).
@@ -5396,6 +5840,14 @@ line: number
5396
5840
  * 0-based byte column offset of the prop declaration.
5397
5841
  */
5398
5842
  col: number
5843
+ /**
5844
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5845
+ * `~<k>` suffix when several findings of one type share an identity.
5846
+ * Line and column are not inputs, so the id survives line shifts,
5847
+ * reformats and reorders. A rename of the file or the symbol gives a
5848
+ * new id. Absent in output from older versions.
5849
+ */
5850
+ finding_id?: (string | null)
5399
5851
  /**
5400
5852
  * Suggested next steps. Always emitted (possibly empty for
5401
5853
  * forward-compat).
@@ -5441,6 +5893,14 @@ line: number
5441
5893
  * 0-based byte column offset of the emit declaration.
5442
5894
  */
5443
5895
  col: number
5896
+ /**
5897
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5898
+ * `~<k>` suffix when several findings of one type share an identity.
5899
+ * Line and column are not inputs, so the id survives line shifts,
5900
+ * reformats and reorders. A rename of the file or the symbol gives a
5901
+ * new id. Absent in output from older versions.
5902
+ */
5903
+ finding_id?: (string | null)
5444
5904
  /**
5445
5905
  * Suggested next steps. Always emitted (possibly empty for
5446
5906
  * forward-compat).
@@ -5486,6 +5946,14 @@ line: number
5486
5946
  * 0-based byte column offset of the input declaration.
5487
5947
  */
5488
5948
  col: number
5949
+ /**
5950
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
5951
+ * `~<k>` suffix when several findings of one type share an identity.
5952
+ * Line and column are not inputs, so the id survives line shifts,
5953
+ * reformats and reorders. A rename of the file or the symbol gives a
5954
+ * new id. Absent in output from older versions.
5955
+ */
5956
+ finding_id?: (string | null)
5489
5957
  /**
5490
5958
  * Suggested next steps. Always emitted (possibly empty for
5491
5959
  * forward-compat).
@@ -5531,6 +5999,14 @@ line: number
5531
5999
  * 0-based byte column offset of the output declaration.
5532
6000
  */
5533
6001
  col: number
6002
+ /**
6003
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6004
+ * `~<k>` suffix when several findings of one type share an identity.
6005
+ * Line and column are not inputs, so the id survives line shifts,
6006
+ * reformats and reorders. A rename of the file or the symbol gives a
6007
+ * new id. Absent in output from older versions.
6008
+ */
6009
+ finding_id?: (string | null)
5534
6010
  /**
5535
6011
  * Suggested next steps. Always emitted (possibly empty for
5536
6012
  * forward-compat).
@@ -5577,6 +6053,14 @@ line: number
5577
6053
  * 0-based byte column offset of the `dispatch('<name>')` call.
5578
6054
  */
5579
6055
  col: number
6056
+ /**
6057
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6058
+ * `~<k>` suffix when several findings of one type share an identity.
6059
+ * Line and column are not inputs, so the id survives line shifts,
6060
+ * reformats and reorders. A rename of the file or the symbol gives a
6061
+ * new id. Absent in output from older versions.
6062
+ */
6063
+ finding_id?: (string | null)
5580
6064
  /**
5581
6065
  * Suggested next steps. Always emitted (possibly empty for
5582
6066
  * forward-compat).
@@ -5618,6 +6102,14 @@ line: number
5618
6102
  * 0-based byte column offset of the export.
5619
6103
  */
5620
6104
  col: number
6105
+ /**
6106
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6107
+ * `~<k>` suffix when several findings of one type share an identity.
6108
+ * Line and column are not inputs, so the id survives line shifts,
6109
+ * reformats and reorders. A rename of the file or the symbol gives a
6110
+ * new id. Absent in output from older versions.
6111
+ */
6112
+ finding_id?: (string | null)
5621
6113
  /**
5622
6114
  * Suggested next steps. Always emitted (possibly empty for
5623
6115
  * forward-compat).
@@ -5665,6 +6157,14 @@ col: number
5665
6157
  * determinable.
5666
6158
  */
5667
6159
  route_dir?: (string | null)
6160
+ /**
6161
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6162
+ * `~<k>` suffix when several findings of one type share an identity.
6163
+ * Line and column are not inputs, so the id survives line shifts,
6164
+ * reformats and reorders. A rename of the file or the symbol gives a
6165
+ * new id. Absent in output from older versions.
6166
+ */
6167
+ finding_id?: (string | null)
5668
6168
  /**
5669
6169
  * Suggested next steps. Always emitted (possibly empty for
5670
6170
  * forward-compat).
@@ -5706,6 +6206,14 @@ depth: number
5706
6206
  * finding anchor is the first hop (`path` / `line` for suppression + CI).
5707
6207
  */
5708
6208
  hops: PropDrillHop[]
6209
+ /**
6210
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6211
+ * `~<k>` suffix when several findings of one type share an identity.
6212
+ * Line and column are not inputs, so the id survives line shifts,
6213
+ * reformats and reorders. A rename of the file or the symbol gives a
6214
+ * new id. Absent in output from older versions.
6215
+ */
6216
+ finding_id?: (string | null)
5709
6217
  /**
5710
6218
  * Suggested next steps. Always emitted (possibly empty for
5711
6219
  * forward-compat).
@@ -5771,6 +6279,14 @@ component: string
5771
6279
  * at the render site).
5772
6280
  */
5773
6281
  child_component: string
6282
+ /**
6283
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6284
+ * `~<k>` suffix when several findings of one type share an identity.
6285
+ * Line and column are not inputs, so the id survives line shifts,
6286
+ * reformats and reorders. A rename of the file or the symbol gives a
6287
+ * new id. Absent in output from older versions.
6288
+ */
6289
+ finding_id?: (string | null)
5774
6290
  /**
5775
6291
  * Suggested next steps. Always emitted (possibly empty for
5776
6292
  * forward-compat).
@@ -5829,6 +6345,14 @@ group_size: number
5829
6345
  * here, because the group is real regardless of suppression.
5830
6346
  */
5831
6347
  sharing_components: DuplicatePropShapeMember[]
6348
+ /**
6349
+ * Stable id of this finding: `dc1:<rule>:<16 hex digits>`, with a
6350
+ * `~<k>` suffix when several findings of one type share an identity.
6351
+ * Line and column are not inputs, so the id survives line shifts,
6352
+ * reformats and reorders. A rename of the file or the symbol gives a
6353
+ * new id. Absent in output from older versions.
6354
+ */
6355
+ finding_id?: (string | null)
5832
6356
  /**
5833
6357
  * Suggested next steps. Always emitted (possibly empty for
5834
6358
  * forward-compat).
@@ -6033,6 +6557,14 @@ unrecognised_format?: boolean
6033
6557
  * uses the same value for its stderr note.
6034
6558
  */
6035
6559
  saved_by?: string
6560
+ /**
6561
+ * `legacy` when the loaded dead-code baseline has no `identity`, so its
6562
+ * entries use the old key forms and some of them hold a line. The run
6563
+ * still applies the file. `--save-baseline` rewrites it with line-free
6564
+ * keys. Absent for a current baseline and on `dupes` and `health`. The
6565
+ * value set is OPEN.
6566
+ */
6567
+ format?: string
6036
6568
  /**
6037
6569
  * Which channels narrowed this run, present and non-empty exactly when
6038
6570
  * `change_scoped` is true. Both members are derived from one function, so
@@ -6050,6 +6582,75 @@ saved_by?: string
6050
6582
  */
6051
6583
  scope_reasons?: ScopeReason[]
6052
6584
  }
6585
+ /**
6586
+ * The result of a `--finding-id` query, present only when the run received
6587
+ * one or more `--finding-id` values.
6588
+ *
6589
+ * A requested id that is missing from a conclusive run means "fixed,
6590
+ * suppressed, or ignored by config", never "unknown": an inline suppression
6591
+ * comment or an `ignoreFindings` entry is a choice a person made to hide the
6592
+ * finding, so it counts as absent. A missing id in a run that is not
6593
+ * conclusive is unknown, never resolved.
6594
+ *
6595
+ * Every list keeps the order of `requested`. `found` and `missing` partition
6596
+ * `requested`. `filtered` is a subset of `missing`.
6597
+ */
6598
+ export interface FindingIdQuery {
6599
+ /**
6600
+ * The requested ids, without duplicates, in the order of the arguments.
6601
+ */
6602
+ requested: string[]
6603
+ /**
6604
+ * The requested ids that this report contains.
6605
+ */
6606
+ found: string[]
6607
+ /**
6608
+ * The requested ids that this report does not contain. When `conclusive`
6609
+ * is true, a missing id is fixed, suppressed, or ignored by config.
6610
+ * Otherwise its state is unknown.
6611
+ */
6612
+ missing: string[]
6613
+ /**
6614
+ * The missing ids that the analysis still found before a filter of this
6615
+ * run (scope, baseline, issue-type filter) removed them. Such a finding
6616
+ * still exists.
6617
+ */
6618
+ filtered: string[]
6619
+ /**
6620
+ * True when no option of this run can hide a finding without a fix, and
6621
+ * no requested id was filtered. Only then does a missing id mean that
6622
+ * the analysis no longer reports the finding.
6623
+ */
6624
+ conclusive: boolean
6625
+ /**
6626
+ * Why the query is not conclusive, sorted. Empty exactly when
6627
+ * `conclusive` is true.
6628
+ */
6629
+ inconclusive_reasons: FindingIdQueryReason[]
6630
+ /**
6631
+ * A stable hash (`af1:<16 hex digits>`) of every input other than the
6632
+ * source code that decides which findings the run reports:
6633
+ * - the fallow version;
6634
+ * - the merged config after `extends` (without keys that only shape other
6635
+ * commands), the loaded external plugins and rule packs;
6636
+ * - production mode, `includeEntryExports`, the effective rules, the
6637
+ * type-aware mode, requirement and project list, the file size limit;
6638
+ * - the root-relative path and content of each repository `.gitignore`,
6639
+ * `.ignore` and `.git/info/exclude`, each `package.json`, each
6640
+ * `tsconfig*.json` and `jsconfig*.json` with the files its `extends`
6641
+ * names, and each file that matches a built-in or external plugin
6642
+ * config pattern (for example `vite.config.ts`).
6643
+ *
6644
+ * File content is normalized (CRLF to LF, trailing newlines removed).
6645
+ * Known exclusions: the global git excludes file and other machine
6646
+ * environment outside the `FALLOW_*` variables. Store the fingerprint
6647
+ * with a verdict. A later query with another fingerprint is unknown, even
6648
+ * when `conclusive` is true. An edit to a source file keeps it; an edit
6649
+ * to a manifest or project config changes it, also when the edit fixes a
6650
+ * dependency finding.
6651
+ */
6652
+ analysis_fingerprint: string
6653
+ }
6053
6654
  /**
6054
6655
  * Result of regression detection (`--fail-on-regression`). Compares current
6055
6656
  * issue counts against a baseline from config or an explicit file.
@@ -6099,9 +6700,11 @@ reason?: (string | null)
6099
6700
  * empty object is never emitted: it would assert that something was asked and
6100
6701
  * all of it applied, which is a different and false claim.
6101
6702
  *
6102
- * The names this build can emit are `changed-since`, `diff-filter` and
6103
- * `sarif-file`. The reasons are `git-missing`, `not-a-repository`,
6104
- * `git-failed` and `invalid-ref` for `changed-since`, `oversize`,
6703
+ * The names this build can emit are `changed-since`, `diff-filter`,
6704
+ * `package-baselines` and `sarif-file`. The reasons are `git-missing`,
6705
+ * `not-a-repository`, `git-failed` and `invalid-ref` for `changed-since`,
6706
+ * `unknown-workspace`, `git-missing`, `not-a-repository` and `git-failed`
6707
+ * for `package-baselines`, `oversize`,
6105
6708
  * `unreadable`, `not-utf8`, `foreign-namespace` and `ambiguous-base` for
6106
6709
  * `diff-filter`, and `directory-create-failed`, `write-failed` and
6107
6710
  * `serialize-failed` for `sarif-file`. Every set is OPEN: a name a consumer
@@ -6117,8 +6720,9 @@ reason?: (string | null)
6117
6720
  * widened the analysis, which is what `affects` exists to prevent.
6118
6721
  *
6119
6722
  * `scope_size` is emitted for `diff-filter`, in added lines, and for
6120
- * `changed-since`, in changed files that the run analyzed. `sarif-file`
6121
- * measures no scope. A consumer reads the unit off the name, so a name that
6723
+ * `changed-since`, in changed files that the run analyzed. `package-baselines`
6724
+ * and `sarif-file` measure no scope; the applied package refs travel in
6725
+ * `package_baselines`. A consumer reads the unit off the name, so a name that
6122
6726
  * starts to measure its own scope in a later release needs no change here.
6123
6727
  *
6124
6728
  * `invalid-ref` is reachable only through the programmatic API. The
@@ -6144,7 +6748,8 @@ affects: RequestEffect
6144
6748
  * `changed-since`, the diff source label (`--diff-file pr.diff`,
6145
6749
  * `--diff-stdin`, `$FALLOW_DIFF_FILE build/pr.diff`, or
6146
6750
  * `diffFile pr.diff` for the programmatic option) for `diff-filter`,
6147
- * the target path for `sarif-file`. Echoed rather than normalised, so a
6751
+ * `workspaces.changedSince` for `package-baselines`, the target path for
6752
+ * `sarif-file`. Echoed rather than normalised, so a
6148
6753
  * consumer must not join it to the project root the way it joins every
6149
6754
  * other path-shaped field.
6150
6755
  */
@@ -6189,6 +6794,19 @@ reason?: (string | null)
6189
6794
  */
6190
6795
  message?: (string | null)
6191
6796
  }
6797
+ /**
6798
+ * One applied baseline for an exact, project-relative workspace root.
6799
+ */
6800
+ export interface PackageBaselineStatus {
6801
+ /**
6802
+ * Workspace package root, relative to the analysis root with `/` separators.
6803
+ */
6804
+ workspace_root: string
6805
+ /**
6806
+ * Git ref used to select changed files in this package.
6807
+ */
6808
+ reference: string
6809
+ }
6192
6810
  /**
6193
6811
  * A read-only follow-up command fallow surfaces from the current findings,
6194
6812
  * emitted as the top-level `next_steps` array on each command's JSON envelope.
@@ -11008,7 +11626,8 @@ type_only: boolean
11008
11626
  /**
11009
11627
  * Whether the edge carries a runtime value but no static one: the target
11010
11628
  * loads only on demand (`import()`, a lazy glob or template pattern) or
11011
- * on another thread (a worker URL, `child_process.fork`). False for a
11629
+ * on another thread (a worker URL, a worker loader request,
11630
+ * `child_process.fork`). False for a
11012
11631
  * static hop and for a type-only hop.
11013
11632
  */
11014
11633
  dynamic: boolean
@@ -11351,6 +11970,13 @@ body: string
11351
11970
  * Stable finding fingerprint used for comment reconciliation.
11352
11971
  */
11353
11972
  fingerprint: string
11973
+ /**
11974
+ * The fingerprint that an older Fallow release wrote into the
11975
+ * `fallow-fingerprint:v2:` marker of this comment, when it is different
11976
+ * from `fingerprint`. For one release, an existing comment whose marker
11977
+ * holds this value is the same comment. Omitted when equal.
11978
+ */
11979
+ legacy_fingerprint?: (string | null)
11354
11980
  /**
11355
11981
  * True when the body was cut to fit the provider size limit; omitted
11356
11982
  * when false.
@@ -11370,6 +11996,13 @@ position: GitLabReviewPosition
11370
11996
  * Stable finding fingerprint used for comment reconciliation.
11371
11997
  */
11372
11998
  fingerprint: string
11999
+ /**
12000
+ * The fingerprint that an older Fallow release wrote into the
12001
+ * `fallow-fingerprint:v2:` marker of this comment, when it is different
12002
+ * from `fingerprint`. For one release, an existing comment whose marker
12003
+ * holds this value is the same comment. Omitted when equal.
12004
+ */
12005
+ legacy_fingerprint?: (string | null)
11373
12006
  /**
11374
12007
  * True when the body was cut to fit the provider size limit; omitted
11375
12008
  * when false.
@@ -12179,6 +12812,10 @@ gate_outcomes?: (GateOutcomes | null)
12179
12812
  * never "nothing failed". See [`crate::RequestOutcomes`].
12180
12813
  */
12181
12814
  request_outcomes?: (RequestOutcomes | null)
12815
+ /**
12816
+ * Applied package Git refs, omitted outside package-baseline runs.
12817
+ */
12818
+ package_baselines?: PackageBaselineStatus[]
12182
12819
  /**
12183
12820
  * `_meta` block with metric / rule definitions, emitted when `--explain`
12184
12821
  * is passed (always present in MCP responses).
@@ -12337,6 +12974,14 @@ total_issues: number
12337
12974
  * One bucket per resolver key.
12338
12975
  */
12339
12976
  groups: CheckGroupedEntry[]
12977
+ /**
12978
+ * `true` when the `unused-load-data-key` detector abstained for the whole
12979
+ * project. The abstain has no file, so it is on the root and not in a
12980
+ * group. An empty `unused_load_data_keys` with this flag set does not
12981
+ * mean the project is clean: the rule could not run safely. Serialized
12982
+ * only when `true`, like the flat `CheckOutput` field.
12983
+ */
12984
+ unused_load_data_keys_global_abstain?: boolean
12340
12985
  /**
12341
12986
  * This run's view of the loaded baseline, present only in baseline runs.
12342
12987
  * Carries the staleness counts, the advisory verdict and `gate_trips`, the
@@ -12346,6 +12991,14 @@ groups: CheckGroupedEntry[]
12346
12991
  * can report `matched_entries: 0` on a healthy baseline.
12347
12992
  */
12348
12993
  baseline_staleness?: (BaselineStaleness | null)
12994
+ /**
12995
+ * The answer to `--finding-id`, present only when the run received one
12996
+ * or more `--finding-id` values. The report then holds only the
12997
+ * requested findings. Read `missing` as resolved only when `conclusive`
12998
+ * is true; a scope, a baseline or a filter can hide a finding that still
12999
+ * exists. See [`crate::FindingIdQuery`].
13000
+ */
13001
+ finding_id_query?: (FindingIdQuery | null)
12349
13002
  /**
12350
13003
  * The verdict of every gate this run evaluated, keyed by name. The CLI
12351
13004
  * always emits it, with the command's default exit rule in it also when
@@ -12366,6 +13019,10 @@ gate_outcomes?: (GateOutcomes | null)
12366
13019
  * never "nothing failed". See [`crate::RequestOutcomes`].
12367
13020
  */
12368
13021
  request_outcomes?: (RequestOutcomes | null)
13022
+ /**
13023
+ * Applied package Git refs, omitted outside package-baseline runs.
13024
+ */
13025
+ package_baselines?: PackageBaselineStatus[]
12369
13026
  /**
12370
13027
  * `_meta` block with docs and rule definitions, when `--explain` was
12371
13028
  * passed.
@@ -12525,6 +13182,12 @@ circular_dependencies: CircularDependencyFinding[]
12525
13182
  * suppression breaks the cycle).
12526
13183
  */
12527
13184
  re_export_cycles?: ReExportCycleFinding[]
13185
+ /**
13186
+ * Dependency cycles between workspace packages, built from resolved
13187
+ * cross-package imports. Wrapped in [`PackageCycleFinding`] so each
13188
+ * entry carries a typed `actions` array natively.
13189
+ */
13190
+ package_cycles?: PackageCycleFinding[]
12528
13191
  /**
12529
13192
  * Imports that cross architecture boundary rules. Wrapped in
12530
13193
  * [`BoundaryViolationFinding`] so each entry carries a typed `actions`
@@ -13993,9 +14656,12 @@ elapsed_ms: ElapsedMs
13993
14656
  /**
13994
14657
  * The verdict of every gate this run evaluated, keyed by name. The CLI
13995
14658
  * always emits it, with the default exit rule of each section that ran
13996
- * (`error-severity-findings`, `health-findings`). The machine formats of
13997
- * the combined run exit 0 for findings, so most entries have `enforced:
13998
- * false`. For the default exit rules (`error-severity-findings`,
14659
+ * (`error-severity-findings`, `health-findings`). Without
14660
+ * `--fail-on-issues` or `--ci`, the machine formats of the combined run
14661
+ * exit 0 for findings, so most entries have `enforced: false`. With one of
14662
+ * these flags, the findings rules and `duplication-threshold` are
14663
+ * `enforced`, and every format exits 1 when one fails. For the default
14664
+ * exit rules (`error-severity-findings`,
13999
14665
  * `health-findings`), `status` gives the verdict of the human run. An
14000
14666
  * advisory entry can report `fail` without a failure of the human run: an
14001
14667
  * example is a `stale-baseline` entry that `--fail-on-stale-baseline` did
@@ -14014,6 +14680,11 @@ gate_outcomes?: (GateOutcomes | null)
14014
14680
  * never "nothing failed". See [`crate::RequestOutcomes`].
14015
14681
  */
14016
14682
  request_outcomes?: (RequestOutcomes | null)
14683
+ /**
14684
+ * Applied package Git refs of the `check` and `dupes` sections. The map
14685
+ * does not narrow the `health` section.
14686
+ */
14687
+ package_baselines?: PackageBaselineStatus[]
14017
14688
  /**
14018
14689
  * Per-section `_meta` blocks, when `--explain` was passed.
14019
14690
  */
@@ -16952,6 +17623,16 @@ export type EmptyCatalogGroup = EmptyCatalogGroupFinding;
16952
17623
  */
16953
17624
  export type MisconfiguredDependencyOverride = MisconfiguredDependencyOverrideFinding;
16954
17625
 
17626
+ /**
17627
+ * Backwards-compat alias for the pre-#384 bare `PackageCycle` name.
17628
+ * The wire shape is byte-identical: `PackageCycleFinding` flattens the bare
17629
+ * finding's fields via `#[serde(flatten)]` and adds `actions[]` plus
17630
+ * the optional audit-mode `introduced` flag. Consumers that imported
17631
+ * `PackageCycle` from `fallow/types` pre-migration continue to work via
17632
+ * this alias; new code should prefer `PackageCycleFinding`.
17633
+ */
17634
+ export type PackageCycle = PackageCycleFinding;
17635
+
16955
17636
  /**
16956
17637
  * Backwards-compat alias for the pre-#384 bare `PrivateTypeLeak` name.
16957
17638
  * The wire shape is byte-identical: `PrivateTypeLeakFinding` flattens the bare