fix(governance): stop km healthcheck requeue
All checks were successful
Code Review / ai-code-review (push) Successful in 11s
CD Pipeline / tests (push) Successful in 2m1s
CD Pipeline / build-and-deploy (push) Successful in 4m45s
CD Pipeline / post-deploy-checks (push) Successful in 1m46s

This commit is contained in:
Your Name
2026-05-19 23:01:03 +08:00
parent ac0d2329f7
commit 8342cfa460
4 changed files with 82 additions and 1 deletions

View File

@@ -285,6 +285,43 @@ class TestDispatchGovernanceEvent:
mock_skip_cooldown.assert_not_awaited()
mock_create.assert_awaited_once()
@pytest.mark.asyncio
async def test_knowledge_degradation_does_not_requeue_after_review_draft(self):
"""同一 event 已有 Hermes review draft 後,不可反覆補 pending dispatch。"""
event = _make_governance_event(event_type="knowledge_degradation")
event.details = {
"remediation": {"next_action": "run_kb_growth_healthcheck"},
"ownership": {"lead_agent": "Hermes"},
}
succeeded_dispatch = MagicMock()
succeeded_dispatch.executor_type = "hermes_kb_growth_healthcheck"
succeeded_dispatch.dispatch_status = "succeeded"
succeeded_dispatch.decision_context = {
"workflow": {"current_stage": "waiting_owner_review"},
"worker_result": {"status": "draft_created"},
}
with (
patch(
"src.services.governance_dispatcher.get_active_for_event",
new=AsyncMock(return_value=None),
),
patch(
"src.services.governance_dispatcher.list_by_event",
new=AsyncMock(return_value=[succeeded_dispatch]),
) as mock_history,
patch(
"src.services.governance_dispatcher.create_dispatch",
new=AsyncMock(),
) as mock_create,
):
from src.services.governance_dispatcher import dispatch_governance_event
result = await dispatch_governance_event(event)
assert result is None
mock_history.assert_awaited_once_with("evt-001")
mock_create.assert_not_awaited()
@pytest.mark.asyncio
async def test_llm_failure_fallback_to_skip(self):
"""fusion adapter 拋 Exception → fallback skip不寫 dispatch返回 None。"""

View File

@@ -50,6 +50,7 @@ def test_km_review_payload_is_review_only():
assert "agent:Hermes" in payload.tags
assert "needs_owner_review" in payload.tags
assert "dispatch:dispatch-001" in payload.tags
assert "governance_event:event-001" in payload.tags
assert "writes_km_without_approval=false" in payload.content