Skip to content

Use one membership and invalidation policy for scan, status, and watch #4592

Description

@Widthdom

Summary

Watch mode does not re-evaluate repository membership when ignore/configuration inputs change, and .cdidx is treated inconsistently by full scan/status versus watch.

v1.38.0 evidence / reproduction / control flow

IndexWatchRunner.cs:121-150,215-239 sends only the changed path to a partial update, so editing .gitignore or .cdidxignore neither removes newly ignored rows nor discovers newly unignored files. Lines 300-314 discard every event below .cdidx, including supported .cdidx/patterns/*.yaml and plugin inputs. Conversely, status --check reported audit notes below .cdidx as unindexed_workspace_files and stale while watch could never process them.

Impact

Sensitive/generated files can remain searchable after being ignored, newly included files can remain absent, and official extractor configuration can change without reindexing. Freshness signals can be impossible to satisfy under watch.

Suggested direction / acceptance criteria

  • Centralize membership classification for full scan, workspace check, and watch.
  • Treat ignore files and extractor inputs as invalidation events that trigger a debounced membership/configuration reconciliation.
  • Exclude only internal database/WAL/lock artifacts, or consistently exclude the whole .cdidx namespace.
  • Test ignore, unignore, pattern add/edit, and ordinary .cdidx sidecar behavior across all three paths.

Dogfooding candidate IDs: M043, M044, R021.
Observed with locally built cdidx v1.38.0 from origin/main on 2026-07-15.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions