#!/usr/bin/env python3 """Validate the child-local Cortex OS CTO workspace.""" from __future__ import annotations import json from pathlib import Path ROOT = Path(__file__).resolve().parents[1] REQUIRED_FILES = [ "AGENTS.md", "README.md", "WORKBOARD.yaml", "sot/00-START/CTO-WORKSPACE-INTENT.md", "sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md", ] REQUIRED_BRIEF_PHRASES = [ "Cortex governs.", "Hermes controls.", "Case executes.", "Harness proves.", "Core promotes only through SOT route.", "Case is the CTO execution backend, not the CTO authority layer.", "This brief is child-local planning.", ] def main() -> int: checked: list[str] = [] errors: list[str] = [] for rel in REQUIRED_FILES: path = ROOT / rel checked.append(rel) if not path.is_file(): errors.append(f"missing_required_file:{rel}") brief = ROOT / "sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md" if brief.is_file(): text = brief.read_text(encoding="utf-8") for phrase in REQUIRED_BRIEF_PHRASES: checked.append(f"brief_phrase:{phrase}") if phrase not in text: errors.append(f"missing_brief_phrase:{phrase}") if "core_promotion_status: not-promoted" not in text: errors.append("brief_missing_not_promoted_frontmatter") payload = { "ok": not errors, "validator": "cto-child-v1", "checked": checked, "errors": errors, "warnings": [], } print(json.dumps(payload, indent=2, sort_keys=True)) return 0 if not errors else 1 if __name__ == "__main__": raise SystemExit(main())