Problem
The shared cache can restore zig-out and skip compilation, so a false cache hit is a correctness failure. The current key is useful as a prototype but does not yet prove that every artifact-affecting input participates in the key.
PR #43 therefore gates cache_build.sh behind AZAZEL_EXPERIMENTAL_CACHE=1 and removes the stale-hit impossibility claim.
Required coverage
The production cache key needs an explicit declared-input closure covering at least local Zig/C/C++ sources and headers, object files, generated tool inputs/outputs, local path dependencies, package identities and relevant package build arguments, target/cpu/ABI, optimization/build options, Azazel executor/generator version, toolchain identity, and external/system dependencies or a deliberate policy that makes them ineligible for shared caching.
Arbitrary pre/post commands and environment-dependent generators need either declared inputs/environment or a hard refusal from the production cache path.
Acceptance criteria
- Mutation tests show that changing every modeled artifact input changes the key.
- Target and build-option changes produce different keys.
- Local path dependency content changes produce different keys.
- Native source/header changes produce different keys.
- Builds with undeclared side effects/inputs are rejected or explicitly marked non-cacheable.
- Cache-hit artifacts are compared against clean-build artifacts across representative real-project parity slices.
- Only after those tests pass is the
AZAZEL_EXPERIMENTAL_CACHE=1 gate removed.
Problem
The shared cache can restore
zig-outand skip compilation, so a false cache hit is a correctness failure. The current key is useful as a prototype but does not yet prove that every artifact-affecting input participates in the key.PR #43 therefore gates
cache_build.shbehindAZAZEL_EXPERIMENTAL_CACHE=1and removes the stale-hit impossibility claim.Required coverage
The production cache key needs an explicit declared-input closure covering at least local Zig/C/C++ sources and headers, object files, generated tool inputs/outputs, local path dependencies, package identities and relevant package build arguments, target/cpu/ABI, optimization/build options, Azazel executor/generator version, toolchain identity, and external/system dependencies or a deliberate policy that makes them ineligible for shared caching.
Arbitrary
pre/postcommands and environment-dependent generators need either declared inputs/environment or a hard refusal from the production cache path.Acceptance criteria
AZAZEL_EXPERIMENTAL_CACHE=1gate removed.