Add first real governed workflow route
This commit is contained in:
@@ -42,6 +42,8 @@ REQUIRED_FILES = [
|
||||
".sot/03-PROTOCOLS/CTO-CASE-STAGE6-CANDIDATE-DEFAULT-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-HERMES-CONTROL-SURFACE-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-HERMES-CONTROL-SURFACE-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-ADMISSION-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-PROVIDER-BUILD-PRD.md",
|
||||
@@ -90,6 +92,26 @@ REQUIRED_ARCHITECTURE_CLOSEOUT_ISSUE_IDS = [
|
||||
"CTO-WORK-047",
|
||||
]
|
||||
|
||||
REQUIRED_FIRST_REAL_WORKFLOW_PRD_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"The next useful proof is not another synthetic stage.",
|
||||
"Governed Workflow Delegation",
|
||||
"precise task contract",
|
||||
"explicitly admitted owned low-risk Target Repository",
|
||||
"JP approval before mutation",
|
||||
"CTO Harness Case seam",
|
||||
"Harness Evidence Interface artifacts",
|
||||
"Hermes Control Surface replay paths",
|
||||
"runtime default activation false",
|
||||
"`CTO-WORK-049` stays candidate until a concrete Target Repository and task contract are admitted.",
|
||||
"future focused Harness command",
|
||||
]
|
||||
|
||||
REQUIRED_FIRST_REAL_WORKFLOW_ISSUE_IDS = [
|
||||
"CTO-WORK-048",
|
||||
"CTO-WORK-049",
|
||||
]
|
||||
|
||||
REQUIRED_PRD_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"Case Candidate Backend",
|
||||
@@ -932,6 +954,30 @@ def main() -> int:
|
||||
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}")
|
||||
|
||||
first_real_workflow_prd = ROOT / ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PRD.md"
|
||||
if first_real_workflow_prd.is_file():
|
||||
text = first_real_workflow_prd.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("first_real_workflow_prd_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_FIRST_REAL_WORKFLOW_PRD_PHRASES:
|
||||
checked.append(f"first_real_workflow_prd_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_first_real_workflow_prd_phrase:{phrase}")
|
||||
|
||||
first_real_workflow_issues = ROOT / ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-ISSUES.md"
|
||||
if first_real_workflow_issues.is_file():
|
||||
text = first_real_workflow_issues.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("first_real_workflow_issues_missing_not_promoted_frontmatter")
|
||||
if "Local planning SOT only. Not a Core Protocol. Not active Core authority." not in text:
|
||||
errors.append("first_real_workflow_issues_missing_local_planning_notice")
|
||||
if "Human gate: JP must approve the concrete Target Repository and task contract before execution." not in text:
|
||||
errors.append("first_real_workflow_issues_missing_human_gate")
|
||||
for issue_id in REQUIRED_FIRST_REAL_WORKFLOW_ISSUE_IDS:
|
||||
checked.append(f"first_real_workflow_issue_id:{issue_id}")
|
||||
if issue_id not in text:
|
||||
errors.append(f"missing_first_real_workflow_issue_id:{issue_id}")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("brief_missing_not_promoted_frontmatter")
|
||||
|
||||
@@ -1444,6 +1490,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_FIRST_REAL_WORKFLOW_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:
|
||||
@@ -1509,6 +1559,8 @@ def main() -> int:
|
||||
"CTO-WORK-045": "validated",
|
||||
"CTO-WORK-046": "validated",
|
||||
"CTO-WORK-047": "validated",
|
||||
"CTO-WORK-048": "validated",
|
||||
"CTO-WORK-049": "candidate",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
|
||||
Reference in New Issue
Block a user