Skip to content

v2.81.0: OpenCode, RedwoodSDK, Wuchale, and Lexical plugins plus reliability hardening

Choose a tag to compare

@BartWaardenburg BartWaardenburg released this 26 May 04:49
· 465 commits to main since this release
v2.81.0
9de44d7

Framework support

  • OpenCode: .opencode/plugins/* modules, @opencode-ai/plugin, and npm plugins declared in opencode.json are 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 the rwsdk/vite worker stay reachable without broad dynamic-load suppressions. (Closes #632)
  • Wuchale: wuchale.config.js, adapter packages imported only from that config, and static Vite configFile references are kept reachable in active Wuchale projects. (Closes #631)
  • Lexical: classes extending DecoratorNode, ElementNode, or TextNode no 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:sqlite and other mandatory-node:-prefix builtins (node:sea, node:test, node:test/reporters) are recognized as platform builtins when written with the node: 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/**, and scaffolds/* published through package.json#files are treated as support entry points, including in monorepo workspaces. (Closes #635)
  • Oxlint jsPlugins packages loaded only through jsPlugins (for example eslint-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-review applies stale review cleanup fail-fast through a typed plan, preflights provider targets before mutation, and reports apply_hint, failed_fingerprints, and unapplied_fingerprints. (Closes #459)
  • fallow watch debounces 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 setup resumes 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_state discriminator (active, unowned, declared_inactive, drifting), suppress vague drift only for matched active owners, and add collision-safe author handles. The new --ownership-emails anonymized spelling is accepted alongside hash. (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-After backoff (capped at 60s), parse error envelopes consistently, accept a custom trust bundle via FALLOW_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.0

Full Changelog: v2.80.0...v2.81.0