Add CTO navigation index
This commit is contained in:
@@ -13,6 +13,7 @@ ROOT = Path(__file__).resolve().parents[1]
|
||||
REQUIRED_FILES = [
|
||||
"AGENTS.md",
|
||||
"README.md",
|
||||
"INDEX.md",
|
||||
"WORKBOARD.yaml",
|
||||
"CONTEXT.md",
|
||||
"docs/LEGACY-INGEST.md",
|
||||
@@ -139,6 +140,16 @@ README_CONTRACT_SNIPPETS = [
|
||||
"permission to activate Case, mutate target repos, call providers, read secrets, publish, deploy, or release",
|
||||
]
|
||||
|
||||
INDEX_CONTRACT_SNIPPETS = [
|
||||
"Route: `cto`.",
|
||||
"Category: child-local CTO planning workspace for governed execution routing.",
|
||||
"CTO owns child-local execution-routing planning",
|
||||
"CTO is not Core authority, Runtime authority, Host Runtime authority",
|
||||
"Do not activate Case as default backend, mutate target repositories",
|
||||
"Stage: CLEAN.",
|
||||
"Clean score: 100.",
|
||||
]
|
||||
|
||||
REQUIRED_BRIEF_PHRASES = [
|
||||
"Cortex governs.",
|
||||
"Hermes controls.",
|
||||
@@ -1902,6 +1913,14 @@ def main() -> int:
|
||||
if snippet not in text:
|
||||
errors.append(f"missing_readme_contract_snippet:{snippet}")
|
||||
|
||||
index = ROOT / "INDEX.md"
|
||||
if index.is_file():
|
||||
text = index.read_text(encoding="utf-8")
|
||||
for snippet in INDEX_CONTRACT_SNIPPETS:
|
||||
checked.append(f"index_contract_snippet:{snippet}")
|
||||
if snippet not in text:
|
||||
errors.append(f"missing_index_contract_snippet:{snippet}")
|
||||
|
||||
legacy_ingest = ROOT / "docs/LEGACY-INGEST.md"
|
||||
if legacy_ingest.is_file():
|
||||
text = legacy_ingest.read_text(encoding="utf-8")
|
||||
@@ -3121,7 +3140,7 @@ def main() -> int:
|
||||
checked.append(f"workboard_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_workboard_id:{issue_id}")
|
||||
for issue_id in ["CTO-WORK-098", "CTO-WORK-099", "CTO-WORK-100", "CTO-WORK-101", "CTO-WORK-102"]:
|
||||
for issue_id in ["CTO-WORK-098", "CTO-WORK-099", "CTO-WORK-100", "CTO-WORK-101", "CTO-WORK-102", "CTO-WORK-103"]:
|
||||
checked.append(f"workboard_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_workboard_id:{issue_id}")
|
||||
@@ -3225,6 +3244,7 @@ def main() -> int:
|
||||
"CTO-WORK-100": "validated",
|
||||
"CTO-WORK-101": "validated",
|
||||
"CTO-WORK-102": "validated",
|
||||
"CTO-WORK-103": "validated",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
@@ -3335,6 +3355,10 @@ def main() -> int:
|
||||
errors.append("workboard_missing_agent_contract_title")
|
||||
if "source: AGENTS.md" not in text:
|
||||
errors.append("workboard_missing_agent_contract_source")
|
||||
if "CTO Navigation Index" not in text:
|
||||
errors.append("workboard_missing_navigation_index_title")
|
||||
if "source: INDEX.md" not in text:
|
||||
errors.append("workboard_missing_navigation_index_source")
|
||||
|
||||
payload = {
|
||||
"ok": not errors,
|
||||
|
||||
Reference in New Issue
Block a user