Record Stage 5 repeatability proof
This commit is contained in:
@@ -78,6 +78,9 @@ REQUIRED_FILES = [
|
||||
".sot/03-PROTOCOLS/CTO-ENDGOAL-COMPLETION-AUDIT-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-ENDGOAL-COMPLETION-AUDIT-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-ENDGOAL-COMPLETION-AUDIT-CLOSEOUT.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-PRD.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-ISSUES.md",
|
||||
".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-EVIDENCE.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-FIRST-REAL-GOVERNED-WORKFLOW-APPROVAL-PACKET.md",
|
||||
@@ -1299,6 +1302,31 @@ REQUIRED_SPARK_ENDPOINT_CONFIG_ISSUE_PHRASES = [
|
||||
"Non-secret readiness check on 2026-06-01 showed `CTO_HARNESS_CASE_LOCAL_BASE_URL=missing`.",
|
||||
]
|
||||
|
||||
REQUIRED_STAGE5_REPEATABILITY_PHRASES = [
|
||||
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
|
||||
"CTO-WORK-078",
|
||||
"CTO-WORK-079",
|
||||
"CTO-WORK-080",
|
||||
"Stage 5 repeatability proof",
|
||||
"second governed Stage 5 Case run",
|
||||
"r1-slugify-punctuation",
|
||||
"99000f7",
|
||||
"2fa1601",
|
||||
"/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260602T101450Z-r1-slugify-punctuation-2663598/report.json",
|
||||
"/home/svrnty/.hermes/profiles/cto-planb/harness-runs/20260602T101450Z-r1-slugify-punctuation-2663598/stage5-owned-repo-proof.json",
|
||||
"case_process_started: true",
|
||||
"changed files: `src/strings.py`, `strings.py`, `test_strings.py`",
|
||||
"allowed paths passed: true",
|
||||
"forbidden paths passed: true",
|
||||
"target repository start clean: true",
|
||||
"target repository ending clean: true",
|
||||
"11 passed",
|
||||
"Runtime default activation remains false.",
|
||||
"Do not activate Case as default backend.",
|
||||
"This closeout does not authorize another Case run.",
|
||||
"No Core promotion occurs.",
|
||||
]
|
||||
|
||||
|
||||
def workboard_status(text: str, issue_id: str) -> str | None:
|
||||
pattern = rf"- id: {re.escape(issue_id)}\n(?: .+\n)*? status: ([^\n]+)"
|
||||
@@ -1787,6 +1815,36 @@ def main() -> int:
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_stage6_real_refresh_evidence_phrase:{phrase}")
|
||||
|
||||
stage5_repeatability_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-PRD.md"
|
||||
if stage5_repeatability_prd.is_file():
|
||||
text = stage5_repeatability_prd.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("stage5_repeatability_prd_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_STAGE5_REPEATABILITY_PHRASES:
|
||||
checked.append(f"stage5_repeatability_prd_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_stage5_repeatability_prd_phrase:{phrase}")
|
||||
|
||||
stage5_repeatability_issues = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-ISSUES.md"
|
||||
if stage5_repeatability_issues.is_file():
|
||||
text = stage5_repeatability_issues.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("stage5_repeatability_issues_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_STAGE5_REPEATABILITY_PHRASES:
|
||||
checked.append(f"stage5_repeatability_issue_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_stage5_repeatability_issue_phrase:{phrase}")
|
||||
|
||||
stage5_repeatability_evidence = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE5-REPEATABILITY-PROOF-EVIDENCE.md"
|
||||
if stage5_repeatability_evidence.is_file():
|
||||
text = stage5_repeatability_evidence.read_text(encoding="utf-8")
|
||||
if "core_promotion_status: not-promoted" not in text:
|
||||
errors.append("stage5_repeatability_evidence_missing_not_promoted_frontmatter")
|
||||
for phrase in REQUIRED_STAGE5_REPEATABILITY_PHRASES:
|
||||
checked.append(f"stage5_repeatability_evidence_phrase:{phrase}")
|
||||
if phrase not in text:
|
||||
errors.append(f"missing_stage5_repeatability_evidence_phrase:{phrase}")
|
||||
|
||||
prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-CANDIDATE-BACKEND-PRD.md"
|
||||
if prd.is_file():
|
||||
text = prd.read_text(encoding="utf-8")
|
||||
@@ -2395,6 +2453,9 @@ def main() -> int:
|
||||
"CTO-WORK-075": "validated",
|
||||
"CTO-WORK-076": "validated",
|
||||
"CTO-WORK-077": "validated",
|
||||
"CTO-WORK-078": "validated",
|
||||
"CTO-WORK-079": "validated",
|
||||
"CTO-WORK-080": "validated",
|
||||
}
|
||||
for issue_id, expected in expected_statuses.items():
|
||||
checked.append(f"workboard_status:{issue_id}:{expected}")
|
||||
|
||||
Reference in New Issue
Block a user