Repository navigation
v2.74.0: boundary autoDiscover, ignoreExports auto-fix, empty pnpm catalog groups
Highlights
Architecture boundaries now auto-discover per-feature zones. A single { "name": "features", "autoDiscover": ["src/features"] } declaration replaces the per-feature zone + rule pairs that Bulletproof React projects used to write by hand, and the Bulletproof preset uses it by default so sibling-feature isolation now works out of the box. fallow fix also gained an ignoreExports writer so suppressions land directly in your .fallowrc.json / fallow.toml (with comment + CRLF preservation, symlink-safe), and we detect + auto-fix empty named pnpm catalog groups left behind by previous fixer runs.
Added
-
Architecture boundary auto-discovery (
autoDiscoveronBoundaryZone). Declares one logical zone, expands into one zone per immediate child directory:If
src/features/auth/andsrc/features/billing/exist, fallow createsfeatures/authandfeatures/billingzones and expands rules referencingfeaturesto both. Explicit child rules ({ "from": "features/auth", "allow": [...] }) override generated parent rules regardless of declaration order. The Bulletproof preset uses this for thefeatureszone by default; top-levelsrc/features/index.tsbarrels stay unrestricted by design so they can re-export children without false positives.Two follow-up issues are open: #372 for differentiated parent-vs-child rule expansion (strict mode on non-barrel top-level files), and #373 for surfacing the logical-group name in
list --boundariesJSON. (Closes #368. Thanks @DrJonki for the report.) -
fallow fixauto-appliesignoreExportsrules to the active fallow config. Previously the only way to silence a stubborn unused-export finding was a per-file// fallow-ignore-next-linecomment or hand-editingignoreExports. The fixer now writes the suppression into the active config file, preserving JSONC comments and CRLF line endings, following--config <path>overrides, and deduplicating absolute-path entries against existing relative ones. (Closes #366.) -
Empty named pnpm catalog group detection + auto-fix. Named
catalogs.<name>:groups inpnpm-workspace.yamlwith no entries now flag asempty-catalog-group(defaultwarn);fallow fixdeletes the header, the LSP offers a quick-fix code action with an anchored key-prefix guard so sibling groups with shared prefixes (react17vsreact18) cannot be deleted by mistake. The top-levelcatalog:map is never flagged. (Closes #359.)
Fixed
-
unused-dependency-overridesfalse positives on transitive-only overrides. CVE-fix overrides that pin a purely transitive dependency (no direct dep in any workspacepackage.json) are no longer flagged as unused whenpnpm-lock.yamlresolves them. (Closes #371. Thanks @cloud-walker for the report.) -
add-to-configaction metadata now respects explicit--config <path>. Tools that gate auto-fix on theauto_fixablebool will no longer skip a fix that is actually applicable to the explicitly-named config. (Closes #367.) -
fallow audit --gate new-onlynow attributesunused-catalog-entriesandempty-catalog-groupsas introduced vs inherited so changed-file gates fire correctly when a fresh catalog entry lands.
Install
npm install --save-dev fallow # or pnpm/yarn/bun
cargo install fallow-cli # build from sourceSchema / API additions
BoundaryZone.autoDiscover: string[](new, optional)BoundaryZone.patternsis now optional in.fallowrc.jsonrules.empty-catalog-groups(defaultwarn)IssueKind::EmptyCatalogGroup(discriminant 25)EmptyCatalogGroupfinding struct onAnalysisResults
Full Changelog: v2.73.0...v2.74.0
{ "boundaries": { "zones": [ { "name": "app", "patterns": ["src/app/**"] }, { "name": "features", "autoDiscover": ["src/features"] }, { "name": "shared", "patterns": ["src/shared/**"] } ], "rules": [ { "from": "app", "allow": ["features", "shared"] }, { "from": "features", "allow": ["shared"] } ] } }