diff --git a/.sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md b/.sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md index 721f426..5daebc9 100644 --- a/.sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md +++ b/.sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md @@ -1,7 +1,7 @@ --- name: cto-first-real-governed-workflow-execution-attempt tier: local -status: blocked +status: historical owner: jp source: .sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-ISSUES.md created: 2026-06-01 @@ -59,7 +59,7 @@ Backend evidence: ## Result -Status: blocked. +Status: historical failed attempt. Reason: the shell resolved `case` as a shell keyword, not an executable Case CLI. The Harness therefore failed closed before Case process start and before target mutation. @@ -76,13 +76,17 @@ Observed Harness facts: ## Decision -Do not mark `CTO-WORK-049` validated. +Do not use this attempt to validate `CTO-WORK-049`. Do not patch the target by hand. Do not use fake or shell-keyword resolution as Case proof. -Next useful step is to provide or build an executable Case CLI path and rerun the same approved Harness seam. +Superseded by validated pass evidence: + +```text +.sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PASS-EVIDENCE.md +``` ## Non-Authority Notice diff --git a/WORKBOARD.yaml b/WORKBOARD.yaml index 589db32..1772b7d 100644 --- a/WORKBOARD.yaml +++ b/WORKBOARD.yaml @@ -252,7 +252,7 @@ items: owner: "" - id: CTO-WORK-051 title: First Real Governed Workflow Execution Attempt - status: blocked + status: historical source: .sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md owner: jp - id: CTO-WORK-052 diff --git a/tools/validate_cto_child.py b/tools/validate_cto_child.py index 7011457..6b8ac60 100644 --- a/tools/validate_cto_child.py +++ b/tools/validate_cto_child.py @@ -99,6 +99,8 @@ REQUIRED_FILES = [ ".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", + ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md", + ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PASS-EVIDENCE.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", @@ -231,6 +233,20 @@ REQUIRED_FIRST_REAL_WORKFLOW_APPROVAL_PACKET_PHRASES = [ "Runtime default activation remains false.", ] +REQUIRED_FIRST_REAL_WORKFLOW_ATTEMPT_PHRASES = [ + "status: historical", + "Status: historical failed attempt.", + "Do not use this attempt to validate `CTO-WORK-049`.", + ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PASS-EVIDENCE.md", +] + +REQUIRED_FIRST_REAL_WORKFLOW_PASS_PHRASES = [ + "status: validated", + "`CTO-WORK-049` is validated as the first real governed workflow execution.", + "Runtime default activation remains false.", + "This evidence does not promote CTO artifacts into Core", +] + REQUIRED_HERMES_WEBUI_CONTROL_PANEL_PHRASES = [ "Local planning SOT only. Not a Core Protocol. Not active Core authority.", "Hermes WebUI consumer panel", @@ -1997,6 +2013,26 @@ def main() -> int: if "core_promotion_status: not-promoted" not in text: errors.append("brief_missing_not_promoted_frontmatter") + first_real_workflow_attempt = ROOT / ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-EXECUTION-ATTEMPT.md" + if first_real_workflow_attempt.is_file(): + text = first_real_workflow_attempt.read_text(encoding="utf-8") + if "core_promotion_status: not-promoted" not in text: + errors.append("first_real_workflow_attempt_missing_not_promoted_frontmatter") + for phrase in REQUIRED_FIRST_REAL_WORKFLOW_ATTEMPT_PHRASES: + checked.append(f"first_real_workflow_attempt_phrase:{phrase}") + if phrase not in text: + errors.append(f"missing_first_real_workflow_attempt_phrase:{phrase}") + + first_real_workflow_pass = ROOT / ".sot/03-PROTOCOLS/CTO-FIRST-REAL-GOVERNED-WORKFLOW-PASS-EVIDENCE.md" + if first_real_workflow_pass.is_file(): + text = first_real_workflow_pass.read_text(encoding="utf-8") + if "core_promotion_status: not-promoted" not in text: + errors.append("first_real_workflow_pass_missing_not_promoted_frontmatter") + for phrase in REQUIRED_FIRST_REAL_WORKFLOW_PASS_PHRASES: + checked.append(f"first_real_workflow_pass_phrase:{phrase}") + if phrase not in text: + errors.append(f"missing_first_real_workflow_pass_phrase:{phrase}") + stage6_real_refresh_prd = ROOT / ".sot/03-PROTOCOLS/CTO-CASE-STAGE6-REAL-GOVERNED-REFRESH-PRD.md" if stage6_real_refresh_prd.is_file(): text = stage6_real_refresh_prd.read_text(encoding="utf-8") @@ -3192,7 +3228,7 @@ def main() -> int: "CTO-WORK-048": "validated", "CTO-WORK-049": "validated", "CTO-WORK-050": "validated", - "CTO-WORK-051": "blocked", + "CTO-WORK-051": "historical", "CTO-WORK-052": "validated", "CTO-WORK-053": "validated", "CTO-WORK-054": "validated",