* fix(skills): eliminate Skills Settings UI lag from watcher-driven refreshes
Replaces the time-based watcher suppression with path-scoped expectations:
each SkillManager FS write registers predicates (exists/missing/modified/
subtree-*) and the matching vault events are dropped without triggering a
debounced reconcile. A 10s safety timer backstops never-arriving events.
Toggle/delete/rename/saveProperties now publish incremental in-memory updates
instead of re-running full discovery, so the Properties modal save returns
synchronously and the grid reflects the change on the next render.
* fix(skills): heal drift when expectations expire; preserve external reconciles
Two fixes for the watcher-suppression machinery on PR #2508:
- `armSafetyTimer`: when the 10s backstop fires with expectations still
pending, schedule a debounced reconcile before clearing. Catches the case
where an external process undid our change (e.g. deleted a link we expected
to exist) — the matching event was suppressed, predicate never satisfied,
and previously the state drifted silently until an unrelated watched event
fired.
- `runInternalMutation`: stop cancelling pre-existing reconcile timers in
the finally block. Events fired during the mutation are dropped by the
depth gate, so any debounce timer left armed was scheduled by an external
event before the mutation started and still needs servicing.
Adds two regression tests and updates the pre-existing "safety timer clears
stale expectations" test which is superseded by the new healing behavior.