# Make Remove refuse anything it can't prove is the replay the user chose · dara/icarus

[View on GitCafe](https://git.cafe/dara/icarus/commit/c87b6961e15fa4723b4469e3984c7a0f2520d1a9)

Repository: [dara/icarus](https://git.cafe/dara/icarus)

Visibility: public

Requested revision: c87b6961e15fa4723b4469e3984c7a0f2520d1a9

Requested commit: c87b6961e15fa4723b4469e3984c7a0f2520d1a9

Commit: c87b6961e15fa4723b4469e3984c7a0f2520d1a9

Tree: b7bf5325504cce232dcde430833c5ea4348a6d85

Author: Dara Adedeji

Committer: Dara Adedeji

## Message

```
Make Remove refuse anything it can't prove is the replay the user chose

Review found four ways Remove could delete the wrong thing:
- A replays or cache folder that is a link or junction into Valorant's
  folder passed the lexical check. Folders are now resolved before the
  check, and Remove refuses when they overlap each other or Valorant's.
- The dialog promised Valorant still had a copy from the last listing.
  Remove now rechecks right before deleting; if that changed, it deletes
  nothing and the tile asks again with the right text.
- Keep and Remove ran beside adds. All three now run one at a time, and
  Remove refuses a file whose size or time changed since the dialog.
- Cache deletion matched by prefix. It now parses the cache name and
  matches the whole key.

Also waits for the first listing's slow read before adding in the
listing-race test; it could deadlock when the add's read came first.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

```

## Parents

- [bbbd5ed86bb8b5d1ae00b21abad6a8a0583b2361](https://git.cafe/dara/icarus/commit/bbbd5ed86bb8b5d1ae00b21abad6a8a0583b2361?format=markdown)

[Source at this commit](https://git.cafe/dara/icarus/tree/c87b6961e15fa4723b4469e3984c7a0f2520d1a9?format=markdown)
