#!/usr/bin/env python3 """Ensure CLI parity matrix contains no outstanding blockers before release.""" from __future__ import annotations import pathlib import re import sys REPO_ROOT = pathlib.Path(__file__).resolve().parents[2] PARITY_DOC = REPO_ROOT / "docs/cli-vs-ui-parity.md" BLOCKERS = { "🟥": "blocking gap", "❌": "missing feature", "🚫": "unsupported", } WARNINGS = { "🟡": "partial support", "⚠️": "warning", } def main() -> int: if not PARITY_DOC.exists(): print(f"❌ Parity matrix not found at {PARITY_DOC}", file=sys.stderr) return 1 text = PARITY_DOC.read_text(encoding="utf-8") blockers: list[str] = [] warnings: list[str] = [] for line in text.splitlines(): for symbol, label in BLOCKERS.items(): if symbol in line: blockers.append(f"{label}: {line.strip()}") for symbol, label in WARNINGS.items(): if symbol in line: warnings.append(f"{label}: {line.strip()}") if blockers: print("❌ CLI parity gate failed — blocking items present:", file=sys.stderr) for item in blockers: print(f" - {item}", file=sys.stderr) return 1 if warnings: print("⚠️ CLI parity gate warnings detected:", file=sys.stderr) for item in warnings: print(f" - {item}", file=sys.stderr) print("Treat warnings as failures until parity matrix is fully green.", file=sys.stderr) return 1 print("✅ CLI parity matrix has no blocking or warning entries.") return 0 if __name__ == "__main__": raise SystemExit(main())