# Implementation Decisions

- Added a `just test` recipe so unit tests can be run through the repository's
  required `just ...` command surface instead of invoking `cargo test`
  directly.
- Renamed the frontend success event to `game-install-finished`; the old
  unpack name no longer matched the transactional install/update lifecycle.
- Implemented watcher rescans by reusing the existing `.lanspread/library_index.json`
  cache and updating a single game entry in that index. This satisfies the
  per-ID optimized rescan requirement without adding a second cache format.
- Split full startup recovery from ordinary settled refreshes. Startup and real
  `SetGameDir` changes run recovery plus a scan; install/update/uninstall
  completion only rescans the affected game after operation tracking has been
  cleared.
- Rejected path-changing `SetGameDir` while operations are active. Same-path
  refreshes are allowed and deliberately skip full recovery so they cannot sweep
  download transients for in-flight work.
- Kept a separate `active_downloads` cancellation-token map next to the single
  `active_operations` table. The operation table is the authoritative state for
  gates; the token map is only cancellation plumbing for in-flight downloads.
- Treated a downloaded-but-not-installed game as immediately installable from
  Tauri by sending `PeerCommand::InstallGame` directly. A not-downloaded game
  still uses `GetGame`, and the peer auto-installs after the sentinel commit.
- Removed the dead internal `PeerCommand::UpdateGame` path. The UI update button
  now sends `FetchLatestFromPeers`, which skips local manifest serving and asks
  latest-version peers for fresh file metadata before the normal download and
  update transaction runs.
- Removed the unreachable `Availability::Downloading` protocol value. Active
  operations are reported separately, and local summaries emit only settled
  availability.
- Threaded availability through the UI-facing `Game` payload so `LocalOnly`
  rendering follows backend state instead of reverse-engineering it from
  `installed && !downloaded`.
- Removed Tauri's parallel whole-library filesystem scan. The UI database keeps
  bundled catalog metadata, while peer `LocalGamesUpdated` snapshots now own
  `downloaded`, `installed`, `local_version`, and `availability`.
