From f8c290be631a5444f30ddb9e79837a565acce900 Mon Sep 17 00:00:00 2001 From: Your Name Date: Thu, 18 Jun 2026 20:16:20 +0800 Subject: [PATCH] =?UTF-8?q?docs(logbook):=20=E8=A8=98=E9=8C=84=E6=97=A5?= =?UTF-8?q?=E5=A0=B1=E6=9C=88=E5=A0=B1=20preview=20=E8=B3=87=E6=96=99?= =?UTF-8?q?=E6=BA=90=E6=B2=89=E6=BE=B1=20[skip=20ci]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/LOGBOOK.md | 30 +++++++++++++++++++ ...026-06-04-iwooos-security-governance-p0.md | 4 +-- 2 files changed, 32 insertions(+), 2 deletions(-) diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 276f17fe5..5b567c692 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,33 @@ +## 2026-06-18|P2-110B 日報 / 月報 no-send preview 顯示資料源沉澱 + +**背景**:P2-110 已讓週報 preview 顯示 source health、report-source-gap 與 KM / PlayBook / 腳本 / 排程 / Verifier 沉澱,但日報與月報仍沒有同一份 no-send preview API。這會讓「週報全 0」雖已能判讀,日報 / 月報與 Telegram 實發前檢查仍無法用同一套證據鏈回讀。 + +**完成內容**: +- `77fe2a85 fix(api): 在日報月報 preview 顯示資料源沉澱`。 +- `ReportGenerationService.format_daily_report()` 新增 `source_health` 參數,日報 HTML 會顯示 `報表資料源 / 沉澱`、source ok / total、confidence、source gap ids、KM / PlayBook / 腳本 / 排程 / Verifier 狀態與全 0 判讀。 +- `ReportGenerationService.send_daily_report()` 在既有發送流程前先讀取 `build_ai_agent_report_source_health(days=1)`;訊息會帶沉澱資訊,但本段沒有觸發 live send。 +- 新增 `ReportGenerationService.format_monthly_report_preview()`,月報草案固定顯示 no-send、實發 `0`、Gateway queue write `0` 與資料源沉澱。 +- 新增 `/api/v1/stats/daily/preview` 與 `/api/v1/stats/monthly/preview`,只讀回傳 formatted Telegram HTML preview,不寫 Gateway queue、不發 Telegram、不改排程。 +- `apps/api/tests/test_report_generation_service.py` 與 `apps/api/tests/test_weekly_report_preview_api.py` 補日報 / 月報 preview 與資產沉澱測試。 + +**驗證**: +- 本地:`py_compile` 通過。 +- 本地:`ruff check apps/api/src/services/report_generation_service.py apps/api/src/api/v1/stats.py apps/api/tests/test_report_generation_service.py apps/api/tests/test_weekly_report_preview_api.py` 通過。 +- 本地:`DATABASE_URL='postgresql+asyncpg://ci:ci@localhost/ci' PYTHONPATH=apps/api PYTHONFAULTHANDLER=1 python3.11 -m pytest apps/api/tests/test_report_generation_service.py apps/api/tests/test_weekly_report_preview_api.py apps/api/tests/test_ai_agent_report_source_health_api.py -q`:`40 passed`。 +- 本地:`git diff --check`、`SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`、`SECURITY_MIRROR_PROGRESS_GUARD_OK` 通過。 +- Deploy marker:`29fe6ec8 chore(cd): deploy 77fe2a8 [skip ci]`。 +- Production health:`/api/v1/health` 為 `healthy / prod / mock_mode=false`。 +- Production daily preview:`/api/v1/stats/daily/preview` 回 `200`,source `2/5`、confidence `40`、gaps `report-source-gap:incident_summary` / `report-source-gap:resolution_stats` / `report-source-gap:ai_performance`;formatted preview 可見 `報表資料源 / 沉澱`、`來源: `、KM、PlayBook、腳本、排程、Verifier 與 `不自動改排程`。 +- Production weekly preview:`/api/v1/stats/weekly/preview` 維持 source `2/5`、confidence `40` 與同一批沉澱內容。 +- Production monthly preview:`/api/v1/stats/monthly/preview` 回 `200`,report month `2026-06`、source `2/5`、confidence `40`、no-send preview `3`、同一批 gaps;formatted preview 可見 `月報 no-send preview`、`實發: 0`、`不代表已授權發送或自動修復`。 + +**完成度同步**: +- P2-110B 日報 / 月報 no-send preview source health:本地 `100%`、正式 API `100%`。 +- 日報 / 週報 / 月報產品化總控:`68% -> 76%`;日報、週報、月報 preview 已統一顯示 source gap 與沉澱,仍需接 SRE digest route、source gap 專屬 PlayBook、Verifier readback 與 receipt gate。 +- IwoooS 整體仍維持 `64%`,active runtime gate 仍 `0`。 + +**邊界**:本段沒有 live send Telegram、沒有寫 Gateway queue、沒有改排程、沒有呼叫 Bot API、沒有讀 secret、沒有 production write、沒有啟動 AI runtime、沒有提高 runtime gate。日報 / 月報 preview 可見不等於已批准實發或自動修復。 + ## 2026-06-18|P2-110 週報 no-send preview 顯示資料源沉澱 **背景**:P2-109 已讓 `/zh-TW/reports` 與 `agent-report-source-health` 看見 source health、no-send preview 與 KM / PlayBook / 腳本 / 排程 / Verifier 沉澱,但正式 `/api/v1/stats/weekly/preview` 仍只回告警、AI、commit、deploy 等數字。這會讓操作員在 Telegram 週報草案 / API preview 看不到資料源缺口與沉澱狀態,仍會誤以為全 0 就是健康。 diff --git a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md index a846e4ed4..1625fa260 100644 --- a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md +++ b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md @@ -62,7 +62,7 @@ | Knowledge Base KM 自動化掌控台 / 資產沉澱可視化 | 本地 `100%`;正式站 desktop / mobile `100%` | 是,僅限 KM governance readback、Owner Review queue、資產沉澱總帳與 Work Items 接續入口 | `/zh-TW/knowledge-base` 已把 `KM 自動化掌控台` 前移到首屏,直接顯示 stale ratio `98.8%`、stale KM `1,900`、Owner Review `10`、`ready 10 / blocked 0`、已寫回 `1`、治理流程圖與 `KM / PlayBook / 腳本 / 排程 / Verifier` 五類沉澱狀態;不寫 KM、不提升 PlayBook trust、不批次完成 owner review、不開 runtime gate | | Observability AI 自動化資產與訊號總帳 | 本地 `100%`;正式站 desktop / mobile `100%` | 是,僅限主機 / 專案 / 網站 / 服務 / 監控訊號 / KM / PlayBook / Verifier / SRE 路由 readback | `/zh-TW/observability` 已把 `AI 自動化資產與訊號總帳` 前移到首屏,6 張卡顯示全域資產、監控訊號、服務健康、KM / PlayBook / Verifier、SRE 戰情室、Runtime Gate;總帳區操作入口 `0`,不 live probe、不 reload、不改規則、不發 Telegram、不套用修復 | | Tenants 全域產品 / 網站 / 來源資產地圖 | 本地 `100%`;正式站 desktop / mobile `100%` | 是,僅限產品 / 專案、網站 / 服務入口、來源範圍、租戶資料與 gate readback | `/zh-TW/awooop/tenants` 已把 `全域資產地圖` 前移到首屏,直接顯示 `57` 個可視資產、`16 個產品 / 專案`、`31 個網站 / 服務入口`、`10 個來源範圍`、分類堆疊、route chips、主要來源就緒、已接受回覆、執行閘門與操作入口;不改租戶政策、不改路由、不部署、不掃描、不建立 repo、不開 runtime gate | -| 日報 / 週報 / 月報與 AI Agent 報表資料鏈路 | Weekly report 資料缺口止血本地 `100%`、正式部署 `100%`;Reports 總控正式站 `100%`;P2-109 source health read model 正式站 `100%`;P2-110 weekly no-send preview 正式站 `100%`;報表產品化總控 `68%` | 是,僅限資料源 truthfulness、全 0 判讀、Reports 首屏總控、no-send preview、資產沉澱與下一步工作項 | `ac325852` / deploy marker `a4b30964` 已修正週報 Git 活動讀取失敗時假性輸出 `0`;`6d4fa7bf` / `5e849225` / `63a75f77` 已把 `/zh-TW/reports` 改成 `報表 / 告警 AI 接管總控`;`27d9f394` / deploy marker `d8862123` 新增 `agent-report-source-health`;`a46e31ba` / `48e06c6a` / deploy marker `3057342a` 已讓 `/api/v1/stats/weekly/preview` 回傳 source `2/5`、confidence `40`、三個 `report-source-gap:*`、`formatted_preview` 與 KM / PlayBook / Verifier 沉澱;仍需把同一 read model 接進日報、月報、SRE digest route、source gap PlayBook 與 verifier,不發 live Telegram、不改排程、不開 runtime gate | +| 日報 / 週報 / 月報與 AI Agent 報表資料鏈路 | Weekly report 資料缺口止血本地 `100%`、正式部署 `100%`;Reports 總控正式站 `100%`;P2-109 source health read model 正式站 `100%`;P2-110 weekly no-send preview 正式站 `100%`;P2-110B daily / monthly no-send preview 正式站 `100%`;報表產品化總控 `76%` | 是,僅限資料源 truthfulness、全 0 判讀、Reports 首屏總控、no-send preview、資產沉澱與下一步工作項 | `ac325852` / deploy marker `a4b30964` 已修正週報 Git 活動讀取失敗時假性輸出 `0`;`6d4fa7bf` / `5e849225` / `63a75f77` 已把 `/zh-TW/reports` 改成 `報表 / 告警 AI 接管總控`;`27d9f394` / deploy marker `d8862123` 新增 `agent-report-source-health`;`a46e31ba` / `48e06c6a` / deploy marker `3057342a` 已讓 weekly preview 回傳 source `2/5`、confidence `40`、三個 `report-source-gap:*` 與 KM / PlayBook / Verifier 沉澱;`77fe2a85` / deploy marker `29fe6ec8` 已讓 daily / monthly preview 也回傳同一 source health、formatted preview 與 KM / PlayBook / 腳本 / 排程 / Verifier 沉澱;仍需接 SRE digest route、source gap PlayBook 與 verifier,不發 live Telegram、不改排程、不開 runtime gate | | Telegram 監控告警 / 批准執行真相鏈 | outbound 主鏈路 `100%`;批准後執行止血 `100%`;no-action 人工處置包 D0 `100%`;MCP / PlayBook 修復候選 D5 `88%`;Approvals / Runs / Alerts / Knowledge Base / Observability / Tenants / Telegram 告警卡資產沉澱矩陣 `100% / desktop 100% / 100% / 100% / 100% / 100% / formatter+deploy 100%`;治理長期項 `98%` | 是,僅限候選產生、阻擋原因、人工草案包、AwoooP 工作項可追蹤性、Work Items 詳細接手板、Approvals / Runs / Alerts / Knowledge Base / Observability / Tenants / Telegram 告警卡資產沉澱欄與 coverage gap metadata | 已修復 Alertmanager tenant context、既有 approval 收斂告警 recurrence、AI 分析中重複告警 recurrence、no-action approval 誤導執行、可執行修復 execution / KM / verifier 紀錄、no-action 人工處置包、MCP evidence / PlayBook trust 候選產生、通用兜底 / 診斷型 PlayBook 阻擋理由、缺候選時的 PlayBook 草案欄位 / 下一步 / AwoooP work item 入口與詳細處置板、blocked result 的服務 coverage gap / blocking stage / required MCP evidence refs,以及 Approvals / Runs / Alerts / Knowledge Base / Observability / Tenants / Telegram 告警卡的 `KM / PlayBook / 腳本 / 排程 / Verifier` 資產沉澱矩陣;完整自動修復飛輪仍需用真實告警驗證 approval -> execution -> verifier -> KM / PlayBook trust 全鏈,不調高 runtime gate | ## 2. P0 工作拆解與優先順序 @@ -86,7 +86,7 @@ | P0-7 | Telegram 批准後執行真相鏈止血 | 100% | no-action approval 不再顯示批准 / 執行中;可執行修復 approval 會寫入 `auto_repair_executions`、KM 與 verifier;下一步補 MCP evidence / PlayBook trust 產生真正修復候選 | 目標 pytest `125 passed`、py_compile、guard、production health、API / worker rollout、production pod classifier readback | | P0-8 | Telegram no-action 人工處置包與操作入口 | 100% | no-action 卡片已新增人工處置包、證據補齊清單、AwoooP 修復候選建立步驟、verifier / KM / PlayBook 回寫提醒,並改成 `處置包`、`重診`、`歷史`、`靜默`、`真相鏈`、`Runs` 鍵盤;舊訊息不 retroactive 改寫 | 目標 pytest `64 passed + 44 passed`、py_compile、guard、production health、API / worker rollout、production pod render / keyboard smoke | | P0-9 | MCP evidence -> PlayBook 修復候選產生 | D5 `88%`;Approvals ledger `100%`;Runs ledger desktop `100%`;Alerts ledger desktop / mobile `100%` | 已補 webhook fallback 先建立 incident,再收 MCP evidence、查 approved PlayBook、檢查 trust / command safety、產生 medium approval candidate 與 verifier plan;D1 追加通用兜底 PlayBook / 診斷型命令不可誤當修復、阻擋理由繁中化;D2 在缺候選時產生 `repair_candidate_draft_package_v1`、`playbook_draft_required`、下一步與必填欄位;D3 新增 `awooop_repair_candidate_draft_work_item_v1` read-only projection 與 Telegram `工作項目` deeplink;D4 讓 AwoooP Work Items 詳細呈現 PlayBook 草案處置板、必填欄位、阻擋原因、下一步、Runs / 審批連結;D5 新增 `repair_candidate_coverage_gap_v1`,讓 blocked result 帶出 coverage key、target kind、blocking stage、必收 MCP evidence refs、PlayBook template fields 與 runtime 0 / false 邊界;Approvals / Runs / Alerts 已新增 `資產沉澱` 欄或焦點矩陣,可直接看到 KM / PlayBook / 腳本 / 排程 / Verifier 的完成與卡點;下一步要補 Runs mobile smoke,並把同一總帳接到正式 Telegram 告警卡、Observability 與 Tenants,用真實告警驗證 approval -> execution -> verifier -> KM / PlayBook 回寫 | Approvals code `dafe5342` 已隨 deploy marker `42c08ece` 正式站 desktop / mobile smoke;Runs code `11c2b5d4` 已隨 deploy marker `8b6ab87c` 正式站 desktop DOM smoke;Alerts code `10cd6167` 已隨 deploy marker `d36d764a` 正式站 desktop / mobile DOM smoke;P2-407 API production readback `overall_completion_percent=100`;status-chain 後續仍必須看到 tool call、PlayBook id、risk gate、repair candidate、verifier plan | -| P0-9a | 日報 / 週報 / 月報資料鏈路 truthfulness | 68% | Weekly report 已修正 Git 活動讀取失敗時假性全 0 的問題;Reports 頁已前移資料可信度、資料源健康矩陣、日週月報 cadence、告警到 AI 接手漏斗、自動化資產沉澱與 Agent 工作量;P2-109 已建立 `agent-report-source-health` / no-send preview read model;P2-110 已讓 weekly preview API 回傳 formatted Telegram HTML、source `2/5`、三個 source gap 與 KM / PlayBook / 腳本 / 排程 / Verifier 沉澱;下一步把同一 read model 接進日報、月報、SRE digest route、source gap PlayBook 與 verifier | Feature commit `ac325852`、Reports commits `6d4fa7bf` / `5e849225` / `63a75f77`、P2-109 commit `27d9f394`、P2-110 commits `a46e31ba` / `48e06c6a`、deploy markers `a4b30964` / `4d4c6da3` / `cd1c4407` / `d8862123` / `c922bc1a` / `3057342a`;production `/api/v1/agents/agent-report-source-health` 與 `/api/v1/stats/weekly/preview` readback OK;未 live send Telegram、未改排程、未開 runtime gate | +| P0-9a | 日報 / 週報 / 月報資料鏈路 truthfulness | 76% | Weekly report 已修正 Git 活動讀取失敗時假性全 0 的問題;Reports 頁已前移資料可信度、資料源健康矩陣、日週月報 cadence、告警到 AI 接手漏斗、自動化資產沉澱與 Agent 工作量;P2-109 已建立 `agent-report-source-health` / no-send preview read model;P2-110 已讓 weekly preview API 回傳 formatted Telegram HTML、source `2/5`、三個 source gap 與 KM / PlayBook / 腳本 / 排程 / Verifier 沉澱;P2-110B 已讓 daily / monthly preview API 也回傳同一 source health、formatted Telegram HTML、source gap、KM / PlayBook / 腳本 / 排程 / Verifier 與 no-send 邊界;下一步接 SRE digest route、source gap PlayBook 與 verifier | Feature commit `ac325852`、Reports commits `6d4fa7bf` / `5e849225` / `63a75f77`、P2-109 commit `27d9f394`、P2-110 commits `a46e31ba` / `48e06c6a`、P2-110B commit `77fe2a85`、deploy markers `a4b30964` / `4d4c6da3` / `cd1c4407` / `d8862123` / `c922bc1a` / `3057342a` / `29fe6ec8`;production `/api/v1/agents/agent-report-source-health`、`/api/v1/stats/daily/preview`、`/api/v1/stats/weekly/preview`、`/api/v1/stats/monthly/preview` readback OK;未 live send Telegram、未改排程、未開 runtime gate | | P0-10 | 高價值配置 Gate path coverage、工作樹 preflight、owner packet / coverage snapshot 補強 | 100% | 已將 `k8s/nginx/**`、`scripts/ops/**/*cert*`、`scripts/ops/**/*tls*` 納入 `high-value-config-change-gate.py`,讓 Nginx public gateway 與 DNS / TLS / certbot 既有路徑命中 P0 / C0;預設模式可讀取 staged / unstaged / untracked,避免本地 preflight 漏掉未提交配置;owner packet 與 coverage snapshot 已同步最新 pattern;owner evidence 仍未提供,runtime execution 仍 false | Gate sample:`changed_files=6 matched=6 categories=3 c0=2 c1=0`;工作樹 smoke:臨時 `k8s/nginx/*` 檔命中 C0;owner packet:`packets=3 c0=2 runtime_gate=0`;coverage:`categories=14 c0=8 avg=67 runtime_gate=0`;`py_compile`、snapshot JSON parse、progress guard、owner response guard、doc secret sanity、diff check | | P0-11 | 高價值配置 Owner Packet 前台同步 | local 100%;production 100% | `/zh-TW/iwooos` 與 `/zh-TW/awooop` 已同步 latest owner packet snapshot,顯示 `packet=3 / c0=2`、Nginx public gateway、DNS / TLS / certbot 與 security tooling 影響範圍;request sent、received、accepted、runtime gate 與 action buttons 仍全部為 `0` | Feature commit `e999c16b`、deploy marker `16c6b983`、Gitea code-review `2973` / CD `2972` success;本地與正式 desktop / mobile / in-app browser smoke:IwoooS 與 AwoooP 均 HTTP `200`、必要文字與 boundary keys 可見、水平溢位 `0`、卡片內操作控制 `0`、危險連結 `0`、工作溝通片語命中 `0`;headline 不提高 | | P0-12 | IwoooS posture projection Owner Packet count sync | 100% | `iwooos-posture-projection.snapshot.json` 與 schema 已從舊 `packet=1 / c0=0` 同步為 `packet=3 / c0=2`,避免 committed projection 與前台 / owner packet snapshot 分叉;request / received / accepted / runtime gate 仍為 `0` | `security-mirror-progress-guard.py` expectation 已同步;後續驗證以 JSON parse、schema parse、progress guard、owner response guard、doc secret sanity、diff check 為準;不需要 production browser smoke |