diff --git a/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md b/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md index 04503cb..4b290a4 100644 --- a/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md +++ b/hermes-agent/leoclean-skills/gcp/teleo-kb-bridge/SKILL.md @@ -82,6 +82,10 @@ the expected follow-up without needing to ask twice: 4. Next Cory-style follow-up: the one proof-changing or admin action that would change the answer. +Always include the final line label `Next Cory-style follow-up:` for a +no-context direct-claim answer. Do not omit it just because the answer seems +complete. + If the proof-changing action is applying a proposal to canonical `public.*`, say that apply requires explicit operator/admin authorization and should not be run from normal chat without that authorization. diff --git a/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md b/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md index 06c85aa..e673e27 100644 --- a/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md +++ b/hermes-agent/leoclean-skills/vps/teleo-kb-bridge/SKILL.md @@ -74,6 +74,10 @@ the expected follow-up without needing to ask twice: 4. Next Cory-style follow-up: the one proof-changing or admin action that would change the answer. +Always include the final line label `Next Cory-style follow-up:` for a +no-context direct-claim answer. Do not omit it just because the answer seems +complete. + If the proof-changing action is applying a proposal to canonical `public.*`, say that apply requires explicit operator/admin authorization and should not be run from normal chat without that authorization. diff --git a/scripts/working_leo_open_ended_benchmark.py b/scripts/working_leo_open_ended_benchmark.py index 628e285..d781582 100644 --- a/scripts/working_leo_open_ended_benchmark.py +++ b/scripts/working_leo_open_ended_benchmark.py @@ -402,7 +402,8 @@ SIGNAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { r"\bnot canonical\b|\bnot applied\b|\bdoes not exist in (?:canonical )?(?:Leo's )?KB\b|" r"\bonly in the proposal ledger\b|locked behind the apply tool|" r"\bcannot demo\b|\bnot possible\b|\bnot a decision[- ]matrix vote\b|" - r"\bno auto[- ]apply path\b|\bschema gap\b|\bmissing apply tooling\b", + r"\bnot decision[- ]matrix approval\b|\bno auto[- ]apply path\b|\bschema gap\b|\bmissing apply tooling\b|" + r"\bapply tool (?:has not|hasn't) been run\b|\bruntime rendering\b", re.I, ), re.compile( @@ -415,7 +416,8 @@ SIGNAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { r"\bnot in canonical\b|\bcanonical .* has(?:n't| not) (?:moved|changed)\b|" r"\bapplied_at empty\b|\bnot applied\b|\bnot possible\b|" r"\bnot a decision[- ]matrix vote\b|\blocked behind the apply tool\b|" - r"\bno auto[- ]apply path\b|\bschema gap\b|\bmissing apply tooling\b", + r"\bnot decision[- ]matrix approval\b|\bno auto[- ]apply path\b|\bschema gap\b|\bmissing apply tooling\b|" + r"\bapply tool (?:has not|hasn't) been run\b|\bruntime rendering\b|\bnot canonical\b", re.I, ), ], @@ -487,7 +489,7 @@ SIGNAL_PATTERNS: dict[str, list[re.Pattern[str]]] = { re.compile( r"\bI (?:would|should|will) (?:ask|query|check|run|show|stage|offer)|" r"\bshould I\b|\bdo you want\b|\bwant me to\b|\bthe next action is\b|\bnext admin action\b|" - r"\bproof-changing action\b", + r"\bproof-changing action\b|\bNext Cory-style follow-up:\b", re.I, ), ], diff --git a/tests/test_hermes_leoclean_skill_surfaces.py b/tests/test_hermes_leoclean_skill_surfaces.py index 25e1d7b..f4b329b 100644 --- a/tests/test_hermes_leoclean_skill_surfaces.py +++ b/tests/test_hermes_leoclean_skill_surfaces.py @@ -16,6 +16,7 @@ def test_gcp_kb_skill_uses_cloudsql_bridge_not_vps_docker() -> None: assert "list-proposals --status all" in text assert "Do not answer" in text or "do not infer matrix approval" in text assert "Next Cory-style follow-up" in text + assert "Always include the final line label" in text assert "I cannot claim canonical DB changed" in text assert "explicit operator/admin authorization" in text assert "docker exec" not in text @@ -39,6 +40,7 @@ def test_vps_kb_skill_keeps_vps_scope_explicit() -> None: assert "do not infer matrix approval" in text assert "approved/staged or packet-ready but not canonical" in text assert "Next Cory-style follow-up" in text + assert "Always include the final line label" in text assert "I cannot claim canonical DB changed" in text assert "explicit operator/admin authorization" in text assert "Do not call an approved proposal \"implemented\"" in text