Files
awoooi/docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md
Your Name 9e15fd08b3
All checks were successful
CD Pipeline / tests (push) Successful in 1m39s
Code Review / ai-code-review (push) Successful in 15s
CD Pipeline / build-and-deploy (push) Successful in 5m19s
CD Pipeline / post-deploy-checks (push) Successful in 2m11s
feat(web): land iwooos security posture surfaces
2026-05-25 20:35:52 +08:00

15 KiB
Raw Blame History

GitHub Target Owner Decision Response 收件包

項目 內容
日期 2026-05-17
狀態 草案,等待 owner response
資料契約 docs/schemas/github_target_owner_decision_response_v1.schema.json
快照 docs/security/github-target-owner-decision-response.snapshot.json
來源契約 github_target_decision_v1
目標契約 github_target_repo_approval_package_v1
模式 owner_decision_response_intake_only
執行面授權 false

0. 核心結論

S4.10 補的是「owner 要怎麼回覆 7 個 GitHub target 的 owner / visibility / canonical 決策」。

S4.10 不是 repo creation approval、不是 visibility change approval、不是 refs sync approval也不是 GitHub primary approval。它只把 owner response request packet、回覆欄位、可接受決策、驗收規則、拒收規則與允許輸出固定下來讓 AwoooP 能只讀顯示並等待人工補證。

此文件不要求貼 token不接受 raw secret不建立 GitHub repo不修改 visibility不 sync refs不切 primary也不停用 Gitea。

1. Response 摘要

指標
owner response 狀態 waiting_owner_response
GitHub target decisions 8
需要人工決策 targets 7
owner response request packet 1
owner response template statuses 7
owner response audit event templates 3
owner response redaction examples 5
owner response collection checks 6
intake preflight checks 6
response templates 7
已收到 response 0
已接受 response 0
已拒收 response 0
acceptance checks 8
rejection rules 10
授權建立 repo false
授權修改 visibility false
授權 sync refs false
授權切換 GitHub primary false
允許收集 secret value false
允許 action button false

1.1 Owner Response Request Packet

S4.10 request packet 只讓 AwoooP 顯示「要請 owner 回覆哪 7 個 GitHub target」。它不是 approval queue、不是 execution queue也不得附加建立 repo、修改 visibility、sync refs 或切 GitHub primary 的按鈕。

欄位 內容
request id s4_10_github_target_owner_decision_response_request
顯示狀態 ready_to_request_owner_response
required response items 7
顯示模式 display_owner_response_request_only
execution authorized false
not approval true

request packet 允許 owner 用 read-only markdown response、redacted metadata pointer、request_more_evidence 或 out_of_scope_disposition 回覆。所有 evidence 只能引用 repo 內文件、snapshot 或已脫敏 metadata pointernot_found_or_private 只能代表需補證或 private access request不能自動當成 repo 不存在或可建立。

request packet 明確拒收 token value、secret value、private key、cookie/session、private clone URL credential、repo creation command、visibility change command、write/admin API request、refs sync/delete request、force push/tag rewrite request、GitHub primary switch request、repo archive、git object pack、DB dump 與 unrelated history merge request。

1.2 Owner Response Template Status Ledger

S4.10 template status ledger 只讓 AwoooP 逐項顯示 7 個 GitHub target template 的收件狀態,避免只看整體 response_template_count=7 而漏掉單一 target 尚未回覆。

狀態欄位
collection status waiting_owner_response
request status request_ready_not_sent
received / accepted / rejected 0 / 0 / 0
latest outcome lane keep_waiting_owner_response
顯示模式 display_template_status_only
execution authorized false
not approval true

此 ledger 不代表 request sent、response received、response accepted 或 approval queue。任一 target 單項 response 即使未來通過,也只能更新 read-only decision table / approval package / approval board / readiness wording不得建立 repo、修改 visibility、sync refs、delete refs、force push 或切 GitHub primary。

1.3 Owner Response Audit Event Templates

AwoooP 可用 owner_response_audit_event_templates 做未來 audit metadata 的格式參考:

Event template 用途 狀態
audit-github-target-response-request-shown 記錄 S4.10 request packet 已可顯示或已顯示的 metadata template_only_not_emitted
audit-github-target-response-received-metadata 記錄 GitHub target owner response 已收到的脫敏 metadata pointer template_only_not_emitted
audit-github-target-response-outcome-classified 記錄 acceptance / rejection 分類結果與下一步提示 template_only_not_emitted

這 3 個 event templates 目前都是 template_only_not_emittedemitted_event_count=0。它們不代表 AwoooP production ingestion 已啟用,也不保存 owner response raw body、token、secret、private clone URL credential、repo archive、git object pack、DB dump、API request body 或 execution request payload。

1.4 Owner Response Redaction Examples

S4.10 redaction examples 只讓 AwoooP / owner 知道「可以怎麼安全描述 GitHub target owner decision」避免把 token、private clone URL credential、API raw body、repo archive、git object pack 或 refs 執行指令貼進 response。

Example 用途 狀態
redaction-github-target-doc-ref 用既有決策表與 snapshot 引用 GitHub target / refs blocker evidence template_example_only
redaction-owner-visibility-canonical-metadata 示範只回覆 owner、visibility review owner、canonical source 與 follow-up owner metadata template_example_only
redaction-private-target-access-metadata 示範 private / new target 只提供 repo slug、access request status 與 owner metadata template_example_only
redaction-refs-truth-dependency-summary 示範用 S4.11 / S4.12 blocker summary 取代 refs sync / delete / force-push 指令 template_example_only
redaction-github-target-quarantine-pointer 示範疑似含敏感 payload 時只留下 quarantine pointer不保存原文 template_example_only

這 5 個 examples 都是 template_example_onlystored_raw_payload_allowed=false。它們不代表 owner response 已收到、已驗收或已批准;也不授權 repo creation、visibility change、refs sync、delete refs、force push、GitHub primary switch 或 GitHub/Gitea write。

1.5 Owner Response Collection Checks

AwoooP 顯示 S4.10 request packet 後,必須用 owner_response_collection_checks 維持 request / received / accepted 三種狀態分離:

Check 目的 失敗 lane
collection-github-target-request-packet-displayed 只顯示 7 個 target templates、允許欄位、脫敏 evidence 規則與禁止 payload keep_waiting_owner_response
collection-github-target-read-only-submission-mode 收件模式只允許 read-only response 或 redacted metadata pointer quarantine_sensitive_payload
collection-seven-target-template-tracking 7 個 GitHub targets 必須逐項追蹤,不接受單一整體同意 request_more_evidence
collection-github-target-redacted-evidence-only 只收 repo 內路徑、snapshot path 或脫敏 metadata pointer quarantine_sensitive_payload
collection-github-target-no-approval-language 不把「同意 / OK / 可進行」升級成 repo / refs / primary approval reject_execution_request
collection-github-target-audit-metadata-only 只記錄 request / response / outcome 的脫敏 audit metadata quarantine_sensitive_payload

這 6 個 checks 都是 required但只約束 AwoooP 如何顯示與收件。它們不是 owner response accepted也不授權 repo creation、visibility change、refs sync、delete refs、force push、GitHub primary switch、workflow / secret / runner 變更或任何 runtime action。

1.6 Intake Preflight Checks

AwoooP 收到 S4.10 owner response metadata pointer 後,必須先跑 intake_preflight_checks,只判斷「可審、補證、隔離或拒收」,不得直接標記 accepted

順序 檢查 失敗處理
1 回覆必須對應已知 GitHub target 要求 owner 修正
2 GitHub target 必填欄位完整 要求補 evidence
3 decision 在模板允許值內 要求 owner 修正
4 只接受 GitHub target 脫敏 evidence refs 進 mirror quarantine
5 不得夾帶 source-control 執行要求 拒收 execution request
6 接受前需覆蓋七個 GitHub targets 維持 waiting 或 request more evidence

這 6 個 preflight checks 只協助 AwoooP 過濾 response 形狀與敏感 payload。preflight pass 不等於 accepted也不授權 repo creation、visibility change、refs sync、delete refs、force push、GitHub primary switch、workflow / secret / runner 變更、Kali scan 或任何 runtime action。

2. Owner Response 必填欄位

每筆 response 至少要能回答:

  1. owner_role_or_team:回覆者角色或團隊,不要求個人敏感資訊。
  2. decision:必須是該 target template 允許的決策值。
  3. decision_reason:為什麼做此 owner / visibility / canonical 判定。
  4. canonical_sourcein-scope 或 candidate target 必須標示;未知時要明確寫 unknown_requires_more_evidence
  5. github_target_dispositioninternal_remote_disposition:說明 target 是 existing candidate、private access request、new target candidate、out-of-scope 或需補證。
  6. visibility_review_ownerrepo visibility 的 review 責任人;若 out-of-scope需提供 disposition。
  7. evidence_refs:只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata。

3. 七個 Response Template

Template GitHub target 驗收重點
target-awoooi-refs-blocked owenhytsai/awoooi 指定 canonical source、visibility owner、refs truth owner維持 primary blocked
target-clawbot-v5-refs-blocked owenhytsai/clawbot-v5 判定 main SHA / tag 真相來源與 owner
target-wooo-aiops-refs-blocked owenhytsai/wooo-aiops 判定 GitHub-only branch / tags 的來源 owner 與 disposition
target-wooo-infra-config-internal-remote owenhytsai/wooo-infra-config 判定 110 internal remote 用途與 infra secret 名稱 inventory owner
target-ewoooc-private-or-new owenhytsai/ewoooc 判定 ewoooc / momo-pro-system canonical 關係與 private/new target disposition
target-bitan-pharmacy-private-or-new owenhytsai/bitan-pharmacy 判定 repo 是否仍 active、GitHub target disposition、owner 與 visibility owner
target-tsenyang-website-private-or-new owenhytsai/tsenyang-website 判定 repo 是否仍 active、GitHub target disposition、owner 與 visibility owner

4. 可接受決策值

Decision 意義
approve_existing_target_as_candidate 只同意既有 GitHub target 作為候選,不授權 refs / primary 執行
approve_private_target_access_request 只同意要求 owner 補 private target access evidence不授權修改設定
approve_new_target_creation_candidate 只同意把新 target 建立列為候選計畫,不授權建立 repo
hold_pending_refs_truth 維持等待 refs truth / tag disposition
hold_pending_canonical_review 維持等待 canonical / owner review
mark_external_or_out_of_scope 標示為外部或不納入本輪 scope需附 owner 理由
unknown_requires_more_evidence 證據不足,需補脫敏 evidence

5. 驗收規則

  1. response 必須對應 7 個 approval-required GitHub targets 之一。
  2. decision 必須在該 target 的允許值內。
  3. 必須有 owner 與 visibility review 責任,或明確 out-of-scope disposition。
  4. in-scope 或 candidate target 必須說明 canonical source。
  5. 不得繞過 refs truth、workflow-secret parity、Gitea inventory、rollback ADR 或 server-side diff 缺口。
  6. 不得夾帶 repo creation 或 visibility change 指令。
  7. 不得夾帶 refs sync、primary switch 或 disable Gitea 指令。
  8. evidence_refs 必須已脫敏,不得包含 token、credential、secret value、private key 或 deploy key value。

6. 必須拒收

  1. token value、PAT、cookie、session、CSRF token、private key 或 partial credential。
  2. repo creation command、API request body、CLI command 或 automation payload。
  3. visibility change command 或要求立即修改 public/private/internal visibility。
  4. push refs、delete refs、force push、mirror sync、tag rewrite 或 branch rewrite。
  5. 切 GitHub primary、停用 Gitea、刪除 Gitea、封存 Gitea 或移除 fallback。
  6. 缺 owner、visibility review owner、canonical source 或 out-of-scope disposition。
  7. not_found_or_private 自動解釋為 repo 不存在或可建立。
  8. 要求自動合併 unrelated histories 或刪除 momo / ewoooc working tree。
  9. 把 owner decision response 當成 repo migration approval、refs sync approval 或 primary approval。
  10. 任何不確定是否含敏感值、私有 URL 憑證或未脫敏截圖的回覆。

7. AwoooP 可做

  1. 顯示 1 個 owner response request packet。
  2. 顯示 7 個 owner response template statuses。
  3. 顯示 3 個 owner response audit event templates。
  4. 顯示 5 個 owner response redaction examples。
  5. 顯示 6 個 owner response collection checks。
  6. 顯示 6 個 intake preflight checks。
  7. 顯示 7 個 owner decision response templates。
  8. 顯示 acceptance checks 與 rejection rules。
  9. 在 owner response 到來後,只更新 read-only decision table、approval package、approval board、primary readiness gate 與 status rollup。
  10. 將不完整或可疑 response 放進 mirror quarantine。
  11. 持續顯示 received_response_count=0accepted_response_count=0,直到真的收到脫敏 response。

8. AwoooP 不可做

  1. 不要求使用者貼 token、secret、private key、cookie、session 或 deploy key。
  2. 不把 response 當成 repo creation approval。
  3. 不把 response 當成 visibility change approval。
  4. 不把 response 當成 refs sync approval。
  5. 不把 response 當成 GitHub primary approval。
  6. 不建立 GitHub repo。
  7. 不修改 GitHub/Gitea repo。
  8. 不新增執行按鈕。

9. 階段定位

S4.10 是 S1.1 / S1.2 / S4.0 後面的安全收件包。

它讓 7 個 GitHub target 的 owner / visibility / canonical response 變得可審、可驗收、可拒收,但仍停在框架期。真正進入 GitHub primary 或 refs migration 前,仍必須等 Gitea inventory、refs truth、workflow-secret parity、rollback ADR、owner approval 與後續 runtime gate 全部補齊。