#!/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)