fallow 2.79.0 → 2.81.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "fallow",
3
- "version": "2.79.0",
3
+ "version": "2.81.0",
4
4
  "description": "Deterministic codebase intelligence for TypeScript and JavaScript. Quality, risk, architecture, dependencies, duplication, and safe cleanup evidence for humans, CI, and agents. Optional runtime intelligence layer (Fallow Runtime) adds production execution evidence. Rust-native, sub-second, 96 framework plugins.",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -81,13 +81,13 @@
81
81
  "@tanstack/intent": "0.0.41"
82
82
  },
83
83
  "optionalDependencies": {
84
- "@fallow-cli/darwin-arm64": "2.79.0",
85
- "@fallow-cli/darwin-x64": "2.79.0",
86
- "@fallow-cli/linux-x64-gnu": "2.79.0",
87
- "@fallow-cli/linux-arm64-gnu": "2.79.0",
88
- "@fallow-cli/linux-x64-musl": "2.79.0",
89
- "@fallow-cli/linux-arm64-musl": "2.79.0",
90
- "@fallow-cli/win32-arm64-msvc": "2.79.0",
91
- "@fallow-cli/win32-x64-msvc": "2.79.0"
84
+ "@fallow-cli/darwin-arm64": "2.81.0",
85
+ "@fallow-cli/darwin-x64": "2.81.0",
86
+ "@fallow-cli/linux-x64-gnu": "2.81.0",
87
+ "@fallow-cli/linux-arm64-gnu": "2.81.0",
88
+ "@fallow-cli/linux-x64-musl": "2.81.0",
89
+ "@fallow-cli/linux-arm64-musl": "2.81.0",
90
+ "@fallow-cli/win32-arm64-msvc": "2.81.0",
91
+ "@fallow-cli/win32-x64-msvc": "2.81.0"
92
92
  }
93
93
  }
package/schema.json CHANGED
@@ -865,7 +865,7 @@
865
865
  ]
866
866
  },
867
867
  "emailMode": {
868
- "description": "Privacy mode for emitted author emails. Defaults to `handle`.\nOverride on the CLI via `--ownership-emails=raw|handle|hash`.",
868
+ "description": "Privacy mode for emitted author emails. Defaults to `handle`.\nOverride on the CLI via `--ownership-emails=raw|handle|anonymized`.\nThe legacy spelling `hash` is still accepted for compatibility.",
869
869
  "$ref": "#/$defs/EmailMode",
870
870
  "default": "handle"
871
871
  }
@@ -885,7 +885,12 @@
885
885
  "const": "handle"
886
886
  },
887
887
  {
888
- "description": "Show a stable `xxh3:<16hex>` pseudonym derived from the raw email.\nNon-cryptographic; suitable to keep raw emails out of CI artifacts\n(SARIF, code-scanning uploads) but not as a security primitive --\na known list of org emails can be brute-forced into a rainbow table.\nUse in regulated environments where even local-parts are sensitive.",
888
+ "description": "Show a stable `xxh3:<16hex>` pseudonym derived from the raw email.\nNon-cryptographic; suitable to keep raw emails out of CI artifacts\n(SARIF, code-scanning uploads) but not as a security primitive:\na known list of org emails can be brute-forced into a rainbow table.\nUse in regulated environments where even local-parts are sensitive.",
889
+ "type": "string",
890
+ "const": "anonymized"
891
+ },
892
+ {
893
+ "description": "Legacy spelling for [`EmailMode::Anonymized`].",
889
894
  "type": "string",
890
895
  "const": "hash"
891
896
  }
@@ -386,7 +386,6 @@ module.exports = {
386
386
  verifyDigestAt,
387
387
  verifyInstalled,
388
388
  _verifyWithKey,
389
- fetchReleaseDigest,
390
389
  normalizeDigest,
391
390
  readEmbeddedDigest,
392
391
  sha256Hex,
@@ -342,7 +342,7 @@ Angular templates contribute synthetic `<template>` complexity findings whenever
342
342
  | `--since` | string | `6m` | Git history window for hotspot analysis. Accepts durations (`6m`, `90d`, `1y`, `2w`) or ISO dates (`2025-06-01`). |
343
343
  | `--min-commits` | number | `3` | Minimum number of commits for a file to be included in hotspot ranking. |
344
344
  | `--ownership` | bool | `false` | Attach ownership signals to hotspot entries: bus factor (Avelino truck factor), contributor count, top contributor with stale-days, recent contributors (top-3), `suggested_reviewers`, declared CODEOWNERS owner, ownership drift, unowned-hotspot detection. Human output gains a project-level summary line. JSON adds `low-bus-factor`, `unowned-hotspot`, `ownership-drift` action types. Test files get a `[test]` tag. Implies `--hotspots`. Requires git. |
345
- | `--ownership-emails` | `raw\|handle\|hash` | `handle` | Privacy mode for author emails. `handle` shows the local-part only (default, with GitHub noreply unwrap). `hash` emits stable `xxh3:` pseudonyms. `raw` shows full addresses. Use `hash` in regulated environments. Implies `--ownership`. Configure default via `health.ownership.emailMode`. |
345
+ | `--ownership-emails` | `raw\|handle\|anonymized\|hash` | `handle` | Privacy mode for author emails. `handle` shows the local-part only (default, with GitHub noreply unwrap and deterministic same-handle disambiguation). `anonymized` emits stable `xxh3:` pseudonyms; `hash` remains accepted as the legacy spelling. `raw` shows full addresses. Use `anonymized` in regulated environments. Implies `--ownership`. Configure default via `health.ownership.emailMode`. |
346
346
  | `--changed-since` | string | — | Only analyze files changed since a git ref |
347
347
  | `--workspace` | string | — | Scope to one or more workspaces. Comma-separated values, globs (`apps/*`, `@scope/*`), and `!`-prefixed negation (`!apps/legacy`) supported. Matched against package name AND workspace path relative to repo root. Vital signs, health score, hotspots, file scores, findings, and `summary.files_analyzed` are all recomputed against the scoped subset. |
348
348
  | `--group-by` | `owner\|directory\|package\|section` | — | Partition the report into per-group sections. JSON adds `grouped_by` plus a `groups` array; each group contains its own `vital_signs`, `health_score`, `findings`, `file_scores`, `hotspots`, `large_functions`, and `targets` recomputed against the group's files. The top-level metrics stay project-wide so consumers that ignore grouping still see the project headline. Human output adds a per-group score / files / hot / p90 summary block (sorted worst-first when `--score`). SARIF results carry `properties.group` and CodeClimate issues carry a top-level `group` field so GitHub Code Scanning / GitLab Code Quality can partition per team / package. Compact, markdown, and badge fall back to ungrouped output with a stderr note. |
@@ -423,7 +423,11 @@ export type ChurnTrend = ("accelerating" | "stable" | "cooling")
423
423
  /**
424
424
  * Format discriminator for [`ContributorEntry::identifier`].
425
425
  */
426
- export type ContributorIdentifierFormat = ("raw" | "handle" | "hash")
426
+ export type ContributorIdentifierFormat = ("raw" | "handle" | "anonymized" | "hash")
427
+ /**
428
+ * Machine-readable ownership state for a hotspot.
429
+ */
430
+ export type OwnershipState = ("active" | "unowned" | "declared_inactive" | "drifting")
427
431
  /**
428
432
  * Discriminant for [`HotspotAction::kind`].
429
433
  */
@@ -3497,6 +3501,7 @@ declared_owner?: (string | null)
3497
3501
  * CODEOWNERS file was discovered for the repository (cannot determine).
3498
3502
  */
3499
3503
  unowned?: (boolean | null)
3504
+ ownership_state: OwnershipState
3500
3505
  /**
3501
3506
  * True when ownership has drifted from the original author to a new
3502
3507
  * top contributor. Pairs with [`drift_reason`](Self::drift_reason).
@@ -3510,17 +3515,17 @@ drift_reason?: (string | null)
3510
3515
  }
3511
3516
  /**
3512
3517
  * Per-author contribution summary. The identifier is rendered per the
3513
- * configured ownership.emailMode (handle, hash, or raw); the format field
3514
- * discriminates the three so type-aware consumers can branch without
3518
+ * configured ownership.emailMode (handle, anonymized/hash, or raw); the format field
3519
+ * discriminates the modes so type-aware consumers can branch without
3515
3520
  * re-parsing.
3516
3521
  */
3517
3522
  export interface ContributorEntry {
3518
3523
  /**
3519
3524
  * Display string per the configured email mode: raw email
3520
- * (`alice@example.com`), local-part handle (`alice`), or stable hash
3525
+ * (`alice@example.com`), local-part handle (`alice`), or stable anonymized hash
3521
3526
  * pseudonym (`xxh3:<16hex>`). The format depends on `format`.
3522
3527
  *
3523
- * Renamed from `email` because in `handle` and `hash` modes the value
3528
+ * Renamed from `email` because in `handle` and `anonymized`/`hash` modes the value
3524
3529
  * is no longer an email address; consumers tempted to use it as one
3525
3530
  * (e.g. `mailto:`) would be wrong.
3526
3531
  */
@@ -4549,10 +4554,22 @@ resolution_comments_posted: number
4549
4554
  * Stale review threads actually resolved (zero on dry runs).
4550
4555
  */
4551
4556
  threads_resolved: number
4557
+ /**
4558
+ * Operator-facing retry hint when apply stopped early.
4559
+ */
4560
+ apply_hint?: (string | null)
4552
4561
  /**
4553
4562
  * Errors collected during apply, one entry per failure.
4554
4563
  */
4555
4564
  apply_errors: string[]
4565
+ /**
4566
+ * Stale fingerprints whose provider mutation failed.
4567
+ */
4568
+ failed_fingerprints?: string[]
4569
+ /**
4570
+ * Stale fingerprints not fully applied after the fail-fast stop.
4571
+ */
4572
+ unapplied_fingerprints?: string[]
4556
4573
  }
4557
4574
  /**
4558
4575
  * Envelope emitted by `fallow coverage setup --json`. Deterministic