diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index e1e45a7ed..15d0ce16c 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,43 @@ +## 2026-06-27 — 21:56 GitHub owner response preflight API 正式讀回完成 + +**背景**:上一段已把 GitHub target owner response request packet / templates / forbidden payloads 暴露成 read-only readiness;本段不是文件補充,而是新增正式 POST preflight API,讓 owner-provided redacted evidence refs 可以先被驗證,同時拒收 credential URL、repo creation command、secret-like value 與未允許欄位。 + +**完成內容**: +- 新增 `POST /api/v1/agents/github-target-owner-response-intake-preflight`。 +- API 只做 candidate owner response validation:`mode=validate_owner_response_only_no_persist_no_github_write`。 +- `apps/api/src/services/github_target_private_backup_evidence_gate.py` 新增 `preflight_github_target_owner_response_submission(...)`,依 committed templates / allowed fields / acceptable decisions / evidence refs / forbidden payloads 驗證。 +- 合法 `read_only_markdown_response` 可回 `ready_for_read_only_owner_response_intake`;含 private clone credential、GitHub token-like string、repo creation command、unsupported field 或 secret-like value 會回 `blocked_owner_response_intake_preflight`。 +- 回應固定經過 public LAN topology redaction;正式回應未命中 `192.168.0.`。 + +**本地驗證結果**: +- `python3 -m py_compile apps/api/src/services/github_target_private_backup_evidence_gate.py apps/api/src/api/v1/agents.py`:通過。 +- `DATABASE_URL=sqlite:///test.db PYTHONPATH=apps/api python3.11 -m pytest apps/api/tests/test_github_target_private_backup_evidence_gate.py apps/api/tests/test_github_target_private_backup_evidence_gate_api.py apps/api/tests/test_delivery_closure_workbench_api.py -q`:`10 passed`。 +- `python3.11 -m ruff check apps/api/src/services/github_target_private_backup_evidence_gate.py apps/api/src/api/v1/agents.py apps/api/tests/test_github_target_private_backup_evidence_gate.py apps/api/tests/test_github_target_private_backup_evidence_gate_api.py`:通過。 +- `git diff --check`:通過。 + +**Gitea / deploy 狀態**: +- code commit:`a68d9e40a feat(github): preflight owner response intake`。 +- deploy marker:`5b7bd55a9 chore(cd): deploy a68d9e4 [skip ci]`。 +- `code-review.yaml #3697` 成功;原 `cd.yaml #3696` 後續被更新的 main push supersede / cancel,但已產出 deploy marker。 +- 最新 `gitea-ssh/main=0624be08d` 已包含 `a68d9e40a`;目前尚未看到比 `5b7bd55a9` 更新且指向 `0624be08d` 的 deploy marker。 + +**production API readback**: +- `/api/v1/health?_v=a68d9e40-owner-preflight-final`:HTTP `200`、`status=healthy`、`environment=prod`、`mock_mode=false`。 +- valid POST:HTTP `200`、schema `github_target_owner_response_intake_preflight_v1`、status `ready_for_read_only_owner_response_intake`、`candidate_response_item_count=1`、`preflight_passed_response_item_count=1`、`preflight_blocked_response_item_count=0`、`accepted_for_read_only_intake=true`。 +- dangerous POST:HTTP `200`、status `blocked_owner_response_intake_preflight`、`preflight_passed_response_item_count=0`、`preflight_blocked_response_item_count=1`、`forbidden_payload_hit_count=4`、blockers 包含 `forbidden_payload_detected` 與 `unsupported_response_fields`。 + +**仍維持 0 / false**: +- valid / dangerous POST 皆維持 `owner_response_received_count=0`、`owner_response_accepted_count=0`、`safe_credential_accepted_evidence_count=0`。 +- `github_api_write_allowed=false`、`repo_creation_authorized=false`、`refs_sync_authorized=false`、`persist_submission_allowed=false`、`private_clone_url_collection_allowed=false`。 + +**未做**: +- 沒有 GitHub repo creation、visibility change、refs sync、workflow trigger、private clone URL collection、secret value collection 或 persistence。 +- 沒有 host / Docker / systemd / Nginx / firewall / K8s / DB / Wazuh runtime 寫操作;沒有 force push。 + +**完成度 / 下一步**: +- 本段「owner response intake preflight API / production readback」:`0% -> 100%`。 +- GitHub backup mirror governance 仍為 blocked;下一個 P0 是設計 no-secret persistence contract 或 workbench UI intake,但只能保存 redacted evidence refs 與 validation receipt,不能保存 private clone credential、secret value 或執行 GitHub write。 + ## 2026-06-27|MOMO daily-sales source absence readback 與 cold-start blocker **背景**:110 runner / StockPlatform smoke 壓力已止血後,重新跑全主機 cold-start scorecard 與資料 freshness。AWOOOI / IwoooS / Stock / 188 主要 public routes 可用,但整體 cold-start 仍不能宣告 full green;目前主要業務資料 blocker 是 188 MOMO daily sales freshness。