Watcher coverage decays over a working day: watches only ever shrink, a directory rename is untested, and index_coverage tells you to retry in a second #145
Labels
No labels
code-review
correctness
dos
performance
security
severity/high
severity/low
severity/medium
tech-debt
Kind/Breaking
Kind/Bug
Kind/Documentation
Kind/Enhancement
Kind/Feature
Kind/Security
Kind/Testing
Priority
Critical
Priority
High
Priority
Low
Priority
Medium
Reviewed
Confirmed
Reviewed
Duplicate
Reviewed
Invalid
Reviewed
Won't Fix
Status
Abandoned
Status
Blocked
Status
Need More Info
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
h-dv/code-index#145
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Found by a production-readiness review. This is #82's shape, in the tool an agent calls specifically to diagnose a missing file.
The decay
Watches are non-recursive and only ever shrink.
mv src/foo src/barleaves orphan rows at the old path and nothing at the new — for up to 30 minutes (the reconcile interval), with no disclosure, or forever withreconcile_interval_min = 0.There is no directory-rename test in the tree. All three
fs::renamewatcher tests rename files. The failure mode with the widest blast radius is the one shape not covered.The disclosure is actively wrong for this population
index_coveragereturnspendingwith the guidance that the watcher picks new files up in about a second — retry. For a file that arrived via a directory rename, the true answer is 30 minutes, or never. The tool an operator calls to diagnose a missing file gives them the one answer that guarantees they stop looking.Per this project's own doctrine,
pendingis a promise. Apendingwhose real horizon is a reconcile interval is a different state from apendingwhose horizon is a debounce, and they must not render identically.Ask
index_coverage'spendingmust distinguish "the watcher will get this in ~1 s" from "this is only reachable by the next reconcile, at " from "reconcile is disabled, this will never arrive".Related
🤖 Generated with Claude Code
https://claude.ai/code/session_01K1zj5VcFJvJt3pQxe9259K
code-index doctoris blind to staleness, watcher health and resolve state, and check_disk_free only fires at literally zero bytes #150