- SyncDeps.listNotes now returns paths only; new readNote(path) reads
content immediately before parse/diff/write per note, closing the
window where an edit made between the initial scan and a later write
got silently overwritten. resolveMissingIds updated to match.
- WatchlistController gains a syncing flag shared by syncNow and
resolveMissingIds so overlapping invocations short-circuit instead
of racing on the same vault notes.
- main.ts registers cleanup for the 30s startup catch-up setTimeout so
it doesn't fire after unload.
- syncNow takes a quiet flag (used by the scheduled catch-up path) so
zero-change scheduled syncs don't spam a Notice; manual commands are
unaffected.