54 lines
1.7 KiB
Python
54 lines
1.7 KiB
Python
#!/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())
|