docs(governance): record hermes km healthcheck rollout [skip ci]

This commit is contained in:
Your Name
2026-05-19 23:16:45 +08:00
parent 07744bf83d
commit 9c122a4a37

View File

@@ -1,3 +1,111 @@
## 2026-05-19T90 Hermes KB healthcheck worker 與 owner review 閉環
**觸發**
- T88/T89 已把 `knowledge_degradation` 事件接到 `governance_remediation_dispatch`,並讓事件詳情 / 歷史可看到 dispatch ids。
-`hermes_kb_growth_healthcheck` 仍停在 pendingOperator 只能知道「已派工」,看不到 Hermes 是否真的建立 KM 草稿、是否已進 owner review、或是否需要人工介入。
**修正**
- 新增 `src.jobs.hermes_kb_growth_worker`
- 消費 `executor_type=hermes_kb_growth_healthcheck` 的 pending dispatch。
- 依狀態機推進 `pending → dispatched → executing → succeeded`
- 建立 `auto_runbook / review / ai_extracted` 的 KM 草稿,停在 owner review。
- 寫回 `decision_context.worker_result``workflow.kb_draft_entry_id``workflow.current_stage=waiting_owner_review`
- 明確保留安全邊界:`writes_km_without_approval=false`,不自動批准、不自動發布正式 KM。
- `main.py` 啟動 Hermes KB growth loop每 5 分鐘消費 backlog。
- `governance_remediation_dispatch_repo` 新增 `list_pending_by_executor()``update_decision_context()`,避免 job 直接散落 SQL。
- production smoke 抓到 `knowledge_entries.tags` 實際是 JSON 欄位,不支援 `json @> text`;修正 `KnowledgeDBRepository.list_entries(tags=...)` 改用 JSON/JSONB 皆相容的 quoted tag filter。
- production smoke 又抓到 `succeeded / waiting_owner_review` 後 dispatcher 仍會因事件 unresolved 重複 requeue補上 `GovernanceDispatcher._has_kb_growth_review_draft()`,同一 event 已有 Hermes review draft 後不再補 pending。
- worker 冪等 key 改以 `governance_event:{event_id}` 優先,避免一個 governance event 因 retry/requeue 產生多份 KM 草稿。
**Local verification**
```text
python -m py_compile apps/api/src/jobs/hermes_kb_growth_worker.py apps/api/src/repositories/governance_remediation_dispatch_repo.py apps/api/src/repositories/knowledge_repository.py apps/api/src/services/governance_dispatcher.py apps/api/src/main.py
-> ok
pytest apps/api/tests/test_hermes_kb_growth_worker.py -q
-> 3 passed第一版
pytest apps/api/tests/test_hermes_kb_growth_worker.py apps/api/tests/test_km_writer.py apps/api/tests/test_km_writer_idempotent.py -q
-> 28 passed
pytest apps/api/tests/test_hermes_kb_growth_worker.py apps/api/tests/test_governance_dispatcher.py -q
-> 23 passed
pytest apps/api/tests/test_governance_agent.py apps/api/tests/test_governance_dispatcher.py apps/api/tests/test_ai_governance_endpoints.py apps/api/tests/test_hermes_kb_growth_worker.py -q
-> 74 passed
pytest apps/api/tests/test_governance_remediation_dispatch.py -q
-> 29 passed
ruff F/E9 selected files
-> All checks passed
git diff --check
-> pass
```
**Production deploy / smoke完成**
```text
Code commits:
edf97ad8 feat(governance): process hermes km healthchecks
de6dbe07 fix(knowledge): query tags on json columns
8342cfa4 fix(governance): stop km healthcheck requeue
Deploy markers:
53f87375 chore(cd): deploy edf97ad [skip ci]
ac0d2329 chore(cd): deploy de6dbe0 [skip ci]
07744bf8 chore(cd): deploy 8342cfa [skip ci]
Gitea Actions:
1873 Code Review -> success
1872 CD -> success
1875 Code Review -> success
1874 CD -> success
1877 Code Review -> success
1876 CD -> success
K8s image:
awoooi-api / awoooi-web -> 192.168.0.110:5000/awoooi/*:8342cfa46078dd6d0f092beb93eedb64b43b42ab
GET https://awoooi.wooo.work/api/v1/health
-> healthy, prod, mock_mode=false
Worker evidence:
-> hermes_kb_growth_loop_started
-> hermes_kb_growth_once_completed scanned=14 processed=14 failed=0
-> hermes_kb_growth_once_completed scanned=11 processed=11 failed=0
-> hermes_kb_growth_review_draft_ready emitted with workflow_stage=waiting_owner_review
-> no UndefinedFunctionError after JSON tag hotfix
GET /api/v1/knowledge?entry_type=auto_runbook&status=review&q=KM%20healthcheck&limit=40
-> total=85
-> newest items created_by=hermes_kb_growth_worker
-> status=review, title=KM healthcheck review draft - <event-prefix>
GET /api/v1/ai/governance/queue?dispatch_status=pending&event_type=knowledge_degradation&size=50
-> first sample pending_total=0
-> second sample after 90s pending_total=0
GET /api/v1/ai/governance/queue?dispatch_status=succeeded&event_type=knowledge_degradation&size=50
-> succeeded_total=113
-> workflow_stage=waiting_owner_review
-> next_action=owner_review_km_draft
```
**已知技術債**
- 第一版 worker 在 production JSON tag 查詢錯誤下造成 failed dispatch rows後續 hotfix 已停止錯誤並把新 work item 推進到 `waiting_owner_review`;舊 failed rows 保留作為 audit trail不回寫刪除。
- 在 requeue hotfix 部署前已產生部分重複 KM review draft目前新 worker 以 governance event tag 冪等,後續不再為同一 event 產生多份草稿。下一段應補前端去重/治理清理視圖,讓 owner 看到 canonical draft。
- `AiGovernanceEvent.resolved` 仍未自動關閉,這是刻意保留:`waiting_owner_review` 代表 Hermes 已完成草稿,不代表 KM stale ratio 已恢復到 20% 以下。
**目前整體進度**
- AwoooP 告警可觀測鏈:約 99%。
- 低風險自動修復閉環:約 95%。
- 前端 AI 自動化管理介面同步:約 95.5%。
- 治理告警可讀性 / 可處置性:約 96.5%。
- AI Agent ownership 可追溯性:約 95%。
- KM healthcheck 派工可追蹤性:約 98%。
- Hermes KB growth 草稿 / owner review 閉環:約 93%。
- 完整 AI 自動化管理產品化:約 93.8%。
## 2026-05-19T89 Governance events detail/history dispatch ids 接線
**觸發**