#!/usr/bin/env bash set -euo pipefail # Verify CASAN Level 5 shared harness reuse across more than one project. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" source "$SCRIPT_DIR/casan-paths.sh" PROJECT_ROOT="$CASAN_APP_ROOT" REGISTRY="$CASAN_HARNESS_ROOT/config/project-registry.json" PACKAGE="$CASAN_HARNESS_ROOT/config/harness-package.json" python - "$REGISTRY" "$PACKAGE" <<'PY' import json import os import sys registry = json.load(open(sys.argv[1], encoding="utf-8")) package = json.load(open(sys.argv[2], encoding="utf-8")) name = package["package"] version = package["version"] projects = [ p for p in registry["projects"] if p.get("status") == "active" and p.get("harness_package") == name and p.get("harness_version") == version ] if len(projects) < 2: raise SystemExit(f"HARNESS_REUSE_INSUFFICIENT package={name} version={version} count={len(projects)}") roots = set() required = ("domain-pack.yaml", "input", "golden-runs", "corpus", "traceability-map.json") hub = os.path.abspath(os.path.join(os.path.dirname(registry_path := sys.argv[1]), "..", "..", "..")) for project in projects: root = project.get("domain_root", "") if not root or root in roots: raise SystemExit(f"HARNESS_REUSE_INVALID_DOMAIN_ROOT project={project.get('project_id')} root={root}") roots.add(root) full = os.path.join(hub, root) missing = [entry for entry in required if not os.path.exists(os.path.join(full, entry))] if missing: raise SystemExit(f"HARNESS_REUSE_DOMAIN_INCOMPLETE project={project.get('project_id')} missing={','.join(missing)}") print(f"HARNESS_REUSE_VALID package={name} version={version} project_count={len(projects)} active_projects={','.join(p['project_id'] for p in projects)}") PY