Repository navigation
v2.59.0 — dupes default ignores + token cache
·
4085 commits
to main
since this release
Highlights
fallow dupesnow ignores generated framework output by default.**/.next/**,**/.nuxt/**,**/.svelte-kit/**,**/.turbo/**,**/.parcel-cache/**,**/.vite/**,**/.cache/**,**/out/**, and**/storybook-static/**are dropped before tokenization. Authored-lookinglib/,legacy/, and nestedbuild/directories stay in scope. Setduplicates.ignoreDefaults: falseto opt out.- Persistent token cache for duplication on large monorepos. Projects above
duplicates.minCorpusSizeForTokenCache(default 5000 source files) reuse tokenized output across runs in.fallow/cache/dupes-tokens-vN/. - Shingle prefilter for focused-mode duplication. When
--changed-sinceruns against a project at or aboveduplicates.minCorpusSizeForShingleFilter(default 1024 files), unchanged files whose shingles do not overlap a changed file are dropped before suffix-array construction. - Stack overflow on
microsoft/TypeScript-scale projects fixed. Rayon worker stack is now pinned to 16 MiB across CLI and NAPI, sodead-codeandhealthno longer abort withfatal runtime error: stack overflowon very deep trees.
Thanks @OmerGronich for the deep profiling on MUI (#243) and the stack-overflow report on microsoft/TypeScript (#247).
Added
duplicates.ignoreDefaultsconfig. Boolean (defaulttrue) controlling whether the new built-in framework-output ignores merge withduplicates.ignore.--explain-skippedglobal flag. Expands the human/markdown skipped-default-ignores note into per-pattern counts. Machine formats (JSON, SARIF, CodeClimate, compact) suppress the note.fallow initscaffolds a commented-out[duplicates]block. The generated.fallowrc.jsonis now valid JSONC end-to-end; both the JSON and TOML variants ship with exampleignoreadditions forlib/,legacy/,__generated__/, andgenerated/.
Changed
fallow dupesskipped-file note. Human and markdown output show a one-line summary of files skipped by the default ignores; pass--explain-skippedfor per-pattern counts.--changed-sincewires straight into the focused fast path. Resolving the changed-file set up front lets the engine engage the shingle prefilter and extraction-time interval pruning instead of running a full-corpus scan followed by a redundant post-filter. Also fixes a latentIntervalIndexcoalescing bug in post-LCP filtering that was fragmenting intervals and keeping more groups than necessary.fallow audit --gate allskips the base-snapshot pass. Attribution is irrelevant to the verdict in--gate allmode, so the second analysis pass is dropped.- Shared rayon global pool config across CLI and NAPI entry points. Both bindings now agree on stack-size and thread-count defaults so embedders see consistent parallel behaviour.
Fixed
- Rayon worker stack pinned to 16 MiB. Deep AST visitor and graph traversals could overflow Rust's default 8 MiB worker stack on very large real-world projects (e.g.
microsoft/TypeScript), abortingdead-codeandhealthanalysis withfatal runtime error: stack overflow. The previousRUST_MIN_STACK=16777216workaround is no longer needed. (Closes #247)
Upgrade notes
If your duplication percentage drops on upgrade, it is because fallow dupes now excludes generated framework output (the patterns above) by default. To restore the previous behaviour, add this to your config:
Or merge specific framework directories back in via duplicates.ignore.
Full Changelog: v2.58.0...v2.59.0
{ "duplicates": { "ignoreDefaults": false } }