Status: receipt verification and CI-safe synthetic loading tranche for local steering work.
Before any local steering runtime may use model or SAE files, Agent Machine must verify that every artifact referenced by a SteeringArtifactReceipt exists locally and matches the receipt's SHA-256 digest.
The loader re-verifies the receipt immediately before any load attempt. This prevents a stale preflight check from being trusted after files on disk have changed.
scripts/verify-steering-receipt.py \
examples/steering-artifact-receipts/gpt2-small-res-jb.missing.steering-artifact-receipt.json \
--expect-status not_configured \
--prettyThe fixture paths intentionally do not exist. The expected result is status: not_configured, with missing-file diagnostics for each absent artifact.
scripts/load-steering-receipt.py \
examples/steering-artifact-receipts/synthetic.available.steering-artifact-receipt.json \
--attempt-load \
--expect-status available \
--expect-model-loaded true \
--expect-sae-loaded true \
--prettyThe synthetic fixture contains small text artifacts, not model or SAE weights. It proves the SteeringLoader.load() path re-verifies digests at load time and only reports loaded after the receipt is valid.
A future runtime loader must not attempt to use GPT-2 Small or the residual-stream SAE until:
- the receipt validates against
contracts/steering-artifact-receipt.schema.json - each referenced local path exists
- each referenced path is a file
- each file's SHA-256 digest matches the receipt
If any check fails, the runtime must fail closed and return a non-applied posture.
The loader contains an optional runtime-import path for operator machines after a complete artifact receipt exists. Optional runtime dependencies are not part of normal validation and must remain outside the default bootstrap path.
This tranche does not:
- run inference
- inject activations
- return
status: applied - claim runtime readiness
It adds the digest-gated load envelope that future activation code must use.