Damaged artifacts are misses
Every artifact is checked before it is restored; damage means a rebuild, not a wrong file.

Disks flip bits, uploads get cut off. A cache that restores a damaged artifact puts broken files in your build.
vx checks a CRC-32, that the artifact matches its key, and that it holds only declared outputs. Any failure is a cache miss, and the task runs.
// what it prints
restore @demo/web#build
crc32 ok
key ok
outputs ok → restored
(any check fails → miss, the task runs)More in Correct by default

A task sees only the env it names
Undeclared variables never reach a task, and secrets are masked in its output.

Projects stay in their lane
A project’s globs never reach into another project’s files.

The sandbox says what to allow
A refused write is named beside the failed task, with the line that allows it.

Numbers mean what you typed
Hex, exponents and fractions are refused, never quietly reinterpreted.

Releases you can verify
Binaries carry provenance, and vx upgrade checks every download’s SHA-256.