diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index af80ce23e..3ff908318 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,30 @@ +## 2026-06-05|S4.9 Canonical Owner Response Envelope 規範 + +**背景**:接續 S4.9 owner response gate 現況缺口稽核,本段處理「欄位同義詞混用」問題。`P1-001 runtime surface inventory` 仍由另一個 AwoooP Session 推進中,本視窗只做平行安全的 docs-only 規範,不碰 runtime surface schema / API / UI,不送 request、不收 owner response、不改 Gitea / GitHub / refs / workflow / secret / runner / runtime。 + +**本輪完成**: +- 新增 `docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`:固定六欄 canonical envelope:`owner_role_or_team`、`decision`、`decision_reason`、`affected_scope`、`redacted_evidence_refs`、`followup_owner`。 +- 補齊 source template alias mapping:`affected_repos`、`affected_sources`、`canonical_namespace`、`evidence_refs`、`review_owner` 等欄位可保留在 source template,但收件 / 顯示 / LOGBOOK 必須映射回六欄。 +- 補五題 canonical 投影、quarantine-first 規則與 reviewer checklist,避免把 request template、owner 回覆候選、AwoooP approval 或 UI 可見誤讀成資安批准。 +- 更新 `docs/workplans/2026-06-04-iwooos-security-governance-p0.md`:最新 `gitea/main=b615bde5`、P0-2d 完成度、規範分析與驗證紀錄。 + +**完成度更新**: +- S4.9 canonical owner response envelope:`100%`。 +- S4.9 owner response gate:仍 `0%`;`request_sent=false`、received `0`、accepted `0`、rejected `0`。 +- IwoooS 整體:維持 `64%`;active runtime gate 維持 `0`。 +- 本輪不調高 GitHub primary readiness、不調高 runtime landing、不新增 action button、不宣稱 production 行為變更。 + +**驗證**: +- `git diff --check`:通過。 +- `python3 scripts/security/source-control-owner-response-guard.py --root .`:`SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`。 +- `python3 scripts/security/security-mirror-progress-guard.py --root .`:`SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `rg` 抽查高風險誤寫:沒有 request sent / received / accepted / runtime execution / GitHub primary switch 被誤標成已通過。 +- 本段是純文件規範,不改前端、不改 API、不新增 deploy;不需要新的 production desktop / mobile smoke。 + +**下一步**: +- S4.9 真正推進仍需 owner 以脫敏 metadata 回覆 5 題,並逐步通過 canonical envelope、quarantine-first、cross-packet consistency 與 reviewer checklist。 +- 推送後同步另一個 AwoooP Session,提醒 P1-001 提交前先 fetch / fast-forward 到最新 `gitea/main`,避免 LOGBOOK / workplan 衝突。 + ## 2026-06-05|S4.9 Owner Response Gate 現況缺口稽核 **背景**:`P1-001 runtime surface inventory` 已由另一個 AwoooP Session 推進中;本視窗為避免同檔案衝突,改推平行安全的 P0:S4.9 owner response gate 現況缺口稽核。這是 committed snapshot / 文件只讀稽核,不收 owner response、不送 request、不改 Gitea / GitHub、不碰 refs / workflow / secret / runner / runtime。 diff --git a/docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md b/docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md new file mode 100644 index 000000000..02b130d37 --- /dev/null +++ b/docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md @@ -0,0 +1,126 @@ +# S4.9 Canonical Owner Response Envelope 規範 + +| 項目 | 內容 | +|------|------| +| 日期 | 2026-06-05 | +| 基準 | `gitea/main=b615bde5 docs(security): 補 S4.9 owner response 缺口稽核 [skip ci]` | +| 範圍 | S4.9 owner response 收件信封、欄位別名、隔離規則與驗收前狀態邊界 | +| 模式 | 只讀文件規範,不送 request、不收 owner response、不改 API、不改 UI、不改 runtime | +| 不可誤讀 | 本文件不是 request sent、不是 owner response received、不是 accepted、不是 Gitea / GitHub / refs / workflow / secret / runner / runtime 授權 | + +## 1. 核心結論 + +S4.9 收件流程對外只接受一個 canonical owner response envelope。任何 source template、AwoooP handoff、reviewer note 或文件摘要,都可以保留細分欄位,但進入 S4.9 驗收前必須映射回六欄: + +1. `owner_role_or_team` +2. `decision` +3. `decision_reason` +4. `affected_scope` +5. `redacted_evidence_refs` +6. `followup_owner` + +沒有完成六欄映射前,不得把候選回覆視為 received;沒有完成預檢、隔離檢查、跨包一致性與 reviewer checklist 前,不得視為 accepted。 + +## 2. Canonical Envelope + +| 欄位 | 必填 | 允許格式 | 缺漏處理 | 安全邊界 | +|------|------|----------|----------|----------| +| `owner_role_or_team` | 是 | 角色、團隊、責任單位;不需要個人敏感資料 | `request_more_evidence`,不增加 received | 不收個人帳號密碼、token、session、private email | +| `decision` | 是 | `confirm`、`defer`、`reject`、`request_more_evidence` | 非允許值 `hard_reject` | 不得包含執行命令或批准 runtime action | +| `decision_reason` | 是 | 一段脫敏摘要;可含 ticket id、文件路徑、hash、短原因 | 缺漏補件;疑似敏感 payload 先隔離 | 不渲染 raw secret、token、cookie、authorization header、未脫敏截圖 | +| `affected_scope` | 是 | repo 群、endpoint、namespace、host scope、legacy disposition、canonical owner 範圍 | 缺漏補件 | 不得把 scope 回覆解讀成 repo 建立、refs sync 或 primary 切換 | +| `redacted_evidence_refs` | 是 | 文件路徑、snapshot id、ticket id、hash、脫敏 metadata pointer | 缺漏補件;疑似 payload 隔離 | 不收 secret value、masked token、partial token、private key、session value | +| `followup_owner` | 是 | 後續補證、審查或決策負責角色 / 團隊 | 缺漏補件 | 不等於執行批准人;不等於 runtime operator | + +## 3. Source Template Alias 映射 + +Source template 可以保留 domain-specific 欄位,方便 owner 回覆,但 S4.9 validator、AwoooP 顯示與 LOGBOOK 摘要必須使用 canonical 欄位。 + +| Canonical 欄位 | 可接受 alias | 映射規則 | 不可誤讀 | +|----------------|--------------|----------|----------| +| `owner_role_or_team` | `owner_role`、`owner_team`、`review_owner`、`responsible_team`、`rollback_owner` | 合併為負責角色 / 團隊;個人資訊只保留必要角色稱謂 | 不代表該 owner 已批准切 primary 或執行 rollback | +| `decision` | `owner_decision`、`scope_decision`、`visibility_decision`、`canonical_decision`、`disposition` | 只能轉成四個允許值;其他值需補件或拒收 | `confirm` 只代表該題判定,不代表全包 accepted | +| `decision_reason` | `reason`、`decision_summary`、`owner_note`、`review_note`、`rationale` | 只保留脫敏摘要;含 payload 的段落移入 quarantine metadata,不回寫 raw text | 不得把長原文、聊天內容或抱怨放進產品文案 | +| `affected_scope` | `affected_repos`、`affected_sources`、`affected_repos_or_sources_or_namespace`、`canonical_namespace`、`target_repos`、`host_scope`、`legacy_scope` | 以人類可讀 scope 摘要呈現;必要時列出 repo / source ids,但不觸發任何 git action | 不代表可建立 repo、同步 refs、改 visibility、改 workflow | +| `redacted_evidence_refs` | `evidence_refs`、`redacted_refs`、`source_refs`、`snapshot_refs`、`ticket_refs`、`metadata_refs` | 只接受指標與脫敏 metadata;任何 raw payload 先隔離 | 不收 token value、secret value、hash fragment、authorization header、runner token | +| `followup_owner` | `next_owner`、`followup_team`、`reviewer_owner`、`fallback_owner`、`resolution_owner` | 映射為後續處理負責角色 / 團隊 | 不代表 AwoooP approval 或 security approval 已完成 | + +## 4. 五題 Template 的 Canonical 投影 + +| 順序 | Template | `affected_scope` 投影 | `decision` 判讀 | `redacted_evidence_refs` 最低要求 | +|------|----------|------------------------|-----------------|-----------------------------------| +| 1 | `response-public-only-vs-local-gitea-gap` | public-only / local Gitea scope、候選 repo、是否納入 inventory | `confirm`、`defer`、`reject`、`request_more_evidence` | public probe snapshot、local inventory ref、owner note id | +| 2 | `response-org-user-endpoint-identity` | `wooo` user / org endpoint、canonical endpoint、blocked endpoint 判讀 | 同上 | endpoint probe summary、HTTP status metadata、owner note id | +| 3 | `response-internal-110-adjacent-scope` | 110 adjacent repo / host / namespace 是否 in scope | 同上 | local repo / host scope snapshot、redacted owner note | +| 4 | `response-repo-owner-canonical-scope` | repo owner、canonical source、GitHub target candidate、visibility review owner | 同上 | refs truth summary、target probe summary、owner note id | +| 5 | `response-legacy-or-inaccessible-disposition` | legacy / inaccessible / external repo disposition 與後續 owner | 同上 | disposition note、archive candidate summary、ticket id | + +## 5. 收件狀態分離 + +S4.9 必須把以下狀態分開,不得連動調高: + +| 狀態 | 可為 true / 大於 0 的前提 | 不得連動 | +|------|---------------------------|----------| +| `request_sent` / `request_sent_count` | 有人工送件 audit metadata,且送件內容未夾帶執行要求 | 不得同步調高 received / accepted | +| `received_response_count` | 收到完整六欄 canonical envelope,且敏感 payload 已先隔離 | 不得同步視為 accepted | +| `accepted_response_count` | 五題都通過 preflight、quarantine check、cross-packet consistency、reviewer checklist | 不得開 runtime gate | +| `rejected_response_count` | 實際回覆被 hard reject,且 rejection reason 已記錄 | 不得自動要求 repo / host / runtime action | +| `quarantine_response_count` | 疑似包含敏感 payload、執行要求或未脫敏 evidence | 不得渲染 raw payload,不得複製到 LOGBOOK | + +## 6. Quarantine-first 規則 + +以下內容一律先隔離,不得進入一般文件、LOGBOOK、前端文案或 API response: + +| 類別 | 範例 | 處理 | +|------|------|------| +| Secret / credential | token、secret、private key、cookie、session、authorization header、runner token、webhook secret、database URL | 隔離並記錄類型與長度,不記值 | +| 未脫敏 evidence | 未遮蔽截圖、raw API response、含 private URL credential 的 log | 隔離,只保留 redacted evidence ref | +| 執行要求 | 建 repo、改 visibility、sync refs、delete refs、force push、改 workflow、啟 runner、Kali scan、`/execute`、host update | `hard_reject` 或切出獨立人工批准流程 | +| 產品文案污染 | 內部對話、抱怨、Session 指令、聊天式同意 | 不進產品文案;只保留治理摘要 | + +## 7. Reviewer Checklist + +收件 reviewer 在標記 accepted 前必須逐項確認: + +| 檢查 | 必須結果 | +|------|----------| +| 六欄 canonical envelope | 全部存在且可讀 | +| 五題 response templates | 全部有對應回覆或明確補件狀態 | +| Alias mapping | 所有 source 欄位已映射回 canonical 欄位 | +| Sensitive payload check | raw payload 已隔離,LOGBOOK / UI 只保留 redacted refs | +| Execution request check | 沒有 repo / refs / workflow / secret / runner / scan / host / runtime 執行要求 | +| Cross-packet consistency | S4.9 / S4.10 / S4.11 / S4.12 口徑一致,沒有互相矛盾的 owner / scope / disposition | +| Count transition | request sent、received、accepted、rejected 只依實際 audit metadata 分段更新 | +| Gate boundary | active runtime gate、GitHub primary、Kali / host maintenance、Code Review candidate automation 仍需獨立人工批准 | + +## 8. 驗收前仍必須維持 + +```text +request_sent=false +request_sent_count=0 +received_response_count=0 +accepted_response_count=0 +rejected_response_count=0 +owner_response_received_count=0 +owner_response_accepted_count=0 +redacted_payload_ingested=false +active_runtime_gate_count=0 +runtime_execution_authorized=false +action_buttons_allowed=false +repo_creation_authorized=false +refs_sync_authorized=false +workflow_modification_authorized=false +github_primary_switch_authorized=false +host_update_authorized=false +active_scan_authorized=false +secret_value_collection_authorized=false +``` + +## 9. 本輪完成度 + +| 工作 | 完成度 | 說明 | +|------|--------|------| +| Canonical owner response envelope | 100% | 六欄信封、alias 映射、五題投影、quarantine-first、reviewer checklist 已文件化 | +| S4.9 owner response gate | 0% | 尚未送 request、尚未收到 owner response、尚未 accepted | +| IwoooS 整體 | 維持 64% | 規範完成不代表 runtime readiness 提升 | +| active runtime gate | 0 | 不變 | diff --git a/docs/security/S4-9-OWNER-RESPONSE-GATE-CURRENT-GAP-AUDIT.md b/docs/security/S4-9-OWNER-RESPONSE-GATE-CURRENT-GAP-AUDIT.md index d1e8636f0..a9cadf8a7 100644 --- a/docs/security/S4-9-OWNER-RESPONSE-GATE-CURRENT-GAP-AUDIT.md +++ b/docs/security/S4-9-OWNER-RESPONSE-GATE-CURRENT-GAP-AUDIT.md @@ -3,7 +3,7 @@ | 項目 | 內容 | |------|------| | 日期 | 2026-06-05 | -| 基準 | `gitea/main=f1bad81d docs(logbook): 記錄 P1-305 P1-306 正式驗證 [skip ci]` | +| 基準 | `gitea/main=b615bde5 docs(security): 補 S4.9 owner response 缺口稽核 [skip ci]` | | 範圍 | S4.9 Gitea owner attestation response gate 與 S4.13 owner response validation rollup | | 模式 | 只讀 committed snapshot / 文件稽核 | | 不可誤讀 | 不是 request sent、不是 owner response received、不是 accepted、不是 repo / refs / workflow / secret / runtime 授權 | @@ -32,7 +32,7 @@ S4.9 的基礎規範已存在,且已能被 `source-control-owner-response-guar |------|------|--------| | P0 主控總帳的同步基線仍停在較舊 commit | 新 Session 可能誤用舊 `gitea/main` 或舊 P1 狀態 | 將總帳更新到 `f1bad81d`,並標註 P1-001 由另一 Session 進行中 | | S4.9 gate 仍只有 request-ready,沒有 owner response | IwoooS 64% 不能因規範存在而往前解鎖 | 維持 `0%`,只準備收件缺口,不調高 progress | -| request packet 的欄位名稱存在同義詞 | `affected_repos`、`affected_sources`、`affected_repos_or_sources_or_namespace`、`evidence_refs` 與使用者要求的 `affected_scope`、`redacted_evidence_refs` 容易在 UI / handoff 中混用 | 後續顯示層以六欄 canonical envelope 呈現;source templates 可保留細分欄位 | +| request packet 的欄位名稱存在同義詞 | `affected_repos`、`affected_sources`、`affected_repos_or_sources_or_namespace`、`evidence_refs` 與使用者要求的 `affected_scope`、`redacted_evidence_refs` 容易在 UI / handoff 中混用 | 已補 `S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`,後續顯示層以六欄 canonical envelope 呈現;source templates 可保留細分欄位 | | 沒有實際 dispatch / received audit event | 目前 audit event templates 仍是 template-only,不能證明已送件或已收件 | 等人工送件後才增加 request_sent metadata;未送前所有 count 維持 0 | | 尚未有 owner response reviewer outcome | reviewer checklist 存在,但沒有任何可分類 response | 等脫敏 metadata 進來後,才能進補件、隔離、拒收、只讀更新候選 | | 部分文件仍可能把 P1-305 / P1-306 或 P1-001 當下一步文字混用 | 平行 Session 正在推 P1-001,S4.9 仍是獨立 P0 gate | 後續 LOGBOOK / workplan 每次都標註平行 Session 與最新基線 | @@ -41,8 +41,8 @@ S4.9 的基礎規範已存在,且已能被 `source-control-owner-response-guar | 規範 | 內容 | 狀態 | |------|------|------| -| Canonical owner response envelope | 對外與 AwoooP 顯示固定六欄:`owner_role_or_team`、`decision`、`decision_reason`、`affected_scope`、`redacted_evidence_refs`、`followup_owner` | 需在下一個 UI / handoff 切片統一 | -| Source template alias 規則 | 允許 source template 保留 `affected_repos`、`affected_sources`、`canonical_namespace` 等細分欄位,但必須映射回 `affected_scope` | 需新增顯示層 mapping | +| Canonical owner response envelope | 對外與 AwoooP 顯示固定六欄:`owner_role_or_team`、`decision`、`decision_reason`、`affected_scope`、`redacted_evidence_refs`、`followup_owner` | 已補文件規範;後續 UI / handoff 切片需沿用 | +| Source template alias 規則 | 允許 source template 保留 `affected_repos`、`affected_sources`、`canonical_namespace` 等細分欄位,但必須映射回 `affected_scope` | 已補文件規範;後續顯示層 mapping 需照表實作 | | Request sent 與 received 分離 | request packet 顯示、人工送件、owner response received、accepted 必須是四個獨立狀態 | 已有規範,需在後續 audit metadata 實作時保持 | | Quarantine-first 收件 | 疑似 token、secret、private key、cookie、session、authorization header、private URL credential、未脫敏截圖先隔離,不渲染 raw payload | 已有規範,需維持 | | 平行 Session 衝突規則 | 任一 Session 推送前必須 fetch / fast-forward 到最新 `gitea/main`,並同步 commit / run / production evidence / gate 0 false | 已執行,需持續 | @@ -85,7 +85,7 @@ S4.9 的基礎規範已存在,且已能被 `source-control-owner-response-guar | 工作 | 完成度 | 說明 | |------|--------|------| | S4.9 現況缺口稽核 | 100% | 已列出已符合、仍不符合、需新增、需調整、五題回覆與 0 / false 邊界 | +| S4.9 canonical owner response envelope | 100% | 已補六欄信封、alias 映射、五題投影、quarantine-first 與 reviewer checklist | | S4.9 owner response gate | 0% | 沒有收到 owner response,不得調高 | | IwoooS 整體 | 維持 64% | 只讀稽核不改 runtime readiness | | active runtime gate | 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 20ce2d4c6..40904d950 100644 --- a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md +++ b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md @@ -7,9 +7,9 @@ | 項目 | 目前值 | |------|--------| | 工作視窗 | IwoooS / AWOOOI 資安治理 P0 | -| 本次乾淨 worktree | `/Users/ogt/awoooi` | -| 本次分支 | `codex/iwooos-i18n-d2-visible-literals-20260605` | -| 最新觀察到的 `gitea/main` | `f1bad81d docs(logbook): 記錄 P1-305 P1-306 正式驗證 [skip ci]` | +| 本次乾淨 worktree | `/private/tmp/awoooi-p1-106-offsite-escrow-readiness-20260605` | +| 本次分支 | `codex/p1-305-velero-minio-freshness` | +| 最新觀察到的 `gitea/main` | `b615bde5 docs(security): 補 S4.9 owner response 缺口稽核 [skip ci]` | | 最新 P2-D0 繁中文案基準 | code `cd2275a2`、deploy marker `1920bd08`、code-review `2565`、CD `2564` | | 最新 P2-D1 本地掃描基準 | `VISIBLE_LITERAL_TARGET_SCAN_OK files=221`;全站 TS / TSX 中文 literal 盤點 `35` 檔 / `752` 行;註解語氣 backlog `32` 筆 | | 最新 P2-D1 正式部署基準 | code `f9bf8a28`、deploy marker `879b0a36`、CD `2578`、code-review `2579` | @@ -18,6 +18,7 @@ | 最新 P2-D2 Code Review 候選分類基準 | code `292cfec9`、deploy marker `4cfe5ff7`、CD `2586`、code-review `2587`;Code Review route 可見文案已搬到 `codeReview` i18n namespace,四類候選分類與人工批准流程已正式驗證 | | 最新 P2-D2 AwoooP Runs fallback 文案基準 | code `7f6028c3`、deploy marker `bf016e91`、CD `2590`、code-review `2591`;Runs / Callback / Source Flow fallback 文案已正式驗證 | | 最新 AI Agent automation P1-305 / P1-306 基準 | code `4f0787f8`、deploy marker `af3a9d48`、CD `2592`、code-review `2593`;任務批准邊界與進度彙總已正式驗證;backlog `70%`、done `16/23`、下一步 `P1-001` | +| 最新 S4.9 canonical owner response envelope 基準 | `docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`;六欄信封、欄位 alias、五題投影、quarantine-first 與 reviewer checklist 已固定;owner response gate 仍 `0%` | | 目前平行 Session | AwoooP thread `019e9154-7d5e-7b72-85be-c9d97e43ecc9` 正在推 `P1-001 runtime surface inventory`;本視窗避免修改同一批 runtime surface schema / API / UI 檔 | | 前一個正式 IwoooS 候選基準 | code `7b8fc093`、deploy marker `45c63488`、LOGBOOK `02cadee6` | | 最新導航 IA 基準 | code `973fc7a4`、LOGBOOK `2555c811`、deploy marker `0260ec89` | @@ -50,6 +51,7 @@ | P0-2a | S4.9 current intake readiness | 100% | 五題缺口、合格封套、結果分流與只讀更新邊界已補進收件包與 S4.13 rollup;owner response gate 仍 0% | JSON parse、owner response guard、progress guard | | P0-2b | S4.9 request dispatch preflight 交接包 | 100% | 送件前檢查、交接封套欄位與送後不變條件已固定;dispatch authorized 仍 false | JSON parse、owner response guard、progress guard | | P0-2c | S4.9 current gap audit | 100% | 已新增 `S4-9-OWNER-RESPONSE-GATE-CURRENT-GAP-AUDIT.md`,列出已符合、仍不符合、需新增、需調整、五題回覆與 0 / false 邊界;owner response gate 仍 0% | owner response guard、progress guard、diff check | +| P0-2d | S4.9 canonical owner response envelope | 100% | 已新增 `S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`,固定六欄信封、source template alias mapping、五題投影、quarantine-first 與 reviewer checklist;owner response gate 仍 0% | owner response guard、progress guard、diff check | | P0-3 | AwoooP 同步封包 | 100% | 已送至 AwoooP 平行工作 thread `019e9154-7d5e-7b72-85be-c9d97e43ecc9`;後續仍需每次推版前重新 fetch / fast-forward | 本文件、thread send readback、mirror checklist readback | | P0-4 | production live sanity 節點 | 100% | desktop / mobile / 展開區塊 / overflow / action href 檢查已完成 | Playwright production sanity 通過 | | P0-5 | LOGBOOK 與完成度更新 | 100% | D2 comments-only、D2 AIOps sample、D2 Code Review 候選分類與 D2 AwoooP Runs fallback 皆已回填;可見 / bundle 變更皆已補 local / production desktop + mobile smoke | `docs/LOGBOOK.md` readback | @@ -103,6 +105,18 @@ S4.9 是目前 IwoooS 64% 能往前的第一優先 gate。驗收前所有 count | 送後不變條件 | 100% | 實際送件後也只能依可稽核 metadata 調整 request_sent_count,不得同步拉高 received / accepted / rejected | 不代表 owner response gate 解鎖 | | runtime / source-control 邊界 | 100% | GitHub primary、repo / refs / workflow / secret、Kali、SSH、主機維護、runtime gate 全部另走人工批准 | 不代表任何執行面授權 | +### 3.5 2026-06-05 Canonical Owner Response Envelope + +本輪把 S4.9 從「收件規則與送件前交接包已固定」再推到「source template 欄位可映射成單一 canonical envelope」。這是收件格式規範,不是送件、不代表收到 owner response,也不代表 accepted;`request_sent=false`、`request_sent_count=0`、received / accepted / rejected 全部仍為 `0`。 + +| 項目 | 完成度 | 目前狀態 | 不可誤讀 | +|------|--------|----------|----------| +| 六欄 canonical envelope | 100% | `owner_role_or_team`、`decision`、`decision_reason`、`affected_scope`、`redacted_evidence_refs`、`followup_owner` 已固定 | 不代表 owner 已回覆 | +| Source template alias mapping | 100% | `affected_repos`、`affected_sources`、`canonical_namespace`、`evidence_refs`、`review_owner` 等 alias 已有映射規則 | 不代表可建立 repo、同步 refs、改 workflow、收 secret | +| 五題 canonical 投影 | 100% | S4.9 五題都已定義 `affected_scope` / `decision` / `redacted_evidence_refs` 的最低投影 | 不代表五題已收到合格回覆 | +| Quarantine-first | 100% | secret、token、private key、cookie、session、authorization header、未脫敏截圖與執行要求先隔離或拒收 | 不得渲染 raw payload,不得寫入 LOGBOOK | +| Reviewer checklist | 100% | 六欄、五題、alias mapping、敏感 payload、執行要求、跨包一致性、count transition、gate boundary 已列入驗收前檢查 | 不得把 AwoooP approval 或 UI 可見當資安批准 | + ## 4. 驗證節點規則 | 階段類型 | 必跑驗證 | 是否需要實際開頁 | @@ -188,6 +202,7 @@ P1 只讀重盤階段整體完成度:`70%`。它代表 freshness / inventory / | 需要調整規範 | Workflow / secret 名稱完成度 | local evidence 已有,但 webhook / runner / deploy key / branch protection / parity 仍缺 | 已改為 `missing_evidence`,不得說已完成 parity | | 需要調整規範 | Rollback ADR owner readiness | 舊 ADR 有 fallback / trigger / window 摘要,但缺可交接的 owner response 封套與逐 repo template | 已補 P1-5 handoff package;received / accepted / approved 仍全部 0 | | 需要調整規範 | AwoooP 同步封包 | P1 要同步 refreshed counts、blocked gates、no-run 狀態,避免另一 Session 以舊 `117` heads / `141` items 繼續推進 | 本總帳與 LOGBOOK 會作為同步封包來源 | +| 需要調整規範 | S4.9 欄位同義詞混用 | `affected_repos`、`affected_sources`、`canonical_namespace`、`evidence_refs`、`review_owner` 等欄位容易和使用者要求的六欄封套混用 | 已新增 canonical owner response envelope 規範;source template 可保留細分欄位,但收件 / 顯示 / LOGBOOK 必須映射回六欄 | | 需要新增規範 | 111 / 168 開發主機 scope handoff | 原本只有 observe-only mapping,缺 owner 可審的 scope boundary、credential refusal、rollback owner、validation metrics 與維護窗口欄位 | 已新增 P1-8 handoff、snapshot 與 schema;host execution 仍 `0%` | | 需要調整規範 | 111 Ollama fallback wording | 111 是 ADR-110 local fallback evidence 範圍,不可被誤讀成可直接改 route、重啟 Ollama 或停止模型 | 已在 P1-8 固定 `fallback_route_change_authorized=false` 與 route truth observe-only | | 需要調整規範 | 168 dev origin / repo hygiene wording | repo hygiene 與 local service exposure 容易被誤讀成可掃個人資料、讀未授權目錄或改 CORS / firewall | 已在 P1-8 固定未授權目錄、個人資料、secret derivative、CORS / firewall / service change 全部拒收 / 禁止 | @@ -286,6 +301,7 @@ P1 只讀重盤階段整體完成度:`70%`。它代表 freshness / inventory / | P2-D2 AIOps 範例資料模式 | code `d5ce17c7`、deploy marker `305b8175`;`mockBadge` 改 `sampleBadge`、`MOCK 模式` 改 `範例資料`、`mock-data.ts` 改 `sample-incidents.ts`;殘留掃描 `統帥 / MOCK 模式 / MOCK_INCIDENTS / mock-data / Mock Data / Mock React / MOCK_PENDING / MOCK 常數 / mockBadge` 命中 `0`;i18n mirror `8912` leaves;typecheck、build、owner response guard、security mirror progress guard、diff check 通過;local sample desktop/mobile 與 production desktop/mobile 均 `horizontalOverflow=0`;production HTML `sampleBadge / 範例資料` 可見、`mockBadge / MOCK 模式` 命中 `0` | | P2-D2 Code Review 候選分類 | code `292cfec9`、deploy marker `4cfe5ff7`;`/zh-TW/code-review` 可見文案搬進 `codeReview` namespace,i18n mirror `9004` leaves;TSX 中文 literal 命中 `0`;四類候選分類、人工批准流程、禁止 runtime 轉派與 `action_buttons_allowed=false` 可見;typecheck、build、owner response guard、security mirror progress guard、diff check 通過;Gitea code-review `2587` 成功、CD `2586` tests / build-and-deploy / post-deploy-checks 全部成功;local / production desktop + mobile 均 `horizontalOverflow=0` | | P2-D2 AwoooP Runs fallback 文案 | code `7f6028c3`、deploy marker `bf016e91`;`/zh-TW/awooop/runs`、Callback Evidence、Source Flow 與 status-chain fallback 可見文案已清理;i18n mirror `9020` leaves;目標殘留詞掃描命中 `0`;typecheck、build、owner response guard、security mirror progress guard、diff check 通過;Gitea code-review `2591` 成功、CD `2590` 成功;local / production desktop + mobile 均 `horizontalOverflow=0`;截圖 `/tmp/awoooi-runs-callback-i18n-prod-desktop-bf016e91.png`、`/tmp/awoooi-runs-callback-i18n-prod-mobile-bf016e91.png` | +| S4.9 canonical owner response envelope | 新增 `docs/security/S4-9-CANONICAL-OWNER-RESPONSE-ENVELOPE.md`;六欄信封、alias mapping、五題投影、quarantine-first、reviewer checklist 與驗收前 `0 / false` 邊界已固定;本段純文件,不改前端、不改 API、不新增 deploy;owner response gate 仍 `0%` | 本輪驗證後仍維持: