Skip to content

Production blocker: prove complete cache input closure before ungating #46

Description

@godofecht

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions