fallow 3.28.0 → 3.29.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.
@@ -261,7 +261,7 @@ export type IssueAction = (FixAction | SuppressLineAction | SuppressFileAction |
261
261
  * Discriminant string for [`FixAction`]. Kebab-case per the JSON output
262
262
  * contract.
263
263
  */
264
- export type FixActionType = ("remove-export" | "delete-file" | "remove-dependency" | "move-dependency" | "remove-enum-member" | "remove-class-member" | "resolve-import" | "install-dependency" | "remove-duplicate" | "move-to-dev" | "move-to-prod" | "refactor-cycle" | "refactor-re-export-cycle" | "refactor-boundary" | "export-type" | "remove-catalog-entry" | "remove-empty-catalog-group" | "update-catalog-reference" | "add-catalog-entry" | "remove-catalog-reference" | "remove-dependency-override" | "fix-dependency-override" | "resolve-policy-violation" | "move-to-server-module" | "split-mixed-barrel" | "hoist-directive" | "wire-server-action" | "provide-inject" | "use-load-data" | "render-component" | "use-component-prop" | "emit-component-event" | "wire-svelte-event" | "resolve-route-collision" | "resolve-dynamic-segment-name-conflict" | "add-suppression-reason" | "remove-stale-suppression")
264
+ export type FixActionType = ("remove-export" | "delete-file" | "remove-dependency" | "move-dependency" | "remove-enum-member" | "remove-class-member" | "resolve-import" | "install-dependency" | "remove-duplicate" | "move-to-dev" | "move-to-prod" | "refactor-cycle" | "refactor-re-export-cycle" | "refactor-boundary" | "export-type" | "migrate-deprecated-export" | "remove-catalog-entry" | "remove-empty-catalog-group" | "update-catalog-reference" | "add-catalog-entry" | "remove-catalog-reference" | "remove-dependency-override" | "fix-dependency-override" | "resolve-policy-violation" | "move-to-server-module" | "split-mixed-barrel" | "hoist-directive" | "wire-server-action" | "provide-inject" | "use-load-data" | "render-component" | "use-component-prop" | "emit-component-event" | "wire-svelte-event" | "resolve-route-collision" | "resolve-dynamic-segment-name-conflict" | "add-suppression-reason" | "remove-stale-suppression")
265
265
  /**
266
266
  * Singleton discriminant for [`SuppressLineAction`].
267
267
  */
@@ -301,6 +301,27 @@ export type AddToConfigValue = (string | IgnoreExportsRule[] | {
301
301
  * hold `Option<AuditIntroduced>`. Renders to the JSON wire as a bare boolean.
302
302
  */
303
303
  export type AuditIntroduced = boolean
304
+ /**
305
+ * Gate severity of one finding after rule resolution.
306
+ *
307
+ * It is the severity that `rules` and the matching `overrides[].rules` give
308
+ * the finding for its path. `--fail-on-issues` raises `warn` to `error`. A
309
+ * finding whose rule is `off` is not reported, so there is no `off` value.
310
+ * The type is separate from the health `severity` band, which ranks a
311
+ * finding and does not gate it.
312
+ *
313
+ * The `fallow dead-code` findings gate fails when a finding is `error`.
314
+ * Other gates (regression, stale baseline) decide on their own inputs. Two
315
+ * commands differ: the `fallow audit` `new-only` gate fails only on introduced
316
+ * findings, so an inherited `error` finding does not fail the audit, and the
317
+ * combined command (`fallow` without a subcommand) exits 0 for machine
318
+ * formats.
319
+ *
320
+ * Complexity findings carry the same type. The `complexity-cyclomatic`,
321
+ * `complexity-cognitive` and `complexity-crap` rules set it, and the
322
+ * `fallow health` findings gate and the audit verdict read it.
323
+ */
324
+ export type EffectiveSeverity = ("error" | "warn")
304
325
  /**
305
326
  * A per-finding caveat on a dead-code verdict that a file this run never
306
327
  * fully analyzed can distort.
@@ -325,6 +346,10 @@ export type AuditIntroduced = boolean
325
346
  * caveat" rather than as an error.
326
347
  */
327
348
  export type ReachabilityCaveat = ("incomplete-file-analysis" | "incomplete-import-graph")
349
+ /**
350
+ * How a consumer references a deprecated export.
351
+ */
352
+ export type DeprecatedConsumerKind = ("named-import" | "default-import" | "namespace-import" | "re-export" | "dynamic-import" | "side-effect-import")
328
353
  /**
329
354
  * Where in package.json a dependency is listed.
330
355
  *
@@ -618,13 +643,15 @@ kind: "file-scores-unavailable"
618
643
  } | {
619
644
  /**
620
645
  * Which input stopped it, as a kebab-case token: `not-a-repository`,
621
- * `invalid-since` or `churn-file-unreadable`. The set is open.
646
+ * `no-commits`, `invalid-since` or `churn-file-unreadable`. The set is
647
+ * open.
622
648
  *
623
649
  * The cause decides the remedy, which is why it is on the wire: a run
624
650
  * outside a repository is fixed by running fallow inside one, a
625
- * malformed `--since` by respelling the flag, and a churn file that
626
- * changed under the run by rerunning it. A consumer reading only the
627
- * kind would offer the first remedy for all three.
651
+ * branch without a commit by committing, a malformed `--since` by
652
+ * respelling the flag, and a churn file that changed under the run by
653
+ * rerunning it. A consumer reading only the kind would offer the first
654
+ * remedy for all four.
628
655
  */
629
656
  cause: string
630
657
  kind: "hotspots-skipped"
@@ -664,13 +691,16 @@ kind: "trend-snapshot-unreadable"
664
691
  plugin: string
665
692
  /**
666
693
  * The config key that was present and not fully readable (`exposes`,
667
- * `remotes`). The set is open.
694
+ * `remotes`), or the Module Federation runtime function whose
695
+ * argument was not readable (`registerRemotes`, `loadRemote`, `init`,
696
+ * `createInstance`). The set is open.
668
697
  */
669
698
  key: string
670
699
  /**
671
700
  * Why it could not be read, as a kebab-case token:
672
- * `not-object-literal`, `array-form`, `spread` or
673
- * `unreadable-entries`. The set is open.
701
+ * `not-object-literal`, `array-form`, `spread`,
702
+ * `unreadable-entries`, `unrecognized-call`,
703
+ * `import-target-unreadable` or `dynamic-argument`. The set is open.
674
704
  *
675
705
  * The reason decides the remedy, which is why it is on the wire: a
676
706
  * value that is not an object literal is fixed by writing one, while
@@ -686,7 +716,8 @@ kind: "plugin-config-unreadable"
686
716
  plugin: string
687
717
  /**
688
718
  * The config key whose effect is not modeled (`components`,
689
- * `imports`). The set is open.
719
+ * `imports`), or the virtual module a file reads (`#components`,
720
+ * `#imports`). The set is open.
690
721
  */
691
722
  key: string
692
723
  /**
@@ -771,6 +802,10 @@ export type HealthFindingActionType = ("refactor-function" | "add-tests" | "incr
771
802
  * Coverage model used for CRAP score computation.
772
803
  */
773
804
  export type CoverageModel = ("static_binary" | "static_estimated" | "istanbul")
805
+ /**
806
+ * Input format of the measured coverage behind `CoverageModel::Istanbul`.
807
+ */
808
+ export type CoverageInputFormat = ("istanbul" | "v8")
774
809
  /**
775
810
  * Whether CRAP findings in the report used one coverage-source kind or a mix.
776
811
  */
@@ -1222,7 +1257,7 @@ export type SecurityUrlShape = ("fixed-origin-dynamic-path" | "dynamic-origin")
1222
1257
  */
1223
1258
  export type SecurityRuntimeState = ("runtime-hot" | "runtime-cold" | "never-executed" | "low-traffic" | "coverage-unavailable" | "runtime-unknown")
1224
1259
  /**
1225
- * Defensive control family detected on a source to sink path.
1260
+ * Family of a control pattern observed in a file on an import trace.
1226
1261
  */
1227
1262
  export type SecurityControlKind = ("sanitization" | "validation" | "authentication" | "authorization")
1228
1263
  /**
@@ -1270,7 +1305,7 @@ export type FeatureFlagActionType = ("investigate-flag" | "suppress-line")
1270
1305
  * Independently-versioned wire-version newtype for the brief envelope.
1271
1306
  * Serializes as the integer `REVIEW_BRIEF_SCHEMA_VERSION`.
1272
1307
  */
1273
- export type ReviewBriefSchemaVersion = 10
1308
+ export type ReviewBriefSchemaVersion = 11
1274
1309
  /**
1275
1310
  * The exactly-three shippable decision categories (the SOLID-3). No cut category
1276
1311
  * (abstraction / deletion / convention / irreversibility) is representable: this
@@ -1487,13 +1522,13 @@ base_snapshot_skipped?: (boolean | null)
1487
1522
  summary: AuditSummary
1488
1523
  attribution: AuditAttribution
1489
1524
  /**
1490
- * Every gate this run ARMED, keyed by name, absent when it armed none.
1491
- * Each entry is the same rule that decides the exit code, so a CI
1492
- * integration reads the verdict instead of guessing from a process status
1493
- * it usually cannot see. A gate fails the build when `status` is `fail`
1494
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
1495
- * rules fail a run with no flag at all, so an absent object means "no gate
1496
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
1525
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
1526
+ * always emits it, with the command's default exit rule in it also when
1527
+ * no flag armed a gate, so a CI integration reads the verdict instead of
1528
+ * guessing from a process status it usually cannot see. A gate fails the
1529
+ * build when `status` is `fail` AND `enforced` is true. The typed
1530
+ * programmatic API runs no CLI gate and leaves it absent. See
1531
+ * [`crate::GateOutcomes`].
1497
1532
  */
1498
1533
  gate_outcomes?: (GateOutcomes | null)
1499
1534
  /**
@@ -1579,24 +1614,25 @@ styling_inherited: number
1579
1614
  duplication_demoted: number
1580
1615
  }
1581
1616
  /**
1582
- * Every gate a run ARMED, keyed by name.
1617
+ * The verdict of every gate a run evaluated, keyed by name.
1583
1618
  *
1584
- * Armed, not evaluated: a gate is armed by a flag or by config, never merely
1585
- * because the rule behind it exists. Fallow's default severity rules fail a
1586
- * run with no flag at all, so a `dead-code` run can exit 1 carrying no object
1587
- * whatsoever. Read an absent object as "no gate was asked for", never as
1588
- * "nothing failed".
1619
+ * A gate is armed by a flag or by config. The default exit rule of a command
1620
+ * is always in the object, also when no flag armed a gate:
1621
+ * `error-severity-findings` on `dead-code`, `check` and the combined run
1622
+ * (with `health-findings` when the combined run analyzed health),
1623
+ * `health-findings` on `health`, `security-advisory` on `security` and
1624
+ * `audit-verdict` on `audit`. A reader of the JSON sees a failing run without
1625
+ * the exit code. `dupes` has no default exit rule, so a `dupes` run that armed
1626
+ * no gate carries no object and always exits 0.
1589
1627
  *
1590
- * Absent from an envelope whenever it is empty, so a run that armed no gate is
1591
- * byte-identical to one produced before this object existed. An empty object
1592
- * is never emitted: it would assert that gates were armed and none tripped,
1593
- * which is a different and false claim.
1628
+ * An empty object is never emitted. The typed programmatic API runs no CLI
1629
+ * gate and leaves the object absent.
1594
1630
  *
1595
1631
  * The names this build can emit are `error-severity-findings`, `regression`,
1596
1632
  * `stale-baseline`, `duplication-threshold`, `health-min-score`,
1597
1633
  * `health-min-severity`, `health-findings`, `health-coverage-gaps`,
1598
- * `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`
1599
- * and `type-aware-require`. The set is OPEN: a name a consumer does not
1634
+ * `health-runtime-coverage`, `security`, `security-advisory`, `audit-verdict`,
1635
+ * `type-aware-require` and `parse-error`. The set is OPEN: a name a consumer does not
1600
1636
  * recognise means "some gate", not an error.
1601
1637
  */
1602
1638
  export interface GateOutcomes {
@@ -1623,15 +1659,17 @@ export interface GateOutcome {
1623
1659
  status: GateStatus
1624
1660
  /**
1625
1661
  * True when a `fail` from this gate makes the run exit non-zero. False
1626
- * when the verdict is published for information only, because the gate was
1627
- * never armed or because the run was told never to fail.
1662
+ * when the verdict is published for information only: the gate was never
1663
+ * armed, the run was told never to fail, or the combined machine formats
1664
+ * exit 0 for the gate.
1628
1665
  */
1629
1666
  enforced: boolean
1630
1667
  /**
1631
1668
  * The measured value the gate compared, when there is one: the duplication
1632
- * percentage, the health score, or the number of findings at or above the
1633
- * severity floor. Whole numbers are carried as JSON numbers, so a count of
1634
- * three reads as `3.0`. Absent for gates that compare no number.
1669
+ * percentage, the health score, the number of findings at or above the
1670
+ * severity floor, or the number of files in `files`. Whole numbers are
1671
+ * carried as JSON numbers, so a count of three reads as `3.0`. Absent for
1672
+ * gates that compare no number.
1635
1673
  */
1636
1674
  observed?: (number | null)
1637
1675
  /**
@@ -1649,6 +1687,34 @@ threshold?: (number | null)
1649
1687
  * object. Absent for gates whose numbers speak for themselves.
1650
1688
  */
1651
1689
  threshold_label?: (string | null)
1690
+ /**
1691
+ * The files the gate judged, for a gate that judges files rather than a
1692
+ * number. Only `parse-error` sets it: one item per file that did not
1693
+ * parse cleanly, sorted by path. Absent when the list is empty.
1694
+ */
1695
+ files?: GateFile[]
1696
+ }
1697
+ /**
1698
+ * One file a file-judging gate names, with the reason the gate counted it.
1699
+ *
1700
+ * Today only `parse-error` emits it. The item carries the same facts as the
1701
+ * `source-parse-degraded` entry in `workspace_diagnostics[]` for that file,
1702
+ * so a consumer can act on the gate without a join.
1703
+ */
1704
+ export interface GateFile {
1705
+ /**
1706
+ * The file path, relative to the project root, with `/` separators.
1707
+ */
1708
+ path: string
1709
+ /**
1710
+ * The number of parser errors for the file.
1711
+ */
1712
+ error_count: number
1713
+ /**
1714
+ * True when the parser stopped in the file instead of recovering, so the
1715
+ * analysis saw only the part before the error.
1716
+ */
1717
+ panicked: boolean
1652
1718
  }
1653
1719
  /**
1654
1720
  * Metric and rule definitions emitted under `_meta` when `--explain` is
@@ -2614,6 +2680,12 @@ unused_types: UnusedTypeFinding[]
2614
2680
  * typed `actions` array natively.
2615
2681
  */
2616
2682
  private_type_leaks: PrivateTypeLeakFinding[]
2683
+ /**
2684
+ * Exports marked `@deprecated` that still have at least one consumer in
2685
+ * a reachable file. Wrapped in [`DeprecatedExportInUseFinding`]. Opt-in: the
2686
+ * `deprecated-exports-in-use` rule defaults to `off`.
2687
+ */
2688
+ deprecated_exports_in_use?: DeprecatedExportInUseFinding[]
2617
2689
  /**
2618
2690
  * Dependencies listed in package.json but never imported. Wrapped in
2619
2691
  * [`UnusedDependencyFinding`] so each entry carries a typed `actions`
@@ -2941,13 +3013,13 @@ baseline_staleness?: (BaselineStaleness | null)
2941
3013
  */
2942
3014
  regression?: (RegressionResult | null)
2943
3015
  /**
2944
- * Every gate this run ARMED, keyed by name, absent when it armed none.
2945
- * Each entry is the same rule that decides the exit code, so a CI
2946
- * integration reads the verdict instead of guessing from a process status
2947
- * it usually cannot see. A gate fails the build when `status` is `fail`
2948
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
2949
- * rules fail a run with no flag at all, so an absent object means "no gate
2950
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
3016
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
3017
+ * always emits it, with the command's default exit rule in it also when
3018
+ * no flag armed a gate, so a CI integration reads the verdict instead of
3019
+ * guessing from a process status it usually cannot see. A gate fails the
3020
+ * build when `status` is `fail` AND `enforced` is true. The typed
3021
+ * programmatic API runs no CLI gate and leaves it absent. See
3022
+ * [`crate::GateOutcomes`].
2951
3023
  */
2952
3024
  gate_outcomes?: (GateOutcomes | null)
2953
3025
  /**
@@ -3066,6 +3138,10 @@ unused_types: number
3066
3138
  * Public exports whose signature references same-file private types.
3067
3139
  */
3068
3140
  private_type_leaks: number
3141
+ /**
3142
+ * Exports marked `@deprecated` that are still referenced.
3143
+ */
3144
+ deprecated_exports_in_use: number
3069
3145
  /**
3070
3146
  * Combined count of unused entries across `dependencies`,
3071
3147
  * `devDependencies`, and `optionalDependencies`. The per-section
@@ -3247,6 +3323,13 @@ actions: IssueAction[]
3247
3323
  * the merge-base. `None` when serialized directly from Rust.
3248
3324
  */
3249
3325
  introduced?: (AuditIntroduced | null)
3326
+ /**
3327
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3328
+ * resolve for its path. CI formats read it for the annotation, SARIF
3329
+ * and CodeClimate level. Absent in output from older versions. Not
3330
+ * part of the finding identity, baseline keys or fingerprints.
3331
+ */
3332
+ effective_severity?: (EffectiveSeverity | null)
3250
3333
  /**
3251
3334
  * Advisory caveats on the reachability verdict behind this finding.
3252
3335
  * Sorted, deduplicated, and omitted from the wire when empty, so a run
@@ -3450,6 +3533,17 @@ span_start: number
3450
3533
  * Whether this finding comes from a barrel/index re-export rather than the source definition.
3451
3534
  */
3452
3535
  is_re_export: boolean
3536
+ /**
3537
+ * Whether the export's leading JSDoc carries `@deprecated`. Absent from
3538
+ * the wire when false.
3539
+ */
3540
+ deprecated?: boolean
3541
+ /**
3542
+ * Plain-text message of the `@deprecated` tag, capped at
3543
+ * [`DEPRECATED_REASON_MAX_CHARS`] characters. Absent when the export is
3544
+ * not deprecated or the tag carries no text.
3545
+ */
3546
+ deprecated_reason?: (string | null)
3453
3547
  /**
3454
3548
  * Suggested next steps. Always emitted (possibly empty for
3455
3549
  * forward-compat).
@@ -3464,6 +3558,13 @@ semantic?: (SemanticCandidateDecision | null)
3464
3558
  * the merge-base.
3465
3559
  */
3466
3560
  introduced?: (AuditIntroduced | null)
3561
+ /**
3562
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3563
+ * resolve for its path. CI formats read it for the annotation, SARIF
3564
+ * and CodeClimate level. Absent in output from older versions. Not
3565
+ * part of the finding identity, baseline keys or fingerprints.
3566
+ */
3567
+ effective_severity?: (EffectiveSeverity | null)
3467
3568
  /**
3468
3569
  * Advisory caveats on the reachability verdict behind this finding.
3469
3570
  * Sorted, deduplicated, and omitted from the wire when empty. Never gates
@@ -3507,6 +3608,17 @@ span_start: number
3507
3608
  * Whether this finding comes from a barrel/index re-export rather than the source definition.
3508
3609
  */
3509
3610
  is_re_export: boolean
3611
+ /**
3612
+ * Whether the export's leading JSDoc carries `@deprecated`. Absent from
3613
+ * the wire when false.
3614
+ */
3615
+ deprecated?: boolean
3616
+ /**
3617
+ * Plain-text message of the `@deprecated` tag, capped at
3618
+ * [`DEPRECATED_REASON_MAX_CHARS`] characters. Absent when the export is
3619
+ * not deprecated or the tag carries no text.
3620
+ */
3621
+ deprecated_reason?: (string | null)
3510
3622
  /**
3511
3623
  * Suggested next steps. Always emitted (possibly empty for
3512
3624
  * forward-compat).
@@ -3521,6 +3633,13 @@ semantic?: (SemanticCandidateDecision | null)
3521
3633
  * the merge-base.
3522
3634
  */
3523
3635
  introduced?: (AuditIntroduced | null)
3636
+ /**
3637
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3638
+ * resolve for its path. CI formats read it for the annotation, SARIF
3639
+ * and CodeClimate level. Absent in output from older versions. Not
3640
+ * part of the finding identity, baseline keys or fingerprints.
3641
+ */
3642
+ effective_severity?: (EffectiveSeverity | null)
3524
3643
  /**
3525
3644
  * Advisory caveats on the reachability verdict behind this finding.
3526
3645
  * A type export rests on exactly the reachability test an
@@ -3575,6 +3694,103 @@ actions: IssueAction[]
3575
3694
  * the merge-base.
3576
3695
  */
3577
3696
  introduced?: (AuditIntroduced | null)
3697
+ /**
3698
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3699
+ * resolve for its path. CI formats read it for the annotation, SARIF
3700
+ * and CodeClimate level. Absent in output from older versions. Not
3701
+ * part of the finding identity, baseline keys or fingerprints.
3702
+ */
3703
+ effective_severity?: (EffectiveSeverity | null)
3704
+ }
3705
+ /**
3706
+ * Wire-shape envelope for a [`DeprecatedExportInUse`] finding. Carries a
3707
+ * manual `migrate-deprecated-export` primary action plus a `suppress-line`
3708
+ * secondary. Never auto-fixable: fallow does not rewrite consumers.
3709
+ */
3710
+ export interface DeprecatedExportInUseFinding {
3711
+ /**
3712
+ * File that declares the deprecated export.
3713
+ */
3714
+ path: string
3715
+ /**
3716
+ * Name of the deprecated export.
3717
+ */
3718
+ export_name: string
3719
+ /**
3720
+ * Whether this is a type-only export.
3721
+ */
3722
+ is_type_only: boolean
3723
+ /**
3724
+ * 1-based line number of the export.
3725
+ */
3726
+ line: number
3727
+ /**
3728
+ * 0-based byte column offset of the export.
3729
+ */
3730
+ col: number
3731
+ /**
3732
+ * Byte offset of the export in the source file.
3733
+ */
3734
+ span_start: number
3735
+ /**
3736
+ * Plain-text message of the `@deprecated` tag, capped at
3737
+ * [`DEPRECATED_REASON_MAX_CHARS`] characters. Absent when the tag
3738
+ * carries no text.
3739
+ */
3740
+ deprecated_reason?: (string | null)
3741
+ /**
3742
+ * Exact number of distinct consumers: reference sites in reachable
3743
+ * files, one per path, line, column and kind. `consumers` holds the
3744
+ * first [`DEPRECATED_CONSUMER_SAMPLE_CAP`] of them, so the sample is
3745
+ * complete when this count is at most the cap.
3746
+ */
3747
+ consumer_count: number
3748
+ /**
3749
+ * Consumer sample sorted by path, line, column and kind, capped at
3750
+ * [`DEPRECATED_CONSUMER_SAMPLE_CAP`] entries.
3751
+ */
3752
+ consumers: DeprecatedExportConsumer[]
3753
+ /**
3754
+ * True when the export is part of the public API: it lives in an entry
3755
+ * point, or a re-export chain reaches an entry point. External consumers
3756
+ * are not visible, so the finding makes no removal claim.
3757
+ */
3758
+ public_api: boolean
3759
+ /**
3760
+ * Suggested next steps. Always emitted (possibly empty for
3761
+ * forward-compat).
3762
+ */
3763
+ actions: IssueAction[]
3764
+ /**
3765
+ * Set by the audit pass when this finding is introduced relative to
3766
+ * the merge-base.
3767
+ */
3768
+ introduced?: (AuditIntroduced | null)
3769
+ /**
3770
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3771
+ * resolve for its path. CI formats read it for the annotation, SARIF
3772
+ * and CodeClimate level. Absent in output from older versions. Not
3773
+ * part of the finding identity, baseline keys or fingerprints.
3774
+ */
3775
+ effective_severity?: (EffectiveSeverity | null)
3776
+ }
3777
+ /**
3778
+ * One file location that references a deprecated export.
3779
+ */
3780
+ export interface DeprecatedExportConsumer {
3781
+ /**
3782
+ * File that references the deprecated export.
3783
+ */
3784
+ path: string
3785
+ /**
3786
+ * 1-based line number of the import or re-export statement.
3787
+ */
3788
+ line: number
3789
+ /**
3790
+ * 0-based byte column offset of the import or re-export statement.
3791
+ */
3792
+ col: number
3793
+ kind: DeprecatedConsumerKind
3578
3794
  }
3579
3795
  /**
3580
3796
  * Wire-shape envelope for an [`UnusedDependency`] finding consumed under
@@ -3612,6 +3828,13 @@ actions: IssueAction[]
3612
3828
  * the merge-base.
3613
3829
  */
3614
3830
  introduced?: (AuditIntroduced | null)
3831
+ /**
3832
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3833
+ * resolve for its path. CI formats read it for the annotation, SARIF
3834
+ * and CodeClimate level. Absent in output from older versions. Not
3835
+ * part of the finding identity, baseline keys or fingerprints.
3836
+ */
3837
+ effective_severity?: (EffectiveSeverity | null)
3615
3838
  /**
3616
3839
  * Advisory caveats on the verdict behind this finding. A dependency is
3617
3840
  * reported unused when NO module in the project imports its specifier,
@@ -3658,6 +3881,13 @@ actions: IssueAction[]
3658
3881
  * the merge-base.
3659
3882
  */
3660
3883
  introduced?: (AuditIntroduced | null)
3884
+ /**
3885
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3886
+ * resolve for its path. CI formats read it for the annotation, SARIF
3887
+ * and CodeClimate level. Absent in output from older versions. Not
3888
+ * part of the finding identity, baseline keys or fingerprints.
3889
+ */
3890
+ effective_severity?: (EffectiveSeverity | null)
3661
3891
  /**
3662
3892
  * Advisory caveats on the verdict behind this finding. A dependency is
3663
3893
  * reported unused when NO module in the project imports its specifier,
@@ -3704,6 +3934,13 @@ actions: IssueAction[]
3704
3934
  * the merge-base.
3705
3935
  */
3706
3936
  introduced?: (AuditIntroduced | null)
3937
+ /**
3938
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3939
+ * resolve for its path. CI formats read it for the annotation, SARIF
3940
+ * and CodeClimate level. Absent in output from older versions. Not
3941
+ * part of the finding identity, baseline keys or fingerprints.
3942
+ */
3943
+ effective_severity?: (EffectiveSeverity | null)
3707
3944
  /**
3708
3945
  * Advisory caveats on the verdict behind this finding. A dependency is
3709
3946
  * reported unused when NO module in the project imports its specifier,
@@ -3750,6 +3987,13 @@ actions: IssueAction[]
3750
3987
  * the merge-base.
3751
3988
  */
3752
3989
  introduced?: (AuditIntroduced | null)
3990
+ /**
3991
+ * Gate severity of this finding after `rules` and `overrides[].rules`
3992
+ * resolve for its path. CI formats read it for the annotation, SARIF
3993
+ * and CodeClimate level. Absent in output from older versions. Not
3994
+ * part of the finding identity, baseline keys or fingerprints.
3995
+ */
3996
+ effective_severity?: (EffectiveSeverity | null)
3753
3997
  /**
3754
3998
  * Advisory caveats on the verdict behind this finding. A member's usage
3755
3999
  * is collected by walking the member accesses of every module the run
@@ -3802,6 +4046,13 @@ semantic?: (SemanticCandidateDecision | null)
3802
4046
  * the merge-base.
3803
4047
  */
3804
4048
  introduced?: (AuditIntroduced | null)
4049
+ /**
4050
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4051
+ * resolve for its path. CI formats read it for the annotation, SARIF
4052
+ * and CodeClimate level. Absent in output from older versions. Not
4053
+ * part of the finding identity, baseline keys or fingerprints.
4054
+ */
4055
+ effective_severity?: (EffectiveSeverity | null)
3805
4056
  /**
3806
4057
  * Advisory caveats on the verdict behind this finding. A class member's
3807
4058
  * usage is collected by the same reachability-free member-access walk an
@@ -3855,6 +4106,13 @@ actions: IssueAction[]
3855
4106
  * the merge-base.
3856
4107
  */
3857
4108
  introduced?: (AuditIntroduced | null)
4109
+ /**
4110
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4111
+ * resolve for its path. CI formats read it for the annotation, SARIF
4112
+ * and CodeClimate level. Absent in output from older versions. Not
4113
+ * part of the finding identity, baseline keys or fingerprints.
4114
+ */
4115
+ effective_severity?: (EffectiveSeverity | null)
3858
4116
  /**
3859
4117
  * Advisory caveats on the verdict behind this finding. A store member's
3860
4118
  * usage is collected by the same reachability-free member-access walk a
@@ -3905,6 +4163,13 @@ actions: IssueAction[]
3905
4163
  * the merge-base.
3906
4164
  */
3907
4165
  introduced?: (AuditIntroduced | null)
4166
+ /**
4167
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4168
+ * resolve for its path. CI formats read it for the annotation, SARIF
4169
+ * and CodeClimate level. Absent in output from older versions. Not
4170
+ * part of the finding identity, baseline keys or fingerprints.
4171
+ */
4172
+ effective_severity?: (EffectiveSeverity | null)
3908
4173
  }
3909
4174
  /**
3910
4175
  * Wire-shape envelope for an [`UnlistedDependency`] finding. Carries an
@@ -3931,6 +4196,13 @@ actions: IssueAction[]
3931
4196
  * the merge-base.
3932
4197
  */
3933
4198
  introduced?: (AuditIntroduced | null)
4199
+ /**
4200
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4201
+ * resolve for its path. CI formats read it for the annotation, SARIF
4202
+ * and CodeClimate level. Absent in output from older versions. Not
4203
+ * part of the finding identity, baseline keys or fingerprints.
4204
+ */
4205
+ effective_severity?: (EffectiveSeverity | null)
3934
4206
  }
3935
4207
  /**
3936
4208
  * A location where an import occurs.
@@ -3981,6 +4253,13 @@ actions: IssueAction[]
3981
4253
  * the merge-base.
3982
4254
  */
3983
4255
  introduced?: (AuditIntroduced | null)
4256
+ /**
4257
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4258
+ * resolve for its path. CI formats read it for the annotation, SARIF
4259
+ * and CodeClimate level. Absent in output from older versions. Not
4260
+ * part of the finding identity, baseline keys or fingerprints.
4261
+ */
4262
+ effective_severity?: (EffectiveSeverity | null)
3984
4263
  }
3985
4264
  /**
3986
4265
  * A location where a duplicate export appears.
@@ -4027,6 +4306,13 @@ actions: IssueAction[]
4027
4306
  * the merge-base.
4028
4307
  */
4029
4308
  introduced?: (AuditIntroduced | null)
4309
+ /**
4310
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4311
+ * resolve for its path. CI formats read it for the annotation, SARIF
4312
+ * and CodeClimate level. Absent in output from older versions. Not
4313
+ * part of the finding identity, baseline keys or fingerprints.
4314
+ */
4315
+ effective_severity?: (EffectiveSeverity | null)
4030
4316
  }
4031
4317
  /**
4032
4318
  * Wire-shape envelope for a [`TestOnlyDependency`] finding. Carries a
@@ -4057,6 +4343,13 @@ actions: IssueAction[]
4057
4343
  * the merge-base.
4058
4344
  */
4059
4345
  introduced?: (AuditIntroduced | null)
4346
+ /**
4347
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4348
+ * resolve for its path. CI formats read it for the annotation, SARIF
4349
+ * and CodeClimate level. Absent in output from older versions. Not
4350
+ * part of the finding identity, baseline keys or fingerprints.
4351
+ */
4352
+ effective_severity?: (EffectiveSeverity | null)
4060
4353
  }
4061
4354
  /**
4062
4355
  * Wire-shape envelope for a [`DevDependencyInProduction`] finding. Carries a
@@ -4088,6 +4381,13 @@ actions: IssueAction[]
4088
4381
  * the merge-base.
4089
4382
  */
4090
4383
  introduced?: (AuditIntroduced | null)
4384
+ /**
4385
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4386
+ * resolve for its path. CI formats read it for the annotation, SARIF
4387
+ * and CodeClimate level. Absent in output from older versions. Not
4388
+ * part of the finding identity, baseline keys or fingerprints.
4389
+ */
4390
+ effective_severity?: (EffectiveSeverity | null)
4091
4391
  }
4092
4392
  /**
4093
4393
  * Wire-shape envelope for a [`CircularDependency`] finding. Mirrors
@@ -4135,6 +4435,13 @@ actions: IssueAction[]
4135
4435
  * the merge-base.
4136
4436
  */
4137
4437
  introduced?: (AuditIntroduced | null)
4438
+ /**
4439
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4440
+ * resolve for its path. CI formats read it for the annotation, SARIF
4441
+ * and CodeClimate level. Absent in output from older versions. Not
4442
+ * part of the finding identity, baseline keys or fingerprints.
4443
+ */
4444
+ effective_severity?: (EffectiveSeverity | null)
4138
4445
  }
4139
4446
  /**
4140
4447
  * One import hop in a circular dependency: the file containing the import
@@ -4190,6 +4497,13 @@ actions: IssueAction[]
4190
4497
  * the merge-base.
4191
4498
  */
4192
4499
  introduced?: (AuditIntroduced | null)
4500
+ /**
4501
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4502
+ * resolve for its path. CI formats read it for the annotation, SARIF
4503
+ * and CodeClimate level. Absent in output from older versions. Not
4504
+ * part of the finding identity, baseline keys or fingerprints.
4505
+ */
4506
+ effective_severity?: (EffectiveSeverity | null)
4193
4507
  }
4194
4508
  /**
4195
4509
  * Wire-shape envelope for a [`BoundaryViolation`] finding. Mirrors
@@ -4236,6 +4550,13 @@ actions: IssueAction[]
4236
4550
  * the merge-base.
4237
4551
  */
4238
4552
  introduced?: (AuditIntroduced | null)
4553
+ /**
4554
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4555
+ * resolve for its path. CI formats read it for the annotation, SARIF
4556
+ * and CodeClimate level. Absent in output from older versions. Not
4557
+ * part of the finding identity, baseline keys or fingerprints.
4558
+ */
4559
+ effective_severity?: (EffectiveSeverity | null)
4239
4560
  }
4240
4561
  /**
4241
4562
  * Wire-shape envelope for a [`BoundaryCoverageViolation`] finding. Carries
@@ -4264,6 +4585,13 @@ actions: IssueAction[]
4264
4585
  * the merge-base.
4265
4586
  */
4266
4587
  introduced?: (AuditIntroduced | null)
4588
+ /**
4589
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4590
+ * resolve for its path. CI formats read it for the annotation, SARIF
4591
+ * and CodeClimate level. Absent in output from older versions. Not
4592
+ * part of the finding identity, baseline keys or fingerprints.
4593
+ */
4594
+ effective_severity?: (EffectiveSeverity | null)
4267
4595
  }
4268
4596
  /**
4269
4597
  * Wire-shape envelope for a [`BoundaryCallViolation`] finding. Carries
@@ -4305,6 +4633,13 @@ actions: IssueAction[]
4305
4633
  * the merge-base.
4306
4634
  */
4307
4635
  introduced?: (AuditIntroduced | null)
4636
+ /**
4637
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4638
+ * resolve for its path. CI formats read it for the annotation, SARIF
4639
+ * and CodeClimate level. Absent in output from older versions. Not
4640
+ * part of the finding identity, baseline keys or fingerprints.
4641
+ */
4642
+ effective_severity?: (EffectiveSeverity | null)
4308
4643
  }
4309
4644
  /**
4310
4645
  * Wire-shape envelope for a [`PolicyViolation`] finding. Carries actions for
@@ -4382,6 +4717,13 @@ missing_reason?: boolean
4382
4717
  * Suggested next steps. Always emitted.
4383
4718
  */
4384
4719
  actions: IssueAction[]
4720
+ /**
4721
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4722
+ * resolve for its path. CI formats read it for the annotation, SARIF
4723
+ * and CodeClimate level. Absent in output from older versions. Not
4724
+ * part of the finding identity, baseline keys or fingerprints.
4725
+ */
4726
+ effective_severity?: (EffectiveSeverity | null)
4385
4727
  }
4386
4728
  /**
4387
4729
  * Wire-shape envelope for an [`UnusedCatalogEntry`] finding. Per-instance
@@ -4422,6 +4764,13 @@ actions: IssueAction[]
4422
4764
  * the merge-base.
4423
4765
  */
4424
4766
  introduced?: (AuditIntroduced | null)
4767
+ /**
4768
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4769
+ * resolve for its path. CI formats read it for the annotation, SARIF
4770
+ * and CodeClimate level. Absent in output from older versions. Not
4771
+ * part of the finding identity, baseline keys or fingerprints.
4772
+ */
4773
+ effective_severity?: (EffectiveSeverity | null)
4425
4774
  }
4426
4775
  /**
4427
4776
  * Wire-shape envelope for an [`EmptyCatalogGroup`] finding. Carries a
@@ -4450,6 +4799,13 @@ actions: IssueAction[]
4450
4799
  * the merge-base.
4451
4800
  */
4452
4801
  introduced?: (AuditIntroduced | null)
4802
+ /**
4803
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4804
+ * resolve for its path. CI formats read it for the annotation, SARIF
4805
+ * and CodeClimate level. Absent in output from older versions. Not
4806
+ * part of the finding identity, baseline keys or fingerprints.
4807
+ */
4808
+ effective_severity?: (EffectiveSeverity | null)
4453
4809
  }
4454
4810
  /**
4455
4811
  * Wire-shape envelope for an [`UnresolvedCatalogReference`] finding. The
@@ -4500,6 +4856,13 @@ actions: IssueAction[]
4500
4856
  * the merge-base.
4501
4857
  */
4502
4858
  introduced?: (AuditIntroduced | null)
4859
+ /**
4860
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4861
+ * resolve for its path. CI formats read it for the annotation, SARIF
4862
+ * and CodeClimate level. Absent in output from older versions. Not
4863
+ * part of the finding identity, baseline keys or fingerprints.
4864
+ */
4865
+ effective_severity?: (EffectiveSeverity | null)
4503
4866
  }
4504
4867
  /**
4505
4868
  * Wire-shape envelope for an [`UnusedDependencyOverride`] finding. Carries
@@ -4562,6 +4925,13 @@ actions: IssueAction[]
4562
4925
  * the merge-base.
4563
4926
  */
4564
4927
  introduced?: (AuditIntroduced | null)
4928
+ /**
4929
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4930
+ * resolve for its path. CI formats read it for the annotation, SARIF
4931
+ * and CodeClimate level. Absent in output from older versions. Not
4932
+ * part of the finding identity, baseline keys or fingerprints.
4933
+ */
4934
+ effective_severity?: (EffectiveSeverity | null)
4565
4935
  }
4566
4936
  /**
4567
4937
  * Wire-shape envelope for a [`MisconfiguredDependencyOverride`] finding.
@@ -4611,6 +4981,13 @@ actions: IssueAction[]
4611
4981
  * the merge-base.
4612
4982
  */
4613
4983
  introduced?: (AuditIntroduced | null)
4984
+ /**
4985
+ * Gate severity of this finding after `rules` and `overrides[].rules`
4986
+ * resolve for its path. CI formats read it for the annotation, SARIF
4987
+ * and CodeClimate level. Absent in output from older versions. Not
4988
+ * part of the finding identity, baseline keys or fingerprints.
4989
+ */
4990
+ effective_severity?: (EffectiveSeverity | null)
4614
4991
  }
4615
4992
  /**
4616
4993
  * Wire-shape envelope for an [`InvalidClientExport`] finding. There is no safe
@@ -4652,6 +5029,13 @@ actions: IssueAction[]
4652
5029
  * the merge-base.
4653
5030
  */
4654
5031
  introduced?: (AuditIntroduced | null)
5032
+ /**
5033
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5034
+ * resolve for its path. CI formats read it for the annotation, SARIF
5035
+ * and CodeClimate level. Absent in output from older versions. Not
5036
+ * part of the finding identity, baseline keys or fingerprints.
5037
+ */
5038
+ effective_severity?: (EffectiveSeverity | null)
4655
5039
  }
4656
5040
  /**
4657
5041
  * Wire-shape envelope for a [`MixedClientServerBarrel`] finding. There is no
@@ -4693,6 +5077,13 @@ actions: IssueAction[]
4693
5077
  * the merge-base.
4694
5078
  */
4695
5079
  introduced?: (AuditIntroduced | null)
5080
+ /**
5081
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5082
+ * resolve for its path. CI formats read it for the annotation, SARIF
5083
+ * and CodeClimate level. Absent in output from older versions. Not
5084
+ * part of the finding identity, baseline keys or fingerprints.
5085
+ */
5086
+ effective_severity?: (EffectiveSeverity | null)
4696
5087
  }
4697
5088
  /**
4698
5089
  * Wire-shape envelope for a [`MisplacedDirective`] finding. There is no safe
@@ -4729,6 +5120,13 @@ actions: IssueAction[]
4729
5120
  * the merge-base.
4730
5121
  */
4731
5122
  introduced?: (AuditIntroduced | null)
5123
+ /**
5124
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5125
+ * resolve for its path. CI formats read it for the annotation, SARIF
5126
+ * and CodeClimate level. Absent in output from older versions. Not
5127
+ * part of the finding identity, baseline keys or fingerprints.
5128
+ */
5129
+ effective_severity?: (EffectiveSeverity | null)
4732
5130
  }
4733
5131
  /**
4734
5132
  * Wire-shape envelope for an [`UnprovidedInject`] finding. There is no safe
@@ -4767,6 +5165,13 @@ actions: IssueAction[]
4767
5165
  * the merge-base.
4768
5166
  */
4769
5167
  introduced?: (AuditIntroduced | null)
5168
+ /**
5169
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5170
+ * resolve for its path. CI formats read it for the annotation, SARIF
5171
+ * and CodeClimate level. Absent in output from older versions. Not
5172
+ * part of the finding identity, baseline keys or fingerprints.
5173
+ */
5174
+ effective_severity?: (EffectiveSeverity | null)
4770
5175
  }
4771
5176
  /**
4772
5177
  * Wire-shape envelope for an [`UnrenderedComponent`] finding. There is no safe
@@ -4816,6 +5221,13 @@ actions: IssueAction[]
4816
5221
  * the merge-base.
4817
5222
  */
4818
5223
  introduced?: (AuditIntroduced | null)
5224
+ /**
5225
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5226
+ * resolve for its path. CI formats read it for the annotation, SARIF
5227
+ * and CodeClimate level. Absent in output from older versions. Not
5228
+ * part of the finding identity, baseline keys or fingerprints.
5229
+ */
5230
+ effective_severity?: (EffectiveSeverity | null)
4819
5231
  }
4820
5232
  /**
4821
5233
  * Wire-shape envelope for a [`RouteCollision`] finding. A route collision is a
@@ -4858,6 +5270,13 @@ actions: IssueAction[]
4858
5270
  * the merge-base.
4859
5271
  */
4860
5272
  introduced?: (AuditIntroduced | null)
5273
+ /**
5274
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5275
+ * resolve for its path. CI formats read it for the annotation, SARIF
5276
+ * and CodeClimate level. Absent in output from older versions. Not
5277
+ * part of the finding identity, baseline keys or fingerprints.
5278
+ */
5279
+ effective_severity?: (EffectiveSeverity | null)
4861
5280
  }
4862
5281
  /**
4863
5282
  * Wire-shape envelope for a [`DynamicSegmentNameConflict`] finding. The
@@ -4904,6 +5323,13 @@ actions: IssueAction[]
4904
5323
  * the merge-base.
4905
5324
  */
4906
5325
  introduced?: (AuditIntroduced | null)
5326
+ /**
5327
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5328
+ * resolve for its path. CI formats read it for the annotation, SARIF
5329
+ * and CodeClimate level. Absent in output from older versions. Not
5330
+ * part of the finding identity, baseline keys or fingerprints.
5331
+ */
5332
+ effective_severity?: (EffectiveSeverity | null)
4907
5333
  }
4908
5334
  /**
4909
5335
  * Wire-shape envelope for an [`UnusedComponentProp`] finding. There is no safe
@@ -4942,6 +5368,13 @@ actions: IssueAction[]
4942
5368
  * the merge-base.
4943
5369
  */
4944
5370
  introduced?: (AuditIntroduced | null)
5371
+ /**
5372
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5373
+ * resolve for its path. CI formats read it for the annotation, SARIF
5374
+ * and CodeClimate level. Absent in output from older versions. Not
5375
+ * part of the finding identity, baseline keys or fingerprints.
5376
+ */
5377
+ effective_severity?: (EffectiveSeverity | null)
4945
5378
  }
4946
5379
  /**
4947
5380
  * Wire-shape envelope for an [`UnusedComponentEmit`] finding. There is no safe
@@ -4980,6 +5413,13 @@ actions: IssueAction[]
4980
5413
  * the merge-base.
4981
5414
  */
4982
5415
  introduced?: (AuditIntroduced | null)
5416
+ /**
5417
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5418
+ * resolve for its path. CI formats read it for the annotation, SARIF
5419
+ * and CodeClimate level. Absent in output from older versions. Not
5420
+ * part of the finding identity, baseline keys or fingerprints.
5421
+ */
5422
+ effective_severity?: (EffectiveSeverity | null)
4983
5423
  }
4984
5424
  /**
4985
5425
  * Wire-shape envelope for an [`UnusedComponentInput`] finding. There is no safe
@@ -5018,6 +5458,13 @@ actions: IssueAction[]
5018
5458
  * the merge-base.
5019
5459
  */
5020
5460
  introduced?: (AuditIntroduced | null)
5461
+ /**
5462
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5463
+ * resolve for its path. CI formats read it for the annotation, SARIF
5464
+ * and CodeClimate level. Absent in output from older versions. Not
5465
+ * part of the finding identity, baseline keys or fingerprints.
5466
+ */
5467
+ effective_severity?: (EffectiveSeverity | null)
5021
5468
  }
5022
5469
  /**
5023
5470
  * Wire-shape envelope for an [`UnusedComponentOutput`] finding. There is no safe
@@ -5056,6 +5503,13 @@ actions: IssueAction[]
5056
5503
  * the merge-base.
5057
5504
  */
5058
5505
  introduced?: (AuditIntroduced | null)
5506
+ /**
5507
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5508
+ * resolve for its path. CI formats read it for the annotation, SARIF
5509
+ * and CodeClimate level. Absent in output from older versions. Not
5510
+ * part of the finding identity, baseline keys or fingerprints.
5511
+ */
5512
+ effective_severity?: (EffectiveSeverity | null)
5059
5513
  }
5060
5514
  /**
5061
5515
  * Wire-shape envelope for an [`UnusedSvelteEvent`] finding. There is no safe
@@ -5095,6 +5549,13 @@ actions: IssueAction[]
5095
5549
  * the merge-base.
5096
5550
  */
5097
5551
  introduced?: (AuditIntroduced | null)
5552
+ /**
5553
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5554
+ * resolve for its path. CI formats read it for the annotation, SARIF
5555
+ * and CodeClimate level. Absent in output from older versions. Not
5556
+ * part of the finding identity, baseline keys or fingerprints.
5557
+ */
5558
+ effective_severity?: (EffectiveSeverity | null)
5098
5559
  }
5099
5560
  /**
5100
5561
  * Wire-shape envelope for an [`UnusedServerAction`] finding. There is no safe
@@ -5129,6 +5590,13 @@ actions: IssueAction[]
5129
5590
  * the merge-base.
5130
5591
  */
5131
5592
  introduced?: (AuditIntroduced | null)
5593
+ /**
5594
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5595
+ * resolve for its path. CI formats read it for the annotation, SARIF
5596
+ * and CodeClimate level. Absent in output from older versions. Not
5597
+ * part of the finding identity, baseline keys or fingerprints.
5598
+ */
5599
+ effective_severity?: (EffectiveSeverity | null)
5132
5600
  }
5133
5601
  /**
5134
5602
  * Wire-shape envelope for an [`UnusedLoadDataKey`] finding. There is no safe
@@ -5169,6 +5637,13 @@ actions: IssueAction[]
5169
5637
  * the merge-base.
5170
5638
  */
5171
5639
  introduced?: (AuditIntroduced | null)
5640
+ /**
5641
+ * Gate severity of this finding after `rules` and `overrides[].rules`
5642
+ * resolve for its path. CI formats read it for the annotation, SARIF
5643
+ * and CodeClimate level. Absent in output from older versions. Not
5644
+ * part of the finding identity, baseline keys or fingerprints.
5645
+ */
5646
+ effective_severity?: (EffectiveSeverity | null)
5172
5647
  }
5173
5648
  /**
5174
5649
  * Wire-shape envelope for a [`PropDrillingChain`] finding. There is no safe
@@ -5203,6 +5678,14 @@ actions: IssueAction[]
5203
5678
  * the merge-base.
5204
5679
  */
5205
5680
  introduced?: (AuditIntroduced | null)
5681
+ /**
5682
+ * Rule severity of this finding. This type never gates the run, so the
5683
+ * value does not change the exit code. `fallow report --from` reads it
5684
+ * for the SARIF level, so the level does not depend on the config at
5685
+ * render time. Absent in output from older versions. Not part of the
5686
+ * finding identity, baseline keys or fingerprints.
5687
+ */
5688
+ effective_severity?: (EffectiveSeverity | null)
5206
5689
  }
5207
5690
  /**
5208
5691
  * One hop in a prop-drilling chain: a component that received the prop and
@@ -5260,6 +5743,14 @@ actions: IssueAction[]
5260
5743
  * the merge-base.
5261
5744
  */
5262
5745
  introduced?: (AuditIntroduced | null)
5746
+ /**
5747
+ * Rule severity of this finding. This type never gates the run, so the
5748
+ * value does not change the exit code. `fallow report --from` reads it
5749
+ * for the SARIF level, so the level does not depend on the config at
5750
+ * render time. Absent in output from older versions. Not part of the
5751
+ * finding identity, baseline keys or fingerprints.
5752
+ */
5753
+ effective_severity?: (EffectiveSeverity | null)
5263
5754
  }
5264
5755
  /**
5265
5756
  * Wire-shape envelope for a [`DuplicatePropShape`] finding. There is no safe
@@ -5310,6 +5801,14 @@ actions: IssueAction[]
5310
5801
  * the merge-base.
5311
5802
  */
5312
5803
  introduced?: (AuditIntroduced | null)
5804
+ /**
5805
+ * Rule severity of this finding. This type never gates the run, so the
5806
+ * value does not change the exit code. `fallow report --from` reads it
5807
+ * for the SARIF level, so the level does not depend on the config at
5808
+ * render time. Absent in output from older versions. Not part of the
5809
+ * finding identity, baseline keys or fingerprints.
5810
+ */
5811
+ effective_severity?: (EffectiveSeverity | null)
5313
5812
  }
5314
5813
  /**
5315
5814
  * One member of a duplicate-prop-shape group: the OTHER components that share
@@ -5483,6 +5982,19 @@ moved_entries: number
5483
5982
  * existed gets, which is why the keys remain the fallback.
5484
5983
  */
5485
5984
  unrecognised_format?: boolean
5985
+ /**
5986
+ * The command that saved the loaded file, when `unrecognised_format` is
5987
+ * true and the file names a writer this version knows: `dead-code`,
5988
+ * `dupes` or `health`, the token the file carries in its top-level `kind`.
5989
+ *
5990
+ * Absent, never null, for this command's own baseline, for a file that
5991
+ * names no writer (an empty file, or a baseline saved before `kind`
5992
+ * existed) and for a `kind` token this version does not know. The value
5993
+ * set is OPEN: a later release can add a writer, so treat an unknown value
5994
+ * as "another command". The CLI computes it once per loaded baseline and
5995
+ * uses the same value for its stderr note.
5996
+ */
5997
+ saved_by?: string
5486
5998
  /**
5487
5999
  * Which channels narrowed this run, present and non-empty exactly when
5488
6000
  * `change_scoped` is true. Both members are derived from one function, so
@@ -5566,9 +6078,10 @@ reason?: (string | null)
5566
6078
  * whole object narrows the report tells its reader an unwritten SARIF file
5567
6079
  * widened the analysis, which is what `affects` exists to prevent.
5568
6080
  *
5569
- * `scope_size` is emitted for `diff-filter` only today, in added lines. A
5570
- * consumer reads the unit off the name, so a name that starts measuring its
5571
- * own scope in a later release needs no change here.
6081
+ * `scope_size` is emitted for `diff-filter`, in added lines, and for
6082
+ * `changed-since`, in changed files that the run analyzed. `sarif-file`
6083
+ * measures no scope. A consumer reads the unit off the name, so a name that
6084
+ * starts to measure its own scope in a later release needs no change here.
5572
6085
  *
5573
6086
  * `invalid-ref` is reachable only through the programmatic API. The
5574
6087
  * `--changed-since` flag validates its value before a run starts and fails
@@ -5591,7 +6104,8 @@ affects: RequestEffect
5591
6104
  /**
5592
6105
  * What was asked, as the user spelled it: the git ref for
5593
6106
  * `changed-since`, the diff source label (`--diff-file pr.diff`,
5594
- * `--diff-stdin`, `$FALLOW_DIFF_FILE build/pr.diff`) for `diff-filter`,
6107
+ * `--diff-stdin`, `$FALLOW_DIFF_FILE build/pr.diff`, or
6108
+ * `diffFile pr.diff` for the programmatic option) for `diff-filter`,
5595
6109
  * the target path for `sarif-file`. Echoed rather than normalised, so a
5596
6110
  * consumer must not join it to the project root the way it joins every
5597
6111
  * other path-shaped field.
@@ -5604,9 +6118,14 @@ requested: string
5604
6118
  * number there would describe a scope nobody applied.
5605
6119
  *
5606
6120
  * The unit belongs to the name. `diff-filter` counts added lines, which is
5607
- * what its filter keeps a finding for. Read the unit off the name the entry
5608
- * is keyed under, never across names, and read an absent member as "not
5609
- * measured" rather than as zero.
6121
+ * what its filter keeps a finding for. `changed-since` counts changed
6122
+ * files that the run analyzed: a changed file that discovery or an ignore
6123
+ * rule dropped does not count, so a change to a README only gives `0`. A
6124
+ * combined run counts a file that any of its analyses kept, because a
6125
+ * per-analysis `production` setting can give its analyses different
6126
+ * files.
6127
+ * Read the unit off the name the entry is keyed under, never across names,
6128
+ * and read an absent member as "not measured" rather than as zero.
5610
6129
  *
5611
6130
  * The count is what the run INDEXED rather than the true total:
5612
6131
  * `diff-filter` indexes at most one million added lines and reports that
@@ -6201,6 +6720,14 @@ react_prop_count?: number
6201
6720
  react_hook_profile?: (ReactHookProfile | null)
6202
6721
  exceeded: ExceededThreshold
6203
6722
  severity: FindingSeverity
6723
+ /**
6724
+ * Gate severity after the `complexity-*` rules and their
6725
+ * `overrides[].rules` entries: `error` fails the run, `warn` does not.
6726
+ * The most severe rule of the kinds in `exceeded` wins. It is separate
6727
+ * from the band in `severity`, which ranks the finding and does not gate
6728
+ * it. Absent in reports from older versions.
6729
+ */
6730
+ effective_severity?: (EffectiveSeverity | null)
6204
6731
  /**
6205
6732
  * CRAP score (change risk anti-pattern), when coverage data exists.
6206
6733
  */
@@ -6507,6 +7034,11 @@ average_maintainability?: (number | null)
6507
7034
  * Coverage model behind the CRAP scores, when coverage was used.
6508
7035
  */
6509
7036
  coverage_model?: (CoverageModel | null)
7037
+ /**
7038
+ * Input format of the measured coverage (`istanbul` or `v8`). Present
7039
+ * only with `coverage_model: "istanbul"`.
7040
+ */
7041
+ coverage_input_format?: (CoverageInputFormat | null)
6510
7042
  /**
6511
7043
  * Whether CRAP findings mix coverage sources.
6512
7044
  */
@@ -7510,8 +8042,8 @@ watermark?: (RuntimeCoverageWatermark | null)
7510
8042
  */
7511
8043
  warnings?: RuntimeCoverageMessage[]
7512
8044
  /**
7513
- * Whether an autonomous agent may act on this report (fallow-rs/fallow-cloud#316,
7514
- * mirrors the cloud runtime-context contract). `false` when the capture
8045
+ * Whether an autonomous agent may act on this report (mirrors
8046
+ * the cloud runtime-context contract). `false` when the capture
7515
8047
  * carries no usable runtime evidence (no tracked functions); then
7516
8048
  * `actionability_verdict` is `insufficient_evidence` and
7517
8049
  * `actionability_reason` explains. F4: a non-action floor, never a gate on a
@@ -7741,7 +8273,7 @@ description: string
7741
8273
  auto_fixable: boolean
7742
8274
  }
7743
8275
  /**
7744
- * Discriminator inputs that PRODUCED a finding's verdict (fallow-rs/fallow-cloud#321),
8276
+ * Discriminator inputs that PRODUCED a finding's verdict,
7745
8277
  * emitted alongside the verdict so an agent can reproduce it and see the
7746
8278
  * minimum-observation confidence cap instead of re-deriving them from scratch.
7747
8279
  * F4: these make the EXISTING Fallow-owned discriminators legible; they are not
@@ -7937,7 +8469,7 @@ code: string
7937
8469
  message: string
7938
8470
  }
7939
8471
  /**
7940
- * Provenance of a runtime-coverage report (fallow-rs/fallow-cloud#319), mirroring
8472
+ * Provenance of a runtime-coverage report, mirroring
7941
8473
  * the cloud runtime-context `provenance` block so the local-capture and cloud
7942
8474
  * surfaces present one portable shape. F4: provenance is context only; it never
7943
8475
  * gates a verdict or confidence.
@@ -10137,6 +10669,12 @@ imported_by: string[]
10137
10669
  * Re-exports declared by this file.
10138
10670
  */
10139
10671
  re_exports: TracedReExport[]
10672
+ /**
10673
+ * The configs that make this file an entry point through Module
10674
+ * Federation `exposes`, one per config. Absent when no Federation config
10675
+ * exposes the file (issue #2796).
10676
+ */
10677
+ sources?: TraceSource[]
10140
10678
  }
10141
10679
  /**
10142
10680
  * An export with usage information.
@@ -10176,6 +10714,37 @@ imported_name: string
10176
10714
  */
10177
10715
  exported_name: string
10178
10716
  }
10717
+ /**
10718
+ * A config that names a traced file or a traced dependency, and the key that
10719
+ * names it.
10720
+ */
10721
+ export interface TraceSource {
10722
+ /**
10723
+ * The mechanism that names the file or the dependency:
10724
+ * `module-federation`. The set is open.
10725
+ */
10726
+ kind: string
10727
+ /**
10728
+ * The plugin that read the config, as it labels itself:
10729
+ * `module-federation` for a standalone `module-federation.config.*`,
10730
+ * or the bundler plugin (`webpack`, `rspack`, `rsbuild`, `vite`,
10731
+ * `nextjs`) that read the same options inline from its own config.
10732
+ */
10733
+ plugin: string
10734
+ /**
10735
+ * The file that names the file or the dependency, relative to the
10736
+ * project root: the config file, or the source file of a Module
10737
+ * Federation runtime call.
10738
+ */
10739
+ config: string
10740
+ /**
10741
+ * The config key or the runtime function that names the file or the
10742
+ * dependency: `exposes` for an exposed file, `remotes` for a remote
10743
+ * alias, and `registerRemotes`, `loadRemote`, `init` or `createInstance`
10744
+ * for a remote that a runtime call names. The set is open.
10745
+ */
10746
+ key: string
10747
+ }
10179
10748
  /**
10180
10749
  * Result of tracing a dependency: where it is used.
10181
10750
  */
@@ -10204,6 +10773,13 @@ is_used: boolean
10204
10773
  * Total import count.
10205
10774
  */
10206
10775
  import_count: number
10776
+ /**
10777
+ * The configs that declare this name as a Module Federation remote alias
10778
+ * under `remotes`, one per config. A remote alias is provided by a
10779
+ * remote container at runtime, not by an npm package. Absent when no
10780
+ * Federation config declares the name (issue #2796).
10781
+ */
10782
+ sources?: TraceSource[]
10207
10783
  }
10208
10784
  /**
10209
10785
  * Result of tracing a clone: all groups containing the code at a source
@@ -11296,13 +11872,13 @@ grouped_by?: (GroupByMode | null)
11296
11872
  */
11297
11873
  groups?: (HealthGroup[] | null)
11298
11874
  /**
11299
- * Every gate this run ARMED, keyed by name, absent when it armed none.
11300
- * Each entry is the same rule that decides the exit code, so a CI
11301
- * integration reads the verdict instead of guessing from a process status
11302
- * it usually cannot see. A gate fails the build when `status` is `fail`
11303
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
11304
- * rules fail a run with no flag at all, so an absent object means "no gate
11305
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
11875
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
11876
+ * always emits it, with the command's default exit rule in it also when
11877
+ * no flag armed a gate, so a CI integration reads the verdict instead of
11878
+ * guessing from a process status it usually cannot see. A gate fails the
11879
+ * build when `status` is `fail` AND `enforced` is true. The typed
11880
+ * programmatic API runs no CLI gate and leaves it absent. See
11881
+ * [`crate::GateOutcomes`].
11306
11882
  */
11307
11883
  gate_outcomes?: (GateOutcomes | null)
11308
11884
  /**
@@ -11499,13 +12075,11 @@ groups?: (DuplicationGroup[] | null)
11499
12075
  */
11500
12076
  baseline_staleness?: (BaselineStaleness | null)
11501
12077
  /**
11502
- * Every gate this run ARMED, keyed by name, absent when it armed none.
11503
- * Each entry is the same rule that decides the exit code, so a CI
11504
- * integration reads the verdict instead of guessing from a process status
11505
- * it usually cannot see. A gate fails the build when `status` is `fail`
11506
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
11507
- * rules fail a run with no flag at all, so an absent object means "no gate
11508
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
12078
+ * The verdict of every gate this run armed, keyed by name, absent when
12079
+ * it armed none. `dupes` has no default exit rule: a run with no armed
12080
+ * gate always exits 0, so an absent object means that the run passed. A
12081
+ * gate fails the build when `status` is `fail` AND `enforced` is true.
12082
+ * See [`crate::GateOutcomes`].
11509
12083
  */
11510
12084
  gate_outcomes?: (GateOutcomes | null)
11511
12085
  /**
@@ -11686,13 +12260,13 @@ groups: CheckGroupedEntry[]
11686
12260
  */
11687
12261
  baseline_staleness?: (BaselineStaleness | null)
11688
12262
  /**
11689
- * Every gate this run ARMED, keyed by name, absent when it armed none.
11690
- * Each entry is the same rule that decides the exit code, so a CI
11691
- * integration reads the verdict instead of guessing from a process status
11692
- * it usually cannot see. A gate fails the build when `status` is `fail`
11693
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
11694
- * rules fail a run with no flag at all, so an absent object means "no gate
11695
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
12263
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
12264
+ * always emits it, with the command's default exit rule in it also when
12265
+ * no flag armed a gate, so a CI integration reads the verdict instead of
12266
+ * guessing from a process status it usually cannot see. A gate fails the
12267
+ * build when `status` is `fail` AND `enforced` is true. The typed
12268
+ * programmatic API runs no CLI gate and leaves it absent. See
12269
+ * [`crate::GateOutcomes`].
11696
12270
  */
11697
12271
  gate_outcomes?: (GateOutcomes | null)
11698
12272
  /**
@@ -11764,6 +12338,12 @@ unused_types: UnusedTypeFinding[]
11764
12338
  * typed `actions` array natively.
11765
12339
  */
11766
12340
  private_type_leaks: PrivateTypeLeakFinding[]
12341
+ /**
12342
+ * Exports marked `@deprecated` that still have at least one consumer in
12343
+ * a reachable file. Wrapped in [`DeprecatedExportInUseFinding`]. Opt-in: the
12344
+ * `deprecated-exports-in-use` rule defaults to `off`.
12345
+ */
12346
+ deprecated_exports_in_use?: DeprecatedExportInUseFinding[]
11767
12347
  /**
11768
12348
  * Dependencies listed in package.json but never imported. Wrapped in
11769
12349
  * [`UnusedDependencyFinding`] so each entry carries a typed `actions`
@@ -12375,13 +12955,13 @@ version: ToolVersion
12375
12955
  elapsed_ms: ElapsedMs
12376
12956
  config: SecurityOutputConfig
12377
12957
  /**
12378
- * Every gate this run ARMED, keyed by name, absent when it armed none.
12379
- * Each entry is the same rule that decides the exit code, so a CI
12380
- * integration reads the verdict instead of guessing from a process status
12381
- * it usually cannot see. A gate fails the build when `status` is `fail`
12382
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
12383
- * rules fail a run with no flag at all, so an absent object means "no gate
12384
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
12958
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
12959
+ * always emits it, with the command's default exit rule in it also when
12960
+ * no flag armed a gate, so a CI integration reads the verdict instead of
12961
+ * guessing from a process status it usually cannot see. A gate fails the
12962
+ * build when `status` is `fail` AND `enforced` is true. The typed
12963
+ * programmatic API runs no CLI gate and leaves it absent. See
12964
+ * [`crate::GateOutcomes`].
12385
12965
  */
12386
12966
  gate_outcomes?: (GateOutcomes | null)
12387
12967
  /**
@@ -12488,10 +13068,10 @@ new_count: number
12488
13068
  export interface SecurityFinding {
12489
13069
  /**
12490
13070
  * Stable per-finding correlation id, identical across runs for the same
12491
- * rule + anchor path + line. An autonomous agent that triaged this
13071
+ * rule + anchor path + line + column. An autonomous agent that triaged this
12492
13072
  * candidate on a prior run uses it to correlate the candidate after a
12493
- * rebase. Equal to the SARIF `partialFingerprints` value for the same
12494
- * finding (one shared helper computes both).
13073
+ * rebase. Equal to the SARIF `partialFingerprints["fallowSecurity/v2"]`
13074
+ * value for the same finding (one shared helper computes both).
12495
13075
  */
12496
13076
  finding_id: string
12497
13077
  kind: SecurityFindingKind
@@ -12909,7 +13489,8 @@ defensive_boundary: SecurityDefensiveBoundary
12909
13489
  */
12910
13490
  export interface SecurityDefensiveBoundary {
12911
13491
  /**
12912
- * Known controls detected along this path.
13492
+ * Control patterns observed in files on this import trace. These are
13493
+ * verification hints, not proof of sink protection or value-level data flow.
12913
13494
  */
12914
13495
  controls: SecurityDefensiveControl[]
12915
13496
  /**
@@ -12919,7 +13500,9 @@ controls: SecurityDefensiveControl[]
12919
13500
  verification_prompt: string
12920
13501
  }
12921
13502
  /**
12922
- * Defensive control found on an attack-surface path.
13503
+ * Control pattern observed in a file on an attack-surface import trace.
13504
+ * Its presence does not prove that it executes before the sink or protects
13505
+ * the same input.
12923
13506
  */
12924
13507
  export interface SecurityDefensiveControl {
12925
13508
  kind: SecurityControlKind
@@ -13018,13 +13601,13 @@ version: ToolVersion
13018
13601
  elapsed_ms: ElapsedMs
13019
13602
  config: SecurityOutputConfig
13020
13603
  /**
13021
- * Every gate this run ARMED, keyed by name, absent when it armed none.
13022
- * Each entry is the same rule that decides the exit code, so a CI
13023
- * integration reads the verdict instead of guessing from a process status
13024
- * it usually cannot see. A gate fails the build when `status` is `fail`
13025
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
13026
- * rules fail a run with no flag at all, so an absent object means "no gate
13027
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
13604
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
13605
+ * always emits it, with the command's default exit rule in it also when
13606
+ * no flag armed a gate, so a CI integration reads the verdict instead of
13607
+ * guessing from a process status it usually cannot see. A gate fails the
13608
+ * build when `status` is `fail` AND `enforced` is true. The typed
13609
+ * programmatic API runs no CLI gate and leaves it absent. See
13610
+ * [`crate::GateOutcomes`].
13028
13611
  */
13029
13612
  gate_outcomes?: (GateOutcomes | null)
13030
13613
  /**
@@ -13321,13 +13904,17 @@ schema_version: CombinedSchemaVersion
13321
13904
  version: ToolVersion
13322
13905
  elapsed_ms: ElapsedMs
13323
13906
  /**
13324
- * Every gate this run ARMED, keyed by name, absent when it armed none.
13325
- * Each entry is the same rule that decides the exit code, so a CI
13326
- * integration reads the verdict instead of guessing from a process status
13327
- * it usually cannot see. A gate fails the build when `status` is `fail`
13328
- * AND `enforced` is true. Armed, not evaluated: fallow's default severity
13329
- * rules fail a run with no flag at all, so an absent object means "no gate
13330
- * was asked for", never "nothing failed". See [`crate::GateOutcomes`].
13907
+ * The verdict of every gate this run evaluated, keyed by name. The CLI
13908
+ * always emits it, with the default exit rule of each section that ran
13909
+ * (`error-severity-findings`, `health-findings`). The machine formats of
13910
+ * the combined run exit 0 for findings, so most entries have `enforced:
13911
+ * false`. For the default exit rules (`error-severity-findings`,
13912
+ * `health-findings`), `status` gives the verdict of the human run. An
13913
+ * advisory entry can report `fail` without a failure of the human run: an
13914
+ * example is a `stale-baseline` entry that `--fail-on-stale-baseline` did
13915
+ * not arm. A gate fails the build when `status` is `fail` AND `enforced`
13916
+ * is true. The typed
13917
+ * programmatic API leaves it absent. See [`crate::GateOutcomes`].
13331
13918
  */
13332
13919
  gate_outcomes?: (GateOutcomes | null)
13333
13920
  /**
@@ -13351,7 +13938,7 @@ check?: (CheckOutput | null)
13351
13938
  /**
13352
13939
  * Duplication section of the combined run.
13353
13940
  */
13354
- dupes?: (DupesReportPayload | null)
13941
+ dupes?: (CombinedDupesSection | null)
13355
13942
  /**
13356
13943
  * Health section of the combined run.
13357
13944
  */
@@ -13392,6 +13979,41 @@ health?: (Meta | null)
13392
13979
  */
13393
13980
  telemetry?: (TelemetryMeta | null)
13394
13981
  }
13982
+ /**
13983
+ * Wire shape of the `dupes` section inside the bare combined envelope.
13984
+ *
13985
+ * The section is the standalone payload plus the view of the loaded
13986
+ * duplication baseline. The standalone `dupes` envelope carries the same
13987
+ * `baseline_staleness` key at its root.
13988
+ */
13989
+ export interface CombinedDupesSection {
13990
+ /**
13991
+ * All detected clone groups, each wrapped with typed actions.
13992
+ */
13993
+ clone_groups: CloneGroupFinding[]
13994
+ /**
13995
+ * Clone families, each wrapped with typed actions. Inner `groups`
13996
+ * inside each `CloneFamilyFinding` are themselves wrapped as
13997
+ * `CloneGroupFinding` entries carrying their own `actions[]` (and
13998
+ * optional audit-mode `introduced` flag), so JSON-Schema strict
13999
+ * consumers and TS consumers reading `clone_families[].groups[]` see
14000
+ * the same shape as the top-level `clone_groups[]` array (preserves
14001
+ * the issue #393 regression contract).
14002
+ */
14003
+ clone_families: CloneFamilyFinding[]
14004
+ /**
14005
+ * Mirrored directory pairs.
14006
+ */
14007
+ mirrored_directories?: MirroredDirectory[]
14008
+ stats: DuplicationStats
14009
+ /**
14010
+ * This run's view of the loaded duplication baseline, present only when
14011
+ * `--dupes-baseline` loaded one. Read `change_scoped` before dividing
14012
+ * `matched_entries` by `baseline_entries`: a narrowed run can report
14013
+ * `matched_entries: 0` on a healthy baseline.
14014
+ */
14015
+ baseline_staleness?: (BaselineStaleness | null)
14016
+ }
13395
14017
  /**
13396
14018
  * Envelope emitted by `fallow flags --format json`.
13397
14019
  */
@@ -13637,6 +14259,11 @@ deltas: ReviewDeltas
13637
14259
  */
13638
14260
  weakening: WeakeningSignal[]
13639
14261
  routing: RoutingFacts
14262
+ /**
14263
+ * Owner-group reach from the CODEOWNERS file. Absent when no CODEOWNERS
14264
+ * file is found or the file cannot be read.
14265
+ */
14266
+ ownership?: (OwnershipFacts | null)
13640
14267
  /**
13641
14268
  * Dead-code findings scoped to the audit changeset.
13642
14269
  */
@@ -14116,6 +14743,96 @@ expert: string[]
14116
14743
  */
14117
14744
  bus_factor_one?: boolean
14118
14745
  }
14746
+ /**
14747
+ * How far a changeset reaches across CODEOWNERS owner groups.
14748
+ *
14749
+ * Computed from the CODEOWNERS file alone: no git history is read, so the
14750
+ * section is present whenever a CODEOWNERS file is found, also when the churn
14751
+ * walk behind `routing` finds nothing. Each file maps to its primary owner
14752
+ * (the first owner of the last matching rule). A file that no rule matches,
14753
+ * or that a GitLab negation rule matches, belongs to the `(unowned)` group.
14754
+ * The owner strings use the same vocabulary as `routing.units[].expert`.
14755
+ *
14756
+ * Absent from the brief when no CODEOWNERS file is found, or when the file
14757
+ * cannot be read or does not parse. A configured `codeowners` path that
14758
+ * fails also prints a warning on stderr.
14759
+ *
14760
+ * `groups[].direct_count` counts all changed files, source or not, so the
14761
+ * sum over all groups is the number of changed files, not the size of
14762
+ * `impact_closure.in_diff`. Slice owners count only the files of the
14763
+ * partition units, which are source files.
14764
+ */
14765
+ export interface OwnershipFacts {
14766
+ /**
14767
+ * Distinct owner groups across the changed files and the impact closure.
14768
+ * The `(unowned)` group counts as one group. Exact, never capped.
14769
+ */
14770
+ group_count: number
14771
+ /**
14772
+ * Owner groups that own no changed file and appear only through the
14773
+ * impact closure. Exact, never capped.
14774
+ */
14775
+ transitive_only_count: number
14776
+ /**
14777
+ * Changed files that belong to the `(unowned)` group.
14778
+ */
14779
+ unowned_direct_count: number
14780
+ /**
14781
+ * The owner groups, sorted by `direct_count` descending, then
14782
+ * `affected_count` descending, then `owner`. At most [`OWNER_GROUP_CAP`]
14783
+ * entries. The counts in each entry are exact.
14784
+ */
14785
+ groups: OwnerGroupFact[]
14786
+ /**
14787
+ * How many owner groups did not fit within [`OWNER_GROUP_CAP`] and are
14788
+ * absent from `groups`. Zero when nothing was omitted.
14789
+ */
14790
+ groups_omitted: number
14791
+ /**
14792
+ * The owner set of each independent slice, aligned by index with
14793
+ * `partition.independent_slices`. Present only when that list is present
14794
+ * (two or more slices). A fact for the reviewer, never a demand to split.
14795
+ */
14796
+ slices?: OwnershipSliceFact[]
14797
+ }
14798
+ /**
14799
+ * One owner group and how many files of the changeset it owns.
14800
+ */
14801
+ export interface OwnerGroupFact {
14802
+ /**
14803
+ * The CODEOWNERS owner (`@user`, `@org/team`, or an email), or
14804
+ * `(unowned)`.
14805
+ */
14806
+ owner: string
14807
+ /**
14808
+ * Changed files this group owns.
14809
+ */
14810
+ direct_count: number
14811
+ /**
14812
+ * Files of the impact closure (affected, not in the diff) this group owns.
14813
+ */
14814
+ affected_count: number
14815
+ }
14816
+ /**
14817
+ * The owners of one independent slice of the partition.
14818
+ */
14819
+ export interface OwnershipSliceFact {
14820
+ /**
14821
+ * The module directories of the slice, as in
14822
+ * `partition.independent_slices`.
14823
+ */
14824
+ module_dirs: string[]
14825
+ /**
14826
+ * The distinct owners of the changed files in the slice, sorted. The
14827
+ * `(unowned)` group is a distinct owner. Never empty.
14828
+ */
14829
+ owners: string[]
14830
+ /**
14831
+ * True when the slice has exactly one owner, so one owner group can
14832
+ * review it on its own.
14833
+ */
14834
+ separable: boolean
14835
+ }
14119
14836
  /**
14120
14837
  * The brief's branching section.
14121
14838
  */
@@ -14495,6 +15212,12 @@ deltas: ReviewDeltas
14495
15212
  */
14496
15213
  weakening: WeakeningSignal[]
14497
15214
  routing: RoutingFacts
15215
+ /**
15216
+ * How far the change reaches across CODEOWNERS owner groups, computed
15217
+ * from the CODEOWNERS file alone. Absent when no CODEOWNERS file is
15218
+ * found or the file cannot be read.
15219
+ */
15220
+ ownership?: (OwnershipFacts | null)
14498
15221
  decisions: DecisionSurface
14499
15222
  /**
14500
15223
  * Branching conservation across the changeset: total branching against
@@ -15742,6 +16465,16 @@ export type BoundaryViolation = BoundaryViolationFinding;
15742
16465
  */
15743
16466
  export type CircularDependency = CircularDependencyFinding;
15744
16467
 
16468
+ /**
16469
+ * Backwards-compat alias for the pre-#384 bare `DeprecatedExportInUse` name.
16470
+ * The wire shape is byte-identical: `DeprecatedExportInUseFinding` flattens the bare
16471
+ * finding's fields via `#[serde(flatten)]` and adds `actions[]` plus
16472
+ * the optional audit-mode `introduced` flag. Consumers that imported
16473
+ * `DeprecatedExportInUse` from `fallow/types` pre-migration continue to work via
16474
+ * this alias; new code should prefer `DeprecatedExportInUseFinding`.
16475
+ */
16476
+ export type DeprecatedExportInUse = DeprecatedExportInUseFinding;
16477
+
15745
16478
  /**
15746
16479
  * Backwards-compat alias for the pre-#384 bare `DevDependencyInProduction` name.
15747
16480
  * The wire shape is byte-identical: `DevDependencyInProductionFinding` flattens the bare