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:
Your Name
2026-04-21 21:58:48 +08:00
parent 0a72ae21e4
commit e2742ce9f3
2 changed files with 93 additions and 0 deletions

View File

@@ -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。
---
## 附錄 C2026-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 bytes36→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=25045SignOzDown 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 壓縮(徹底解決)