forked from unom/punktfunk
The Skynet field log carried `plugin:steam sync (fs-change): reconciled 16 entries` 102 times in 27 minutes: Steam writes to its dirs the whole time a game runs, and every write re-walked the library. The 3 s `Stream.debounce` collapses a BURST, but a debounce extends on every event and so cannot bound the RATE under sustained churn. `SyncSettings.minInterval` (default `DEFAULT_FS_CHANGE_MIN_INTERVAL` = 30 s; `LibraryPluginDef.minInterval` to override) sits on top of the debounce: debounced events land in a sliding queue of one, and a drain loop syncs, then holds for the interval. Changes inside the hold coalesce into exactly one trailing sync, so nothing is lost and a launcher in a writing frenzy costs one re-walk per interval instead of one per quiet gap. Optional on `SyncSettings`, so plugins built against the older kit keep compiling. Test drives real `fs.watch` on a temp dir: 28 writes at 25 ms clear a 20 ms debounce every time and would be ~28 syncs; with a 400 ms interval they are three, at +32 / +433 / +835 ms. Not here: narrowing the Steam plugin's watch set (`steamapps/` + `libraryfolders.vdf`, not `userdata/`/`logs/`) lives in the steam plugin repo; and the host-side reconcile coalescing during a session is optional — the kit cap is the lever.