src/workspace/lockfile.ts — vx-lock.json
Purpose
Section titled “Purpose”vx lock freshly evaluates every project config and freezes
{ configPath, configHash, config } per project into vx-lock.json.
vx run --frozen loads configs FROM the lock (hash tripwire, zero
eval); vx lock --check re-evaluates and deep-compares to catch
env-drift the hashes can’t see.
Invariants
Section titled “Invariants”- Deliberate asymmetry: runs TRUST the lock (hash-only check); only
--checkpays full re-evaluation. - Stale file / missing entry under
--frozenis a hardUserError— never a silent fallback to evaluation. vx-lock.jsonis globally excluded from cache inputs and--affected(it’s vx’s own metadata, never a task input).