From 105e6c61d79efcdad5300b09f0344d02648f4ded Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Fri, 22 May 2026 07:30:31 -0400 Subject: [PATCH 1/2] Wire runtime receipt validation target --- Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 8905dc1..1b49dbc 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -.PHONY: validate validate-json validate-yaml validate-quadlet validate-render validate-evidence validate-governance validate-policy-fabric validate-activation validate-supply-chain validate-release-bundle validate-sourceos-projections validate-package validate-cli validate-formula doctor probe +.PHONY: validate validate-json validate-yaml validate-quadlet validate-render validate-evidence validate-governance validate-policy-fabric validate-activation validate-supply-chain validate-release-bundle validate-sourceos-projections validate-package validate-cli validate-formula validate-runtime-install-receipts doctor probe PYTHON ?= python3 RUBY ?= ruby @@ -21,7 +21,7 @@ DECIDED_AT := 2026-05-04T12:51:00Z PYCLI := PYTHONPATH=src $(PYTHON) -m agent_machine.cli PYMOD := PYTHONPATH=src $(PYTHON) -m -validate: validate-json validate-yaml validate-quadlet validate-render validate-evidence validate-governance validate-policy-fabric validate-activation validate-supply-chain validate-release-bundle validate-sourceos-projections validate-package validate-cli validate-formula +validate: validate-json validate-yaml validate-quadlet validate-render validate-evidence validate-governance validate-policy-fabric validate-activation validate-supply-chain validate-release-bundle validate-sourceos-projections validate-package validate-cli validate-formula validate-runtime-install-receipts validate-json: $(PYTHON) scripts/validate-json.py @@ -102,6 +102,9 @@ validate-cli: validate-formula: $(RUBY) -c $(FORMULA) +validate-runtime-install-receipts: + $(PYTHON) scripts/validate-runtime-install-receipts.py + doctor: $(BOOTSTRAP_CLI) doctor --format json From 3f6cdfbddd93e6a48fd85fb706fe1253466a6dc1 Mon Sep 17 00:00:00 2001 From: mdheller <21163552+mdheller@users.noreply.github.com> Date: Fri, 22 May 2026 07:35:39 -0400 Subject: [PATCH 2/2] Add RuntimeInstallReceipt schema mapping --- src/agent_machine/contracts.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/agent_machine/contracts.py b/src/agent_machine/contracts.py index a0fbeb7..1c9d983 100644 --- a/src/agent_machine/contracts.py +++ b/src/agent_machine/contracts.py @@ -56,6 +56,7 @@ def schema_by_kind(root: Path | None = None) -> dict[str, Path]: "InferenceProvider": base / "inference-provider.schema.json", "PolicyAdmission": base / "policy-admission.schema.json", "ReleaseEvidenceBundle": base / "release-evidence-bundle.schema.json", + "RuntimeInstallReceipt": base / "runtime-install-receipt.schema.json", "SignedReleaseBundleEnvelope": base / "signed-release-bundle-envelope.schema.json", "SteeringArtifactReceipt": base / "steering-artifact-receipt.schema.json", "SteeringSourceset": base / "steering-sourceset.schema.json", @@ -96,9 +97,9 @@ def validate_by_kind(instance_path: Path, root: Path | None = None) -> Path: instance = load_json(instance_path) if not isinstance(instance, dict): raise AssertionError(f"{instance_path}: example root must be a JSON object") - kind = instance.get("kind") + kind = instance.get("kind") or instance.get("type") if not isinstance(kind, str): - raise AssertionError(f"{instance_path}: missing string `kind` field") + raise AssertionError(f"{instance_path}: missing string `kind` or `type` field") mapping = schema_by_kind(root) schema_path = mapping.get(kind) if schema_path is None: