Skip to content

Update fallow-rs/fallow action to v3.16.0 - #643

Merged
github-actions[bot] merged 1 commit into
masterfrom
renovate/github-actions
Aug 14, 2026
Merged

Update fallow-rs/fallow action to v3.16.0#643
github-actions[bot] merged 1 commit into
masterfrom
renovate/github-actions

Conversation

@renovate

@renovate renovate Bot commented Aug 14, 2026

Copy link
Copy Markdown
Contributor

This PR contains the following updates:

Package Type Update Change
fallow-rs/fallow action minor v3.15.0v3.16.0

Release Notes

fallow-rs/fallow (fallow-rs/fallow)

v3.16.0: : honest template scoring, prunable audit cache, visible demotion

Compare Source

Health scoring gets more honest and more configurable in this release: template-family units drop the CRAP dimension they could never earn coverage for, Svelte {#snippet} blocks are scored as their own units, and thresholdOverrides finally reach file scores and refactoring targets. The audit cache becomes observable and prunable, new-only duplication demotion is no longer invisible, and a batch of correctness fixes lands across the type-aware sidecar, manual-mock detection, and the resolver.

Features
  • fallow audit-cache prune: the audit cache garbage collector now explains what it does, and a new audit-cache prune subcommand removes stale entries on demand. --dry-run previews the policy without touching disk, --max-age-days overrides the age ceiling (flag, then FALLOW_AUDIT_CACHE_MAX_AGE_DAYS, then audit.cacheMaxAgeDays, then the 30-day default), and the JSON maintenance envelope reports per-entry dispositions with reclaimed_bytes counting only bytes actually removed from disk. Legacy git registrations that are only deregistered report under deregistered and are never counted as reclaimed. RUST_LOG=fallow=debug surfaces per-entry GC decisions during normal audit runs. (#​2221)
  • Observable duplication demotion: when --gate new-only demotes an introduced clone group to inherited, the decision is now visible. Demoted entries carry demotion_reason (currently no-added-lines), audit-family JSON always includes attribution.duplication_demoted, and --explain prints the demotion decision with the diff source it used. (#​2220)
  • Svelte {#snippet} blocks are their own complexity units: top-level snippets score as <snippet:NAME> units with nesting rebased to zero, so extracting markup into a snippet moves the score. Snippet units are exact-match keys for health.thresholdOverrides[].functions. (#​2227)
  • Broader declarative plugin manifests: typed manifest field paths with bounded [*] object-array traversal and exact exists predicates, strict JSON rules that reject JSONC input, and deterministic plugin-check limit diagnostics. Thanks @​M-Hassan-Raza. (#​2165)
Health scoring changes
  • Template-family units no longer participate in the CRAP dimension: a template carries no direct test coverage, so <template> and <snippet:NAME> findings gate on the cyclomatic and cognitive dimensions only and never report crap, coverage_pct, or coverage_tier. A maxCrap override scoped to a template unit reports a matched row explaining the entry can be removed. (#​2235)
  • thresholdOverrides and maxCrap reach file scores and refactoring targets: file scoring and the add_test_coverage target rule now compare CRAP against the effective per-function ceiling instead of a fixed 30. Rows whose breaches were let through by configuration carry crap_exempted and crap_effective_threshold. (#​2228)
Bug fixes
  • Windows: --gate new-only no longer fails on pre-existing findings: the base-snapshot focus set is built from git rev-parse --show-toplevel, whose spelling can differ from the canonicalized project root (8.3 path components, drive-letter case), so no path mapped into the base worktree and the base dead-code results were filtered away entirely. Every inherited finding then looked introduced and failed the gate. Path matching now compares simplified and canonicalized forms, and a base run whose focus set cannot be expressed leaves its results unfiltered.
  • jest/vitest __mocks__ parity: vitest root-level __mocks__ manual mocks for node modules are no longer reported as unused files, and literal X/__mocks__ imports and the /__mocks__ virtual package suffix now follow each framework's actual semantics. (#​2225, #​2226)
  • Type-aware sidecar and root typescript stay in lockstep: the root lockfile pins the same typescript the sidecar needs, and a new preflight exits with a message naming the resolved version, its path, and the install command when the resolvable install is missing or too old, instead of a bare module-resolution error. (#​2236)
  • No wasted sidecar work when private-type-leaks is off: the type-aware layer only requests the api-surface capability when the check is active, pinned by an end-to-end config test in both directions. (#​2218, #​2219)
  • MCP audit tool description matches the payload: the description now documents the nested complexity block that audit JSON actually carries. (#​2217)
  • Effective barrel exports resolve through one binding model: explicit-over-star precedence, ambiguous star origins vs convergent diamonds, separate type and value namespaces, and canonical binding identity now hold through usage propagation, public exports, duplicate analysis, trace provenance, caches, and the type-aware sidecar. Thanks @​M-Hassan-Raza. (#​2210)
  • Package tooling stays out of production reachability: build and tooling scripts no longer make devDependencies look like production dependencies. Thanks @​Jerc92. (#​2211)
  • Partial GitLab review posts now warn: inline-review jobs surface a warning when posting only partially succeeds instead of reporting clean success. Thanks @​Jerc92. (#​2209)
  • Scoped-package manual mocks: factory-less jest.mock/vi.mock of a scoped package no longer fabricates an unused-file candidate. (#​2213)
Performance

A broad sweep across extraction, engine, and core: direct CSS color parsing (with recovery semantics, non-RGB color recovery, and !important ordering preserved), reused CSS class inventories, lazy styling-token candidates, cached built-in and default-entry plugin matchers, a lazy plugin matcher cache, cached production exclude globsets, compacted source discovery globs, skipped side-effect export indexes and irrelevant package scans, and single-pass Markdown escaping.

Full Changelog: fallow-rs/fallow@v3.15.0...v3.16.0


Configuration

📅 Schedule: (UTC)

  • Branch creation
    • At any time (no schedule defined)
  • Automerge
    • At any time (no schedule defined)

🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.

Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.

🔕 Ignore: Close this PR and you won't be reminded about this update again.


  • If you want to rebase/retry this PR, check this box

This PR was generated by Mend Renovate. View the repository job log.

@renovate renovate Bot added the dependencies Upgrade or downgrade of project dependencies. label Aug 14, 2026
@github-actions
github-actions Bot enabled auto-merge (squash) August 14, 2026 00:03
@github-actions
github-actions Bot merged commit 1a824d7 into master Aug 14, 2026
12 checks passed
@github-actions
github-actions Bot deleted the renovate/github-actions branch August 14, 2026 00:03
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Upgrade or downgrade of project dependencies.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

0 participants