Skip to content

Determinism and Selftest Vocabulary

Use this reference when a debugging note, CI contract, or selftest report uses one word for several different claims. The vocabulary is deliberately tied to evidence and decisions so it can improve an investigation rather than merely define terms.

Page maps

graph LR
  course["Deep Dive Make"] --> module["Determinism, Debugging, and Self-Testing"]
  module --> page["Determinism and Selftest Vocabulary"]
  page --> language["Precise evidence language"]
flowchart LR
  state["semantic state"] --> discovery["discovery"]
  discovery --> graph["evaluated graph"]
  graph --> selection["target selection"]
  selection --> execution["recipe execution"]
  execution --> artifact["artifact"]
  artifact --> acceptance["acceptance decision"]

Name the boundary you observed. “The build passed” hides all six.

Graph and determinism terms

Term Meaning in this module Evidence that fits
semantic input a fact whose change is allowed to change output meaning declared file, validated variable, tool signature, semantic stamp
discovery root directory boundary a discovery expression is allowed to inspect Makefile expression and evaluated list
membership policy rule deciding which discovered paths are legitimate inputs explicit list, owned-directory contract, governed filter
canonical order one defined ordering for a given member set captured evaluated list and ordering check
discovery determinism same semantic repository state yields the same eligible ordered members repeated or cross-environment membership evidence
graph determinism same semantic state yields the same targets, prerequisites, recipes, and relevant values bounded database or graph report
decision determinism same graph and target state yield the same rebuild decisions trace and query results
artifact determinism same semantic inputs yield equivalent declared artifacts governed inventory plus semantic acceptance
hidden input semantic observation that can affect behavior without truthful graph evidence controlled mutation with missing rebuild or false convergence
volatile diagnostic intentionally varying observation outside correctness identity timestamped trace, timing report, environment report
semantic stamp file evidence representing a normalized non-file input stamp content, prerequisite edge, changed-input replay
convergence unchanged successful request leaves no further work required no-op trace and query exit zero

Determinism is always bounded. State the supported tools, platform, environment policy, artifact set, and schedules that were actually compared.

Make observation terms

Term Question answered What it does not establish
dry run what ordinary recipes Make plans to run recipe success or artifact validity
trace why Make updates selected targets undeclared reads inside recipes
query whether requested targets need work causal explanation or semantic correctness
evaluated database which rules and variables exist after Make parses inputs safety or correctness of execution
debug output detailed remake and rule-search activity a bounded causal conclusion by itself
target state file existence, time, and other freshness-relevant facts content acceptance
selection evidence why a rule or target was chosen for update what the recipe eventually published
execution evidence command, environment boundary, and exit correct artifact semantics
artifact evidence path, membership, size, digest, or semantic validation why Make selected the recipe

Useful query outcome language:

Exit Say Do not say
0 requested targets are up to date every hidden input is modeled
1 at least one requested target needs work Make failed
2 Make encountered an error the graph merely needs rebuilding

In a deliberate hidden-input test, exit 1 can be the expected successful detection. Always pair the number with the claim.

Target-contract terms

Term Meaning
public target supported request whose behavior has human or automation consumers
target guarantee promised inputs, effect, outputs, exits, incremental behavior, and parallel behavior
action target request representing an operation rather than a timestamped artifact; commonly phony
file target path whose freshness and production belong to the graph
diagnostic target request that produces observations without redefining correctness artifacts
allowed writes output namespace a target may mutate
semantic compatibility preservation of target meaning for existing consumers
clean-state proof target run without borrowing undeclared local artifacts or configuration
failure propagation required failed check causes the public request to fail
NOT_RUN check was not reached after an earlier stopping boundary

NOT_RUN is neither pass nor failure. It prevents a report from claiming evidence that was never produced.

Selftest terms

flowchart TD
  claim["protected build claim"] --> oracle["independent oracle"]
  claim --> healthy["healthy fixture"]
  claim --> fault["controlled violation"]
  healthy --> accept["accepted result"]
  fault --> reject["expected rejection"]
  accept --> report["reviewable report"]
  reject --> report
Term Meaning in this module Review question
build-system selftest executable proof of graph, rebuild, schedule, or interface invariants which build claim differs from product behavior
oracle rule that decides whether observed evidence satisfies the claim can it retain the expectation when implementation is faulty
healthy fixture bounded state the oracle must accept does it exercise the promised contract
controlled violation deterministic defect inserted to test rejection does it violate exactly one intended boundary
negative test run where rejecting the controlled defect counts as success did rejection occur for the expected reason
stopping boundary first claim the harness could not accept which later checks must be NOT_RUN
equivalence set declared artifacts compared across schedules or implementations are required paths independent of incidental directory contents
accepted run every reached required claim passed within recorded limits what remains outside scope
rejected run evidence contradicts a required claim at a named boundary does the report localize without guessing root cause
harness test test that proves the selftest accepts truth and rejects a known violation is the detector connected to its promise
fault seam tightly controlled mechanism used only to activate a harness-test defect can ordinary proof activate it accidentally

An oracle is independent when the expectation survives the implementation mistake under test. It need not reimplement the product or build system.

Generated-rule terms

Term Meaning
macro reusable Make text or function invoked through expansion
template parameter value bound by call, such as $(1)
generated rule Make syntax produced as text and parsed into the graph
eval expansion expansion of generated text followed by parsing; the function itself yields empty text
automatic variable lifetime $@, $<, and related values exist when a selected recipe or rule context is evaluated
dollar escaping preserving a dollar layer through earlier text expansion
finite family generated target membership has an explicit bounded source
explicit equivalent ordinary rule expressing the contract of one generated member
quarantined surface generated rules have one owner, explicit activation, bounded membership, and no control over the core graph
abstraction budget review complexity the removed duplication justifies

Separate file location does not establish quarantine. Disabled core proof, enabled inventory, explicit equivalence, and an invalid-input rejection do.

Confusable pairs

Do not collapse Distinction
membership and order the right files can be unordered; the wrong files can be perfectly sorted
clean success and convergence a build can succeed and still require work immediately
convergence and graph completeness a missing edge can preserve a quiet stale result
recipe exit and artifact acceptance exit zero does not validate published meaning
trace and root cause trace localizes Make’s declared reason, not every undeclared influence
dry run and execution planned commands did not establish real effects
file hash and semantic equivalence formats may permit irrelevant byte differences or meaningful equal-sized changes
serial/parallel success and equivalence both schedules can exit zero with different artifacts
public name and public contract meaning can break while the target name stays fixed
selftest pass and universal proof the result is bounded to its fixture, oracle, environment, and artifact set
negative failure and successful rejection the harness must reject at the intended boundary
abstraction and opacity repetition can shrink while review cost grows

Rewrite vague incident language

Vague statement Evidence-ready replacement
“The build is flaky.” “Two clean schedule runs published different identity for the declared generated header.”
“Make rebuilt for no reason.” “The trace selected the report because its phony diagnostic prerequisite is always out of date.”
“CI passed.” “The documented CI target returned zero; product test and selftest reports both record pass within their stated limits.”
“The selftest failed.” “Convergence passed, schedule equivalence rejected a changed artifact, and later checks were not run.”
“Discovery is deterministic.” “The evaluated list has governed membership and canonical ordering for the recorded repository state.”
eval is safe.” “The finite generated family matches its explicit contract, remains disabled for core proof, and rejects an invalid member.”

Precise language does not require certainty about root cause. It requires honesty about the observed boundary.

Decision terms

  • accept — evidence supports the bounded claim;
  • reject — evidence contradicts the claim;
  • repair — a named defect has a truthful correction and replay route;
  • abstain — evidence is insufficient, with the missing observation named;
  • simplify — a less costly rule shape preserves the same contract;
  • retire — a public or diagnostic surface no longer has a consumer.

Avoid “looks deterministic,” “probably fixed,” and “green enough.” They hide the claim and stop condition.

Vocabulary checkpoint

You can use this reference when you can:

  • classify an observation as discovery, graph, selection, execution, artifact, or acceptance evidence;
  • distinguish membership from ordering and convergence from completeness;
  • interpret dry-run, trace, database, and query results within their limits;
  • describe a public target using effects and failure semantics;
  • explain why an independent oracle needs both acceptance and rejection cases;
  • distinguish an expected negative-test rejection from an unrelated failure;
  • compare generated rules to an explicit contract before accepting abstraction.