docs: BUTTON_DATA_INVALID 根治 + Gitea Code Review 修復 記錄
LOGBOOK + ADR-092 附錄 C — 2026-04-21 修復紀錄 E2E 驗證: telegram_approval_card_sent message_id=25045 (SignOzDown) ✓ Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -172,3 +172,33 @@ Grade: mature(90+) / in_progress(70-90) / starter(50-70) / initial(<50)
|
||||
| C4 | watchdog 不偵測鏈路斷裂 | W-4 缺失 | `_count_approved_playbooks()`;為 0 → TYPE-8M | de2d34d |
|
||||
|
||||
**架構鐵律**:`PlaybookSource.YAML_RULE` playbooks 是自動修復鏈路的「基礎設施」,evolver 的 trust-based 退場邏輯不得觸及此類 playbooks。
|
||||
|
||||
---
|
||||
|
||||
## 附錄 C:2026-04-21 — BUTTON_DATA_INVALID 根治 + Gitea Code Review 修復
|
||||
|
||||
**觸發**:Telegram 所有 `devops_tool` 類別告警卡片發送失敗(HTTP 400 BUTTON_DATA_INVALID)+ Gitea PR Code Review 顯示「AI 分析失敗」。
|
||||
|
||||
### Root Cause 鏈
|
||||
|
||||
| 症狀 | 斷點 | 根因 |
|
||||
|------|------|------|
|
||||
| Telegram 400 BUTTON_DATA_INVALID | `generate_callback_nonce` | UUID(36) + action(20) + ts(10) + rand(8) + colons = 77B > 64B Telegram 限制 |
|
||||
| Gitea PR "AI 分析失敗" | `_call_openclaw_code_review` | OpenClaw 只有 `/analyze/incident` 和 `/analyze/error`;`/analyze/code-review` 從未實作(404)|
|
||||
| Push review AttributeError | `_call_openclaw_push_review` | `local_code_review_service.review_push()` 回傳 dict,呼叫端對 dict 做屬性訪問(`analysis.issues`)|
|
||||
|
||||
### 修復
|
||||
|
||||
1. **nonce 壓縮** `security_interceptor.py` — `generate_callback_nonce` 用 base64url encode UUID bytes(36→22 chars);`parse_callback_data` 對應 decode;`host_restart_service` nonce = 63B
|
||||
2. **code review 改 local** `gitea_webhook_service.py` — `_call_openclaw_code_review` 改用 `local_code_review_service.review_pr()`(Ollama + Gemini fallback)
|
||||
3. **push review dict→model** `gitea_webhook_service.py` — `_call_openclaw_push_review` 加 dict→`CodeReviewResult` 轉換
|
||||
|
||||
### E2E 驗證(2026-04-21 21:57 台北)
|
||||
- `host_restart_service` nonce = 63B ✓,所有 7 個 actions ≤ 64B ✓
|
||||
- UUID round-trip decode = True ✓
|
||||
- `telegram_approval_card_sent` message_id=25045(SignOzDown devops_tool)✓ 無 BUTTON_DATA_INVALID
|
||||
|
||||
### Commits
|
||||
- `acab1cd` fix(gitea): code-review 改 local service + push review dict→CodeReviewResult
|
||||
- `bd73548` fix(telegram): BUTTON_DATA_INVALID nonce 超 64B 根因修復
|
||||
- `8fd31ec` fix(telegram): nonce UUID base64url 壓縮(徹底解決)
|
||||
|
||||
Reference in New Issue
Block a user