fix(governance): stop km healthcheck requeue
This commit is contained in:
@@ -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。"""
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user