Expand description
SRD-107 — the consumed-params derivation.
Which workload params does a phase’s scope actually consume? The answer is DERIVED, never declared (a declaration surface would drift from the programs and reintroduce stale-skip bugs by hand):
- GK backward closure — polydat owns every step of it
(
polydat::kernel::PolydatProgram::owned_extern_closureseeds from owned outputs;resolve_externs_throughwalks the scope chain; both are projections of the ONE construction-time node inventory). Names still unresolved past the workload root that match declared params are consumed from the params module. Aliasing through upstream rebindings (alias := run_tagat the root, phase readsalias) resolves correctly with no textual guessing. - Textual union —
{name}interpolation sites in the phase’s canonical config (op statement text, governance fields likecycles:/timeout:) never enter compiled programs; a substring scan over the canonical config text covers them. False positives only over-invalidate, and only when that specific param changes — the safe direction.
The result maps each consumed name to a digest of its CURRENT raw value; equality of stored vs freshly computed digests is the per-param leg of SRD-107’s three-way skip-validity check.