Require Leo direct-claim follow-up line
Some checks are pending
CI / lint-and-test (push) Waiting to run

This commit is contained in:
twentyOne2x 2026-07-10 02:49:58 +02:00
parent ddb916ab73
commit 79cfe2dc4a
4 changed files with 15 additions and 3 deletions

View file

@ -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 4. Next Cory-style follow-up: the one proof-changing or admin action that would
change the answer. 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.*`, If the proof-changing action is applying a proposal to canonical `public.*`,
say that apply requires explicit operator/admin authorization and should not be say that apply requires explicit operator/admin authorization and should not be
run from normal chat without that authorization. run from normal chat without that authorization.

View file

@ -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 4. Next Cory-style follow-up: the one proof-changing or admin action that would
change the answer. 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.*`, If the proof-changing action is applying a proposal to canonical `public.*`,
say that apply requires explicit operator/admin authorization and should not be say that apply requires explicit operator/admin authorization and should not be
run from normal chat without that authorization. run from normal chat without that authorization.

View file

@ -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"\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"\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"\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.I,
), ),
re.compile( 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"\bnot in canonical\b|\bcanonical .* has(?:n't| not) (?:moved|changed)\b|"
r"\bapplied_at empty\b|\bnot applied\b|\bnot possible\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"\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, re.I,
), ),
], ],
@ -487,7 +489,7 @@ SIGNAL_PATTERNS: dict[str, list[re.Pattern[str]]] = {
re.compile( re.compile(
r"\bI (?:would|should|will) (?:ask|query|check|run|show|stage|offer)|" 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"\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, re.I,
), ),
], ],

View file

@ -16,6 +16,7 @@ def test_gcp_kb_skill_uses_cloudsql_bridge_not_vps_docker() -> None:
assert "list-proposals --status all" in text assert "list-proposals --status all" in text
assert "Do not answer" in text or "do not infer matrix approval" 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 "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 "I cannot claim canonical DB changed" in text
assert "explicit operator/admin authorization" in text assert "explicit operator/admin authorization" in text
assert "docker exec" not 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 "do not infer matrix approval" in text
assert "approved/staged or packet-ready but not canonical" in text assert "approved/staged or packet-ready but not canonical" in text
assert "Next Cory-style follow-up" 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 "I cannot claim canonical DB changed" in text
assert "explicit operator/admin authorization" in text assert "explicit operator/admin authorization" in text
assert "Do not call an approved proposal \"implemented\"" in text assert "Do not call an approved proposal \"implemented\"" in text