Close CTO architecture brief
This commit is contained in:
@@ -17,6 +17,8 @@ REQUIRED_FILES = [
|
||||
"CONTEXT.md",
|
||||
".sot/00-START/CTO-WORKSPACE-INTENT.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md",
|
||||
".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-HARNESS-EVIDENCE-INTERFACE-CONTRACT.md",
|
||||
@@ -66,6 +68,26 @@ REQUIRED_BRIEF_PHRASES = [
|
||||
"Core promotes only through SOT route.",
|
||||
"Case is the candidate CTO execution backend, not the CTO authority layer.",
|
||||
"This brief is child-local planning.",
|
||||
"Status: validated by later child-local CTO evidence.",
|
||||
"Stage 1 through Stage 6 proof gates are recorded as validated in `WORKBOARD.yaml`.",
|
||||
"`CTO-WORK-043` records Stage 6 candidate-default comparison evidence.",
|
||||
"`CTO-WORK-045` records Hermes Control Surface evidence for Harness-backed visibility and replay.",
|
||||
"Runtime default activation remains false until a later governed route changes it.",
|
||||
]
|
||||
|
||||
REQUIRED_ARCHITECTURE_CLOSEOUT_PRD_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"`CTO-WORK-001` remains `candidate`",
|
||||
"Close `CTO-WORK-001` as validated by referencing later evidence instead of changing authority.",
|
||||
"Stage 1 through Stage 6 validation",
|
||||
"`CTO-WORK-043` Stage 6 candidate-default comparison",
|
||||
"`CTO-WORK-045` Hermes Control Surface validation",
|
||||
"runtime default activation remains false",
|
||||
]
|
||||
|
||||
REQUIRED_ARCHITECTURE_CLOSEOUT_ISSUE_IDS = [
|
||||
"CTO-WORK-046",
|
||||
"CTO-WORK-047",
|
||||
]
|
||||
|
||||
REQUIRED_PRD_PHRASES = [
|
||||
@@ -882,10 +904,34 @@ def main() -> int:
|
||||
brief = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-BACKEND-BRIEF.md"
|
||||
if brief.is_file():
|
||||
text = brief.read_text(encoding="utf-8")
|
||||
if "status: validated" not in text:
|
||||
errors.append("brief_missing_validated_frontmatter")
|
||||
for phrase in REQUIRED_BRIEF_PHRASES:
|
||||
checked.append(f"brief_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_brief_phrase:{phrase}")
|
||||
|
||||
architecture_closeout_prd = ROOT / ".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-PRD.md"
|
||||
if architecture_closeout_prd.is_file():
|
||||
text = architecture_closeout_prd.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("architecture_closeout_prd_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_ARCHITECTURE_CLOSEOUT_PRD_PHRASES:
|
||||
checked.append(f"architecture_closeout_prd_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_architecture_closeout_prd_phrase:{phrase}")
|
||||
|
||||
architecture_closeout_issues = ROOT / ".sot/03-PROTOCOLS/CTO-ARCHITECTURE-BRIEF-CLOSEOUT-ISSUES.md"
|
||||
if architecture_closeout_issues.is_file():
|
||||
text = architecture_closeout_issues.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("architecture_closeout_issues_missing_not_promoted_frontmatter")
|
||||
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
||||
errors.append("architecture_closeout_issues_missing_local_planning_notice")
|
||||
for issue_id in REQUIRED_ARCHITECTURE_CLOSEOUT_ISSUE_IDS:
|
||||
checked.append(f"architecture_closeout_issue_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_architecture_closeout_issue_id:{issue_id}")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("brief_missing_not_promoted_frontmatter")
|
||||
|
||||
@@ -1394,6 +1440,10 @@ 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 REQUIRED_ARCHITECTURE_CLOSEOUT_ISSUE_IDS:
|
||||
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 REQUIRED_PROVIDER_ADMISSION_ISSUE_IDS:
|
||||
checked.append(f"workboard_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
@@ -1415,6 +1465,7 @@ def main() -> int:
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_workboard_id:{issue_id}")
|
||||
expected_statuses = {
|
||||
"CTO-WORK-001": "validated",
|
||||
"CTO-WORK-002": "validated",
|
||||
"CTO-WORK-003": "validated",
|
||||
"CTO-WORK-004": "validated",
|
||||
@@ -1456,6 +1507,8 @@ def main() -> int:
|
||||
"CTO-WORK-043": "validated",
|
||||
"CTO-WORK-044": "validated",
|
||||
"CTO-WORK-045": "validated",
|
||||
"CTO-WORK-046": "validated",
|
||||
"CTO-WORK-047": "validated",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
|
||||
Reference in New Issue
Block a user