Repository navigation
v2.70.0: hot-path-touched, pnpm catalog detection, faster discovery
Highlights
-
Reviewers see immediately when a PR touches production-hot code. Pass a unified diff (
fallow audit --diff-file <unified.diff>, or the newdiff-fileinput on the GitHub Action / GitLab CI template) and fallow intersects the changed line ranges against production-hot paths captured by the coverage sidecar, firing a dedicatedhot-path-touchedverdict and rendering a "hot path touched" framing in PR / MR comments. Built onfallow-cov-protocol 0.5(per-hot-path line spans, structured multi-signal verdict array). Paid, runtime-backed. -
Unused pnpm catalog entries are now detected. A new
unused-catalog-entriesrule (defaultwarn) readspnpm-workspace.yaml, walks the defaultcatalog:map plus every named catalog undercatalogs:, and reports entries no workspacepackage.jsonreferences via thecatalog:protocol. Findings include ahardcoded_consumerslist pointing at workspace packages that still declare the dependency with a pinned version, so the choice between "switch consumers tocatalog:" and "delete the entry" stays explicit. Surfaced across all output formats, CI annotations, LSP diagnostics, MCP, and the VS Code "Unused Code" tree. Thanks @Luzefiru. (Closes #329)
Notable fixes
- Node / Bun / Cloudflare builtin imports (
node:url,bun:sqlite, etc.) are no longer flagged asunresolved-importwhentsconfig.jsondeclares a catch-all"*": ["./src/*"]path mapping. Thanks @FunctionDJ. (Closes #327) - Multi-hop
export * as N from './source'chains across workspace packages no longer produce falseunused-exportfindings on shadcn-style and namespace-barrel layouts. Thanks @filipw01. (Closes #328) - Namespace re-export members are now credited through the named-import form, so
export * as Foo from './bar'; import { Foo } from './barrel'; Foo.X(...)no longer flagsXas unused. Real-world delta on a large Astro-style project: 103 false positives gone. Thanks @ivayloc. (Closes #324) - VS Code: "Unused Code" tree renders unlisted-dependency rows correctly and no longer crashes when one is present. Plus tree categories for namespace-barrel duplicate exports, circular dependencies, boundary violations, and unused-catalog-entries. Thanks @FunctionDJ. (Closes #323)
ignoreExportsgatesduplicate-exportsin shadcn / Radix-style component-library layouts, with a JSONadd-to-configaction emitted in the primary slot so the non-destructive path is the default for AI agents. The--format humanrendering now surfaces a namespace-barrel orientation hint when the findings look like shadcn / bits-ui. Thanks @Vantrongs. (Closes #317, refs #322)- Duplicate-clone detector filters out bare function-call shapes (
someFn(\n arg1,\n arg2,\n)and similar): there is nothing to extract from a single call, so the findings were noise. Thanks @danielo515. (Refs discussion #320) // fallow-ignore-next-lineaccepts stacked single-kind comments, matching the comma-list form that has always worked. (Closes #318)- Singular rule keys in
.fallowrcwork as aliases for every plural rule."boundary-violation": "warn"is no longer silently ignored.
Other improvements
- Faster discovery on monorepos. Workspace package walking and per-project plugin extraction now distribute over rayon, dead-code analysis early-skips modules with no exports and lazy-builds detector matcher lists, and duplicate-clone detection memoises per-file suppression metadata so long files with overlapping clone groups stop re-scanning. No JSON, CLI, or cache-format change.
add-to-configactions in JSON output carry an optionalvalue_schemaJSON Pointer URL so AI agents can validate writes before applying them. The URL points at the schema fragment describing the action'svalueshape. (Closes #331)overrides.rules.{duplicate-exports,circular-dependency}warnings dedupe per-process in workspace mode (no more 200 identical warn lines on a 200-package monorepo).
Security
- Replaced the unmaintained
serde_yml 0.0.12(RUSTSEC-2025-0068, unsound segfault) withserde_yaml_ng 0.10in the pnpm catalog parser. API-compatible swap; samepnpm-workspace.yamlshapes parsed.
Full Changelog: v2.69.0...v2.70.0