A retag named the one file it rewrote and the store threw the whole
list away anyway: 20.5 MB across the IPC at 26 138 tracks to pick up one
new title. A soft rescan of an unchanged library did the same, though
its metrics say zero added, zero updated and zero removed.
- `TrackMetadataChanged` with a `filePath` re-reads that one row
through `trackCache` and splices it in, replacing the array so the
memoized filter and sort caches notice. The summaries are still
refetched: a retag can move a track between albums. A failed patch
falls back to the full reload, because the answer that cannot be
wrong is the one to keep.
- A batch write names no paths (it can be thousands) and still reloads.
- `LibraryScanComplete` reads its own metrics and reloads only when the
scan changed something; a payload of an unknown shape is treated as a
change, so nothing can leave a stale list on screen.
Closes#282