docs(governance): record hermes km healthcheck rollout [skip ci]
This commit is contained in:
108
docs/LOGBOOK.md
108
docs/LOGBOOK.md
@@ -1,3 +1,111 @@
|
||||
## 2026-05-19|T90 Hermes KB healthcheck worker 與 owner review 閉環
|
||||
|
||||
**觸發**:
|
||||
|
||||
- T88/T89 已把 `knowledge_degradation` 事件接到 `governance_remediation_dispatch`,並讓事件詳情 / 歷史可看到 dispatch ids。
|
||||
- 但 `hermes_kb_growth_healthcheck` 仍停在 pending;Operator 只能知道「已派工」,看不到 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-19|T89 Governance events detail/history dispatch ids 接線
|
||||
|
||||
**觸發**:
|
||||
|
||||
Reference in New Issue
Block a user