v2.81.0: OpenCode, RedwoodSDK, Wuchale, and Lexical plugins plus reliability hardening
Framework support
- OpenCode:
.opencode/plugins/*modules,@opencode-ai/plugin, and npm plugins declared inopencode.jsonare recognized as loaded, so they no longer report as unused files or dependencies. (Closes #629) - RedwoodSDK:
src/worker.{ts,tsx,js,jsx,mts,mjs}and files reached through therwsdk/viteworker stay reachable without broad dynamic-load suppressions. (Closes #632) - Wuchale:
wuchale.config.js, adapter packages imported only from that config, and static ViteconfigFilereferences are kept reachable in active Wuchale projects. (Closes #631) - Lexical: classes extending
DecoratorNode,ElementNode, orTextNodeno longer report their framework-invoked lifecycle methods (getType,clone,createDOM,updateDOM,decorate, and the serialization/DOM set) as unused class members. (Closes #628)
Detection fixes
node:sqliteand other mandatory-node:-prefix builtins (node:sea,node:test,node:test/reporters) are recognized as platform builtins when written with thenode:prefix, so they no longer surface as unlisted dependencies or unresolved imports. Bare forms remain ordinary npm packages. (Closes #627)- Scaffold template package assets such as
template-*,templates/**, andscaffolds/*published throughpackage.json#filesare treated as support entry points, including in monorepo workspaces. (Closes #635) - Oxlint
jsPluginspackages loaded only throughjsPlugins(for exampleeslint-plugin-testing-library,eslint-plugin-playwright) are credited as referenced dependencies instead of reporting as unused. Thanks @pasTa4667 for the patch. (Closes #607) - Re-export source edges now participate in resolver diagnostics: missing
export { x } from "./missing"sources report as unresolved imports, and package re-exports report their actual source line. Thanks @M-Hassan-Raza for the patch. (PR #666)
Reliability and integrations
fallow ci reconcile-reviewapplies stale review cleanup fail-fast through a typed plan, preflights provider targets before mutation, and reportsapply_hint,failed_fingerprints, andunapplied_fingerprints. (Closes #459)fallow watchdebounces directly and recovers when the watched root is moved, deleted, or recreated, applying the same source/config/ignore filters as discovery. (Closes #456)fallow coverage setupresumes safely after interruption, persisting step progress in.fallow/setup.json, guarding concurrent runs with.fallow/setup.lock, and writing state atomically. JSON planning mode stays read-only. (Closes #460)- Ownership-aware health hotspots emit a required
ownership_statediscriminator (active,unowned,declared_inactive,drifting), suppress vague drift only for matched active owners, and add collision-safe author handles. The new--ownership-emails anonymizedspelling is accepted alongsidehash. (Closes #478) - Programmatic and Node analyses keep per-call thread and diff scope:
diff_file(Rust) /diffFile(N-API) per call, each building its own Rayon pool. (Closes #469) - Fallow cloud API calls honor
Retry-Afterbackoff (capped at 60s), parse error envelopes consistently, accept a custom trust bundle viaFALLOW_CA_BUNDLE, and exit 7 when setup or transport failures prevent every upload. (Closes #464)
Install
npm install -D fallow@2.81.0
# or
cargo install fallow-cli@2.81.0Full Changelog: v2.80.0...v2.81.0