Files
vibe-kanban/crates/services/src
ukwksk 85f6ee5237 fix: use gitignore-aware selective watching to reduce memory usage (#1399)
* fix: skip watching heavy directories to avoid memory leak

* fix: reduce memory usage in filesystem watcher for pnpm projects

Use gitignore-aware directory collection to prevent OS-level watchers
from being set up on heavy directories like node_modules.

Changes:
- Use WalkBuilder's git_ignore(true) to respect .gitignore when collecting watch directories
- Use NonRecursive watch mode for each directory instead of single Recursive watch
- Simplify ALWAYS_SKIP_DIRS to only contain .git (not in .gitignore but should be skipped)

This fixes high memory usage when running vibe-kanban on pnpm-managed
repositories, which contain many symlinks in node_modules.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: simplify filesystem watcher error handling and fix clippy warnings

- Remove debug logs that were added during development
- Fail fast on watch errors instead of continuing in a partially broken state
- Collapse nested if statements to satisfy clippy::collapsible_if

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: check only parent directories in path_allowed

Only check parent directory names against ALWAYS_SKIP_DIRS since
should_skip_dir is meant for directories, not file names.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>

* fix: add watch directories changes

* Stop leaking filesystem watcher

Use weak references so the background thread exits once the diff stream releases the debouncer.

* Memoize ignored-descendant scan

Cache per-directory results so collecting watch targets stays linear.

* Improve watcher gitignore classification

Use real metadata when available, fall back to the old heuristic only when the file is already gone, and document the limitation.

* Handle directory renames in watcher

* Deduplicate watch directories more efficiently

Sort once and do a single sweep instead of quadratic filtering.

* Document gitignore watcher limitation

* Cascade watcher removal on directory delete

Drop all descendant watchers when a parent directory disappears so stale handles don’t linger.

* Watch subdirectories when new directories are added

Track recursive parent watchers so we skip redundant child watches and prune them when a parent becomes recursive.

* Always ignore node_modules

* Use a high-performance line count diff implementation

The `similar` diff stat implementation was causing cpu spikes of up to 600% over 10 seconds.

* exclude node_modules from git diff commands

---------

Co-authored-by: Claude <noreply@anthropic.com>
Co-authored-by: Solomon <abcpro11051@disroot.org>
2025-12-10 18:08:42 +00:00
..
2025-11-14 15:37:56 +00:00