evidence-kit
A held-constant test baseline and a committed per-run evidence manifest for the
validate stage: a stage stamp proves a stage was invoked, evidence-kit proves
it produced its green result. The manifest is a versioned, hashable wire
contract (# contract: evidence-manifest v1) an external verifier can consume,
so the kit is adoptable with or without an iteration lifecycle.
The gates: check-evidence-baseline (baseline grammar, blocking-slug liveness,
scenario coverage), check-evidence-manifest (manifest grammar and, where
lifecycle drives the tree, close-entry green block + validate-stamp coupling),
check-battery-roster (the runner doc’s battery block against the suite roster)
and check-producer-liveness (no stage entry while the producer is still
running). The bin/ tools that drive it: run-validate.sh (the codified spine
that runs the suites and records evidence) and diff-baseline.sh (the
situational runtime diff). See SPEC.md for the full contracts.
Install
Vendor the kit beside gate-sdk (required), then:
-
Register the gates — add to your
gates.list:check-evidence-baseline check-evidence-manifest check-battery-roster check-producer-liveness # entry hook only — never gates.list, see step 6Regenerate the hook + graph artifacts:
bash gate-sdk/bin/gen-pre-commit.sh --write. -
Seed the two surfaces —
.workflow/validate-baseline.txt:# contract: evidence-kit/SPEC.md §Baseline manifest — held-constant validate baseline: <suite> <scenario> <status> [<slug>]and
.workflow/validate-evidence.txt:# contract: evidence-manifest v1(override the paths with
EVIDENCE_KIT_BASELINE_FILE/EVIDENCE_KIT_MANIFEST_FILE). -
Configure the suites — copy
templates/evidence-config.shinto your gates dir asevidence-config.sh, namingEVIDENCE_KIT_SUITES, anEVIDENCE_KIT_RUN_<suite>command per suite, and theEVIDENCE_KIT_PARSERadapter (exit-codefor a whole-suite pass/fail,libtestfor per-test result logs, or your own log-parsing command). -
Record evidence at validate — run
bash evidence-kit/bin/run-validate.sh; it runs each suite, diffs the baseline, and records one evidence line per suite — written to the manifest in a single fold once the whole roster has run, so a suite needing a clean worktree may sit anywhere in it. -
Optional lifecycle integration — set
LIFECYCLE_KIT_BOUNDARY_TRUNCATEto the evidence manifest so a new iteration starts from the contract header, and the manifest gate’s close-entry and stamp-coupling assertions arm automatically. -
Wire
check-producer-livenessonLIFECYCLE_KIT_ENTRY_PREFLIGHTrather than ingates.list, its command naming the lock file through a name-resolving front end rather than a path (<stage>=<front end> check-producer-liveness <lock-file>; SPEC.md §check-evidence-manifest owns why a preflight entry names the gate), at whichever stage entries must not begin whilerun-validateis still running. It asks whether a producer is in flight, not whether the tree is consistent, so a battery thatrun-validateitself invokes would red every run against that run’s own lock. See SPEC.md §check-producer-liveness.
Test
bash gate-sdk/bin/run-gate-tests.sh evidence-kit/gate-tests evidence-kit/checks