v2.80.0: optional review guidance, summary scope, Fumadocs plugin
Highlights
This release adds optional inline review guidance and a diff-scoped sticky summary mode for CI integrations, ships a built-in Fumadocs plugin, and lands a batch of false-positive fixes for Wrangler precedence, TanStack Start virtual modules, MDX code fences, Node script runners, Bun's bare runtime module, prebuild package maps, and React Router type imports.
Added
-
Inline review comments can include optional rule guidance. Set
FALLOW_REVIEW_GUIDANCE=true(or GitHub Actionreview-guidance: true) to append collapsed "What to do" blocks toreview-githubandreview-gitlabcomments using the existing rule guides fromfallow explain. Default stays off.fallow/unused-typereview comments also pick up the same one-line export-stripping suggestions asunused-export. Thanks @OmerGronich for the request. (Closes #659) -
Sticky PR/MR summary comments can scope project-level findings to the diff. Set
FALLOW_SUMMARY_SCOPE=diff(or GitHub Actionsummary-scope: diff) to apply the diff filter to dependency, catalog, and override findings inpr-comment-githubandpr-comment-gitlab. The defaultallpreserves the existing behavior where sticky summaries include those findings even when their fixedpackage.jsonor workspace-manifest anchor line is outside the diff. Inline review comments are unaffected. Thanks @OmerGronich for the request. (Closes #661)
Fixed
-
Fumadocs MDX projects no longer report configured docs content as unused. A built-in Fumadocs plugin activates from
fumadocs-mdx,fumadocs-core,fumadocs-ui, orsource.config.*, keepssource.config.*and.source/**/*.{ts,tsx,js,jsx,...}reachable, suppressesfumadocs-mdx:*virtual imports, credits packages imported by the source config, and extracts literaldirvalues fromdefineCollections,defineDocs, and directdefineConfig({ collections })entries as MDX content roots. (Closes #633) -
Wrangler config precedence now matches Wrangler's selected config file. Projects with multiple sibling
wrangler.*config files previously credited everymainvalue as an entry, so stale migration leftovers (e.g.wrangler.toml) could keep dead worker files alive. Fallow now only readsmainfrom the highest-precedence sibling:wrangler.json, thenwrangler.jsonc, thenwrangler.toml. All sibling configs themselves remain credited as used. (Closes #630) -
TanStack Start
:vvirtual modules no longer surface as unlisted dependencies. Imports such astanstack-start-manifest:vandtanstack-start-injected-head-scripts:vare now recognized as plugin-registered framework virtual modules, and skipped from unlisted-dependency and unresolved-import reporting when the TanStack plugin is active. (Closes #636) -
Node package-script and forked runner entrypoints no longer report as unused. Package scripts such as
node scripts/process-messagesresolve extensionless directory paths to theirindex.*files, and statically resolvable localchild_process.fork()targets from provennode:child_processimports are credited as dynamic entrypoints, including thefork(path.resolve(fileURLToPath(import.meta.url), '../runner.js'))shape. (Closes #638) -
MDX documentation code fences no longer create unresolved imports. Fenced TypeScript examples in
.mdxfiles were previously extracted like executable top-level statements, so docs snippets with virtual// file:boundaries reported falseunresolved-importfindings. Fenced code blocks are now skipped during MDX import/export extraction, while real top-level imports continue through the parser path. (Closes #639) -
Workspace and self package imports that point at missing prebuild output now resolve back to source. Packages such as Nitro and Redux Toolkit could previously report false
unresolved-imports,unlisted-dependencies,unused-dependencies, andunused-fileswhenpackage.jsonimportsorexportsselecteddisttargets before a build had run. Fallow now uses the nearest package manifest for#...imports and known root/workspace package manifests for self or workspace specifiers, maps project-relative output targets back to trackedsrccandidates, and preserves dependency usage metadata when those imports resolve to internal source files. (Closes #641) -
Bun's bare
bunruntime module is no longer reported as an unlisted dependency.import { SQL } from "bun"and type-only imports from"bun"are recognized as a Bun runtime builtin, alongside the existingbun:*builtin recognition. Real packages such asbun-types,@types/bun,bunyan, andbun/*subpaths remain normal dependencies. (Closes #642) -
React Router v7 and Remix generated
./+types/*route modules no longer surface as unresolved imports. Route modules usingimport type { Route } from "./+types/root"previously reported false-positive findings because those files are generated by the framework's typegen step and are often gitignored. The React Router and Remix plugins now declare./+types/as a generated type-import prefix; the suppression is plugin-gated and type-only, so runtime imports under the same prefix still report. (Closes #645) -
Windows CI is green again. The Fumadocs integration test now normalizes path separators before asserting on
unused_files, restoring the Windows leg ofci.yml. No user-visible behavior change.
Full Changelog: v2.79.0...v2.80.0