← Files DesignlyARCHIVED FILE

evals/baseline/test_monolith_parity.py

1.88 KB · Sep 30, 2026 · 23:14 UTC

↓ Download file

#!/usr/bin/env python3
"""Parity test for Designly v4.3 against the preserved v3.2.1 capabilities."""
from __future__ import annotations
import json
from pathlib import Path

ROOT = Path(__file__).resolve().parents[2]
BASELINE_SPEC = ROOT / "evals/baseline/v3.2.1-behavior.json"


def main() -> int:
    if not BASELINE_SPEC.is_file():
        print(f"FAIL Baseline spec not found: {BASELINE_SPEC}")
        return 1
    spec = json.loads(BASELINE_SPEC.read_text(encoding="utf-8"))
    failures: list[str] = []

    for slug in spec.get("required_v4_skill_slugs", []):
        for rel in (f"skills/{slug}/SKILL.md", f"skills/{slug}/agents/openai.yaml"):
            if not (ROOT / rel).is_file():
                failures.append(f"Missing {rel}")
            else:
                print(f"PASS {rel}")

    for slug in spec.get("required_v4_agent_slugs", []):
        rel = f".codex/agents/{slug}.toml"
        if not (ROOT / rel).is_file():
            failures.append(f"Missing {rel}")
        else:
            print(f"PASS {rel}")

    required_contracts = [
        "design-context.schema.json", "signal-packet.schema.json", "design-lock.schema.json",
        "revision-request.schema.json", "edit-contract.schema.json", "routing-graph.json"
    ]
    for name in required_contracts:
        rel = f"shared/contracts/{name}"
        if not (ROOT / rel).is_file():
            failures.append(f"Missing {rel}")
        else:
            print(f"PASS {rel}")

    if failures:
        print(f"\nParity check: FAIL ({len(failures)} missing components)")
        for f in failures:
            print(f" - {f}")
        return 1
    print(f"\nParity check: PASS ({len(spec.get('required_v4_skill_slugs', []))} skills, {len(spec.get('required_v4_agent_slugs', []))} agents, {len(required_contracts)} shared contracts present; v3.2.1 behavior retained)")
    return 0


if __name__ == "__main__":
    raise SystemExit(main())

SHA-256: 1636f0cdb4d7ee7c51ceaaa101514f4406864e454169f8d56df69e06e5f46ced