evidence-hash-integrity
Use when any verdict, approval, or benchmark is pinned to a content hash — build the hash from an explicit manifest covering everything that produced the output (including the code), prove clean-state
SKILL.mdproject-trajectory/skills/evidence-hash-integrity/SKILL.md
GitHubWhen to use. Before pinning any evidence identity, and again before a gate certifies it. Why: every gate rejection in our phase close was a hash-soundness defect, not a product defect — non-deterministic authoring order, then a directory glob folding stray test artifacts into the pin.
Procedure.
- Enumerate hash inputs explicitly (or filter to a strict naming scheme); a
**/*glob over a shared output directory WILL swallow incidental files. Include the pipeline code whose change can change the output (our Blender bridge changed pixels under an "unchanged" hash until hashed). - Make generation deterministic — sort every authoring loop by a stable key; iteration order of in-memory object graphs is not stable across runs.
- Prove it: delete derived state → build → hash, twice; then once more in a pristine worktree of the pinned commit. "Reproduces in my workflow" usually means "my workflow deposits the same strays."
- If the identity must change after verdicts exist: re-pin, and log the exact old-hash = new-inputs
- named-deltas (each with its own hash) mapping. Never regenerate recorded verdicts, and never freeze code (e.g. suppress a lint) just to keep bytes stable — truth outranks hash stability.
- Done when: an independent party can reconstruct the pinned hash bit-exact from the manifest + the log alone (our gate reviewer did exactly this before approving).
Knowledge: FIELD-KNOWLEDGE-NOTHOMEWRECKER.md §F2.