flowchart LR
H[cache hit] --> S{files on disk match the record?}
S -->|yes| D[done: no copy, no write]
S -->|no| C[copy the cached files]
vx wipes outputs before a task runs, so it knows what a hit leaves on
disk. If each file still matches (size, mode, millisecond mtime, inode
and ctime), there is nothing to restore.
A run reads .vx/projects.lock.json and evaluates no config. No
telemetry plugin means no listener and no git spawn. A plugin that
skips a task costs nothing.
On a 3,270-task graph, task priority took 8.5 seconds with set unions. Bitsets do it in single-digit milliseconds, and cache restores never take a slot from a build.