Plan Hermes WebUI control panel

This commit is contained in:
Svrnty
2026-06-01 07:30:07 -04:00
parent be65b20cff
commit d2f574802f
4 changed files with 227 additions and 0 deletions
+39
View File
@@ -48,6 +48,8 @@ REQUIRED_FILES = [
".sot/03-PROTOCOLS/CTO-HERMES-REAL-REFRESH-CONTROL-REPLAY-PRD.md",
".sot/03-PROTOCOLS/CTO-HERMES-REAL-REFRESH-CONTROL-REPLAY-ISSUES.md",
".sot/03-PROTOCOLS/CTO-HERMES-REAL-REFRESH-CONTROL-REPLAY-EVIDENCE.md",
".sot/03-PROTOCOLS/CTO-HERMES-WEBUI-CONTROL-PANEL-PRD.md",
".sot/03-PROTOCOLS/CTO-HERMES-WEBUI-CONTROL-PANEL-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-FIRST-REAL-GOVERNED-WORKFLOW-APPROVAL-PACKET.md",
@@ -135,6 +137,21 @@ REQUIRED_FIRST_REAL_WORKFLOW_APPROVAL_PACKET_PHRASES = [
"Runtime default activation remains false.",
]
REQUIRED_HERMES_WEBUI_CONTROL_PANEL_PHRASES = [
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
"Hermes WebUI consumer panel",
"Hermes-owned extension/plugin surface",
"Do not edit upstream `hermes-webui`.",
"Do not edit upstream `hermes-agent`.",
"Harness-backed summary data as the source of truth",
"Stage 6 real-governed refresh status",
"refresh comparison, real Stage 5 pass report, and Stage 5 proof",
"target repository read-only proof status",
"candidate-default refresh eligibility from runtime default activation",
"blocked Codex/Pi lane rationale",
"Do not activate Case as default backend.",
]
REQUIRED_HERMES_REAL_REFRESH_CONTROL_REPLAY_EVIDENCE_PHRASES = [
"Local planning SOT only. Not a Core Protocol. Not active Core authority.",
"CTO-WORK-057",
@@ -1128,6 +1145,26 @@ def main() -> int:
if phrase not in text:
errors.append(f"missing_hermes_real_refresh_control_replay_issue_phrase:{phrase}")
hermes_webui_control_panel_prd = ROOT / ".sot/03-PROTOCOLS/CTO-HERMES-WEBUI-CONTROL-PANEL-PRD.md"
if hermes_webui_control_panel_prd.is_file():
text = hermes_webui_control_panel_prd.read_text(encoding="utf-8")
if "core_promotion_status: not-promoted" not in text:
errors.append("hermes_webui_control_panel_prd_missing_not_promoted_frontmatter")
for phrase in REQUIRED_HERMES_WEBUI_CONTROL_PANEL_PHRASES:
checked.append(f"hermes_webui_control_panel_prd_phrase:{phrase}")
if phrase not in text:
errors.append(f"missing_hermes_webui_control_panel_prd_phrase:{phrase}")
hermes_webui_control_panel_issues = ROOT / ".sot/03-PROTOCOLS/CTO-HERMES-WEBUI-CONTROL-PANEL-ISSUES.md"
if hermes_webui_control_panel_issues.is_file():
text = hermes_webui_control_panel_issues.read_text(encoding="utf-8")
if "core_promotion_status: not-promoted" not in text:
errors.append("hermes_webui_control_panel_issues_missing_not_promoted_frontmatter")
for phrase in ["CTO-WORK-058", "CTO-WORK-059", "upstream `hermes-webui`", "upstream `hermes-agent`", "runtime default activation"]:
checked.append(f"hermes_webui_control_panel_issue_phrase:{phrase}")
if phrase not in text:
errors.append(f"missing_hermes_webui_control_panel_issue_phrase:{phrase}")
hermes_real_refresh_control_replay_evidence = ROOT / ".sot/03-PROTOCOLS/CTO-HERMES-REAL-REFRESH-CONTROL-REPLAY-EVIDENCE.md"
if hermes_real_refresh_control_replay_evidence.is_file():
text = hermes_real_refresh_control_replay_evidence.read_text(encoding="utf-8")
@@ -1736,6 +1773,8 @@ def main() -> int:
"CTO-WORK-055": "validated",
"CTO-WORK-056": "validated",
"CTO-WORK-057": "validated",
"CTO-WORK-058": "validated",
"CTO-WORK-059": "candidate",
}
for issue_id, expected in expected_statuses.items():
checked.append(f"workboard_status:{issue_id}:{expected}")