access-engine/tools/verify_emission_cadence.py
tegwick 3cb1cfaedf
All checks were successful
CI Smoke / host-smoke (push) Successful in 0s
CI Smoke / container-smoke (push) Successful in 2s
Build and Publish Container Image / build-and-push (push) Successful in 1m1s
Implement local decision delivery and reconcile blocked workplan requirements
Assistant: codex
Assistant-Model: gpt-6.1-sol
Assistant-Session: 01a1046e-fcad-7ea3-bf36-361fc8d679e8
2026-10-04 11:40:37 +02:00

29 lines
1.5 KiB
Python

#!/usr/bin/env python3
"""Verify the source declaration against the pinned owner schema/profile."""
import argparse
import hashlib
import json
from pathlib import Path
import subprocess
import sys
root = Path(__file__).resolve().parents[1]
parser = argparse.ArgumentParser()
parser.add_argument("--contract-schema", type=Path, default=root.parent / "info-tech-canon/infospace/schemas/emission-cadence.schema.yaml")
parser.add_argument("--checker", type=Path, default=root.parent / "net-kingdom/tools/emission-cadence-profile/emission_cadence_profile.py")
args = parser.parse_args()
declaration = root / "docs/contracts/decision-emission-cadence.json"
document = json.loads(declaration.read_text())
extension = document["extensions"]["flex-auth"]
if not args.contract_schema.is_file() or not args.checker.is_file():
parser.error("owner schema/profile is unavailable; supply explicit --contract-schema and --checker paths")
if hashlib.sha256(args.contract_schema.read_bytes()).hexdigest() != extension["contract"]["schema_sha256"]:
parser.error("owner schema changed; review and update the declared schema pin before assessment")
command = [sys.executable, str(args.checker), "--contract-schema", str(args.contract_schema)]
inventory = extension["inventory"]
for event in inventory["load_bearing"]:
command += ["--load-bearing", event]
for event in inventory["rare_load_bearing"]:
command += ["--rare-load-bearing", event]
command += [str(declaration)]
sys.exit(subprocess.run(command, check=False).returncode)