diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 8b4533290..c28816377 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,33 @@ +## 2026-06-14|agent-bounty-protocol owner request draft 本地完成 + +**背景**:`agent-bounty-protocol` 已納入 IwoooS 只讀視野,但它牽涉 repo / refs、deployment、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic、claim / submit、payout / withdrawal 與 external agent autonomy,不能只停在 onboarding handoff。此段先建立 owner request draft,不讀 `.env`、不改該 repo、不部署、不啟動 runtime。 + +**完成項目**: +- 新增 `scripts/security/agent-bounty-owner-request-draft.py`,從 `agent-bounty-iwooos-onboarding-handoff.snapshot.json` 產生 metadata-only owner request draft。 +- 新增 `docs/security/agent-bounty-owner-request-draft.snapshot.json`,固定 `request_draft_count=11`、`control_boundary_request_count=4`、`product_surface_request_count=7`、`write_capable_request_draft_count=8`、`treasury_related_request_draft_count=4`、`mcp_a2a_related_request_draft_count=5`、`required_owner_field_count=22`、`forbidden_input_count=25`、`blocked_action_count=28`。 +- 新增 `docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md`,說明 request draft 類型、owner 必填欄位、forbidden inputs、blocked actions、完成度與 0 / false 邊界。 +- `security-mirror-progress-guard.py` 已鎖住新 snapshot 的 schema、summary、execution false flags、request ids、blocked actions 與每份草稿 false flags。 +- `AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md`、`HIGH-VALUE-CONFIG-CONTROL-COVERAGE.md`、`IWOOOS-CONFIG-CONTROL-INVENTORY.md`、`SECURITY-SUPPLY-CHAIN-PROGRESS.md`、P0 主控板與 MASTER 已同步。 + +**本地驗證**: +- `python3 -m json.tool docs/security/agent-bounty-owner-request-draft.snapshot.json` 通過。 +- `python3 -m json.tool docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json` 通過。 +- `python3 -m py_compile scripts/security/agent-bounty-owner-request-draft.py scripts/security/high-value-config-control-coverage.py scripts/security/security-mirror-progress-guard.py` 通過。 +- 產生器 smoke:`AGENT_BOUNTY_OWNER_REQUEST_DRAFT_OK drafts=11 write_capable=8 treasury=4 fields=22 sent=0 runtime_gate=0`。 +- high-value config coverage 重產:`HIGH_VALUE_CONFIG_CONTROL_COVERAGE_OK categories=14 c0=8 avg=66 runtime_gate=0`。 +- agent-bounty owner request snapshot 斷言:`AGENT_BOUNTY_OWNER_REQUEST_DRAFT_ASSERTIONS_OK drafts=11 write_capable=8 treasury=4 fields=22 sent=0 runtime_gate=0`。 +- `python3 scripts/security/security-mirror-progress-guard.py --root .` → `SECURITY_MIRROR_PROGRESS_GUARD_OK`。 +- `python3 scripts/security/source-control-owner-response-guard.py --root .` → `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`。 +- `python3 scripts/ops/doc-secrets-sanity-check.py docs .gitea` → `DOC_SECRET_SANITY_OK scanned_files=834`。 +- `git diff --check` 通過。 +- 新增行工作視窗溝通片語掃描:無命中。 + +**完成度與邊界**: +- agent-bounty-protocol owner request draft artifact:`100%`。 +- agent-bounty-protocol runtime / MCP / A2A / treasury 類別成熟度:維持 `68%`,因為尚未收到 owner response 或 live evidence。 +- Production browser verification:不適用;本輪只改 repo 內文件、snapshot、guard 與產生器,不變更前端 bundle 或 runtime。 +- request sent、recipient confirmed、owner response received / accepted、repo refs truth、data classification、deployment boundary、external agent boundary、settlement / treasury boundary、auth / abuse boundary、runtime gate、runtime execution、production deploy、repo creation、refs sync、workflow modification、secret collection、env read、active scan、credentialed scan、deploy、compose restart、DB migration、daemon start、cron enable、auto claim、auto submit、external agent message、Telegram send、Discord send、GitHub comment、payout、withdrawal、staking、webhook secret change、shared DB / session / RBAC、host write、production write、action buttons 全部維持 `0 / false`。 + ## 2026-06-14|Monitoring / Alerting / Observability owner request draft 本地完成 **背景**:Prometheus、Alertmanager、Grafana、SigNoz、Sentry、Langfuse、OTEL、Telegram / notification policy、deploy / reload scripts 與 alert chain smoke scripts 都會影響告警可用性、通知噪音與 incident 判讀。既有 repo-only 清冊已納入 60 個 surface;本段先建立 owner request draft,要求 owner 提供脫敏 live config hash、receiver diff、route smoke plan、noise budget、maintenance window、rollback owner 與 validation plan,不執行任何 reload / deploy / notification。 diff --git a/docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md b/docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md index 73ea055a8..ca5f6fbd3 100644 --- a/docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md +++ b/docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md @@ -17,6 +17,8 @@ 本階段依照 IwoooS 初期原則,只建立低摩擦框架與只讀證據。owner response、資料分級、版本來源真相、部署邊界、外部 agent 邊界與財務 / settlement 邊界都仍未驗收。 +2026-06-14 已新增 `docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md` 與 `docs/security/agent-bounty-owner-request-draft.snapshot.json`,把本 handoff 轉成 11 份 owner request draft。此更新只代表人工送件前欄位包已完成;request sent、owner response received / accepted、repo / refs truth、deployment boundary、MCP / A2A boundary、treasury boundary、claim / submit、payout / withdrawal、cron / daemon、runtime gate 與 action button 仍全部為 `0 / false`。 + ## 1. 已讀到的只讀 evidence | 類別 | evidence | 判讀 | @@ -46,6 +48,8 @@ | auto claim / submit authorized | `false / false` | | bounty payout / withdrawal authorized | `false / false` | | repo creation / refs sync / workflow modification authorized | `false / false / false` | +| owner request draft | `ready_not_dispatched` | +| owner request draft count | `11` | ## 3. Repo / Refs Handoff @@ -122,6 +126,8 @@ 6. 不把 AwoooP work item 直接轉成 external agent claim / submit。 7. 後續整合只能走版本化 API、Webhook、outbox、匯入匯出配接器、SSO / OAuth 或 Anti-Corruption Layer。 +2026-06-14 owner request draft 也將此邊界拆成 repo / refs、deployment、data classification、external agent / treasury 與 7 個 product surface scope。草稿完成不代表 `agent-bounty-protocol` 合併進 AWOOOI,也不代表可共享 DB、session、RBAC、runtime approval、AwoooP approval 或 treasury authority。 + ## 7. 資料分級收件 | 資料類型 | 初期分級狀態 | 收件規則 | @@ -146,3 +152,5 @@ ## 9. 階段定位 本段只把 `agent-bounty-protocol` 從「新專案尚未在 IwoooS 可見」推到「owner / reviewer 可照表審 repo、product、surface、owner、data classification、deployment boundary、external agent boundary、treasury boundary 與 evidence refs」。它不改 `agent-bounty-protocol` repo、不部署、不掃描、不讀 `.env`、不開 runtime gate,也不提高 IwoooS headline 64%。 + +2026-06-14 追加的 owner request draft 讓下一階段可照 22 個 owner 欄位收件,但仍停在 `request_sent=0`、`owner_response_received=0`、`owner_response_accepted=0`、`runtime_gate=0`。若未來要做 production verification、route smoke 或 webhook / MCP / A2A 測試,必須另開維護窗口、rollback owner、validation plan 與人工批准。 diff --git a/docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md b/docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md new file mode 100644 index 000000000..9414de4fb --- /dev/null +++ b/docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md @@ -0,0 +1,174 @@ +# agent-bounty-protocol Owner Request Draft + +| 項目 | 內容 | +|------|------| +| 日期 | 2026-06-14 | +| 狀態 | `owner_request_draft_ready_not_dispatched` | +| 工具 | `scripts/security/agent-bounty-owner-request-draft.py` | +| Snapshot | `docs/security/agent-bounty-owner-request-draft.snapshot.json` | +| Source handoff | `docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json` | +| runtime gate | `0` | + +## 1. 目的 + +本文件把 `agent-bounty-protocol` onboarding handoff 轉成人工送件前 owner request draft,讓 repo / refs、deployment、產品路由、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic、資料分級與外部 agent 自主行為都能用同一套 owner 欄位收件。 + +本階段仍是 metadata-only request draft:不讀 `agent-bounty-protocol` `.env`、不改該 repo、不 push refs、不建立 GitHub repo、不改 workflow、不部署、不 restart compose、不跑 DB migration、不啟動 cron / daemon、不 claim、不 submit、不送外部 agent 訊息、不送 Telegram / Discord、不發 GitHub comment、不 payout、不 withdraw、不 staking、不改 webhook secret、不掃描、不寫 production。 + +## 2. 摘要 + +| 指標 | 目前值 | 說明 | +|------|--------|------| +| request draft | `11` | 4 份 control boundary + 7 份 product surface | +| control boundary request | `4` | repo / refs、deployment、data classification、external agent / treasury | +| product surface request | `7` | public task、well-known metadata、MCP、A2A、cron、admin / treasury、webhook / traffic | +| write-capable request draft | `8` | 可能觸發 deploy、claim / submit、cron、webhook、admin 或 treasury 風險的 scope | +| treasury-related request draft | `4` | settlement、staking、withdrawal、payout 或 treasury 相鄰 scope | +| MCP / A2A related request draft | `5` | MCP tool、A2A protocol、cron / daemon 或 agent autonomy scope | +| live evidence required request | `11` | 每份 request 都需要 owner 提供脫敏 evidence ref | +| request field | `26` | 每份草稿固定欄位數 | +| required owner field | `22` | owner 必須補齊的欄位數 | +| owner role field | `13` | 來源 handoff 已定義的 owner 角色欄位 | +| forbidden input | `25` | 驗收前拒收或隔離的輸入 | +| blocked action | `28` | 驗收前全部禁止 | +| request sent / recipient confirmed | `0 / 0` | 尚未送件,收件人也未確認 | +| owner response received / accepted | `0 / 0` | 不得假性拉高 | +| runtime gate / action button | `0 / 0` | 不開任何執行入口 | + +## 3. Request Draft 類型 + +| 類型 | 範圍 | 目前邊界 | +|------|------|----------| +| Repo / refs / workflow | canonical repo、dirty workspace disposition、workflow / runner / secret name owner | 不 push、不 sync refs、不建立 repo、不改 workflow | +| Production / compose / domain | `https://agent.wooo.work`、compose host、domain / TLS、health smoke | 不 deploy、不 restart、不 migration | +| Data classification | task、agent、MCP / A2A、webhook、traffic、treasury、admin、cron 資料分級 | 只收 metadata,不收 raw payload 或 secret | +| MCP / A2A / treasury | MCP tool、A2A negotiation、settlement、staking、withdrawal、payout、notification owner | 不 claim、不 submit、不 daemon、不 send、不 payout | +| Public task surface | marketplace、task、leaderboard、traffic、ICO 類公開面 | 不代表 bounty payout 或 external claim / submit 可執行 | +| Well-known metadata | agent-card、ai-plugin、mcp、openapi | 可作 route evidence;不授權 agent execution 或 credential exposure | +| Cron / automation | A2A discovery / dispatcher / swarm、judge、lead-gen、reaper、self-replicate、treasury alert | 不啟用 schedule、不跑 daemon、不 self-replicate | +| Admin / treasury | admin、traffic、treasury、withdraw、simulate | 需 RBAC / auth / financial owner response;不提款、不 payout | +| Webhook / traffic | traffic、GitHub / Stripe webhook、scout、intent stream、health | 只收 redacted metadata,不收 webhook secret 或 payload body | + +## 4. Owner 必填欄位 + +| 欄位 | 說明 | +|------|------| +| `product_owner_role_or_team` | 產品 owner 或 team | +| `security_owner_role_or_team` | 資安 / abuse / 資料保護 owner | +| `source_control_owner_role_or_team` | repo / refs / workflow / secret name owner | +| `deployment_owner_role_or_team` | compose / domain / TLS / smoke owner | +| `data_classification_owner_role_or_team` | task、agent、webhook、traffic、treasury、admin 資料分級 owner | +| `external_agent_boundary_owner_role_or_team` | MCP / A2A / cron / daemon owner | +| `settlement_or_treasury_owner_role_or_team` | staking、withdrawal、payout、Stripe / wallet 風險 owner | +| `notification_owner_role_or_team` | Telegram、Discord、GitHub webhook / issue comment owner | +| `surface_scope` | 本次納入 IwoooS 的 route、API、admin、cron、worker、webhook 範圍 | +| `decision` | owner 對此 scope 的判定 | +| `decision_reason` | 決策理由摘要,不得包含機敏值 | +| `redacted_evidence_refs` | 文件、snapshot、ticket、commit、hash 或脫敏 metadata pointer | +| `canonical_repo_ref` | canonical repo / remote / branch 的脫敏 ref | +| `repo_dirty_disposition` | dirty / untracked workspace 的 WIP 或 release candidate 判定 | +| `deployment_boundary_ref` | production host、compose directory、domain / TLS、health smoke 的脫敏 ref | +| `auth_abuse_boundary_ref` | auth、RBAC、abuse control、rate limit、anti-spam 的脫敏 ref | +| `external_agent_boundary_ref` | MCP / A2A / cron / daemon / external agent autonomy 的脫敏 ref | +| `settlement_treasury_boundary_ref` | settlement、staking、withdrawal、payout、Stripe / wallet 的脫敏 ref | +| `maintenance_window` | 維護窗口或禁止窗口 | +| `rollback_owner` | rollback 負責人與 rollback ref | +| `validation_plan` | 驗證與 post-check plan | +| `followup_owner` | 後續補件或決策負責人 | + +## 5. 禁止輸入 + +```text +.env content +database URL value +API key value +MCP API key value +E2B API key value +Telegram bot token value +Telegram chat id value +Discord webhook value +GitHub token value +Stripe secret value +wallet private key +seed phrase +cookie +session +auth header +raw webhook payload +raw traffic payload +raw agent prompt or transcript +claim or submit execution request +payout or withdraw execution request +deploy command request +compose restart request +DB migration request +repo push request +refs sync request +``` + +## 6. 禁止動作 + +```text +modify_agent_bounty_repo +commit_agent_bounty_changes +push_agent_bounty_refs +sync_refs +create_github_repo +change_workflow +collect_secret_value +read_env_file +deploy_production +restart_compose +run_db_migration +run_active_scan +run_credentialed_scan +start_daemon +enable_cron +auto_claim +auto_submit +send_external_agent_message +send_telegram_notification +send_discord_notification +post_github_comment +execute_payout +execute_withdrawal +share_database +share_session +bind_rbac +enable_runtime_gate +add_awooop_action_button +``` + +## 7. 指令 + +固定 committed snapshot 時間: + +```bash +python3 scripts/security/agent-bounty-owner-request-draft.py \ + --root . \ + --handoff-report docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json \ + --output docs/security/agent-bounty-owner-request-draft.snapshot.json \ + --generated-at 2026-06-14T23:55:00+08:00 +``` + +只讀 guard: + +```bash +python3 scripts/security/security-mirror-progress-guard.py --root . +python3 scripts/security/source-control-owner-response-guard.py --root . +``` + +## 8. 完成度 + +| 工作 | 完成度 | 說明 | +|------|--------|------| +| owner request draft artifact | `100%` | 11 份 request draft 已由 committed onboarding handoff 產生 | +| request dispatch | `0%` | 尚未送件,recipient 未確認 | +| owner response received / accepted | `0%` | 尚未收到或接受任何 owner response | +| live evidence collection | `0%` | 未讀 production host、compose、DB、webhook、MCP 或 treasury live state | +| source-control / deployment / financial action | `0%` | 未 push、未 sync refs、未 deploy、未 payout | +| runtime / production write | `0%` | 無 action button,無 production write | + +## 9. 邊界 + +這份 owner request draft 不是資安批准、不是 deployment approval、不是 external agent autonomy approval、不是 treasury approval,也不是 live production truth。不得把 request draft、snapshot、IwoooS UI、AwoooP approval、LOGBOOK 或 onboarding handoff 解讀成 repo / refs / workflow 修改、secret 收集、production deploy、compose restart、DB migration、cron / daemon 啟動、MCP claim / submit、A2A dispatcher、self-replication、Telegram / Discord / GitHub send、Stripe / wallet 操作、payout、withdrawal、staking、active scan、host write 或 runtime gate 授權。 diff --git a/docs/security/HIGH-VALUE-CONFIG-CONTROL-COVERAGE.md b/docs/security/HIGH-VALUE-CONFIG-CONTROL-COVERAGE.md index fda164d55..d7b10152c 100644 --- a/docs/security/HIGH-VALUE-CONFIG-CONTROL-COVERAGE.md +++ b/docs/security/HIGH-VALUE-CONFIG-CONTROL-COVERAGE.md @@ -34,6 +34,12 @@ 2026-06-14 P0-21 再新增 `docs/security/K8S-ARGOCD-OWNER-REQUEST-DRAFT.md` 與 `docs/security/k8s-argocd-owner-request-draft.snapshot.json`,將四個 scan group 轉成 `request_draft_count=4`、`c0_request_draft_count=3`、`required_owner_field_count=11`、`evidence_gap_count=8`、`blocked_action_count=13` 的 request draft。此更新仍不是 request sent、owner response received / accepted、ArgoCD readback、sync、kubectl action 或 runtime gate。 +## 1.3 2026-06-14 agent-bounty-protocol owner request draft + +已新增 `docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md` 與 `docs/security/agent-bounty-owner-request-draft.snapshot.json`,將 `agent-bounty-protocol` onboarding handoff 轉成 11 份 owner request draft。 + +固定數字為 `request_draft_count=11`、`control_boundary_request_count=4`、`product_surface_request_count=7`、`write_capable_request_draft_count=8`、`treasury_related_request_draft_count=4`、`mcp_a2a_related_request_draft_count=5`、`required_owner_field_count=22`、`forbidden_input_count=25`、`blocked_action_count=28`、`runtime_gate_count=0`。此更新不提高 `agent_bounty_protocol_runtime` 成熟度,仍維持 `68%`;owner response、repo / refs truth、deployment boundary、MCP / A2A boundary、treasury boundary、claim / submit、payout / withdrawal、cron / daemon、runtime gate 與 action button 仍全部為 `0 / false`。 + ## 2. 覆蓋摘要 | 指標 | 目前值 | 說明 | @@ -121,7 +127,7 @@ alert_chain_smoke_authorized=false 1. `coverage_percent` 只代表只讀框架成熟度,不代表已收到 owner response。 2. `coverage_status` 是下一步分流用語,不是 runtime approval state。 3. C0 / C1 類別若缺 live evidence,只能等待 owner-provided redacted evidence、維護窗口與 rollback owner。 -4. `agent-bounty-protocol` 已是 C0 runtime / MCP / A2A / treasury boundary,但目前仍不得 claim / submit / payout / daemon / webhook / runtime execution。 +4. `agent-bounty-protocol` 已是 C0 runtime / MCP / A2A / treasury boundary,且 owner request draft 已完成;目前仍不得 claim / submit / payout / daemon / webhook / runtime execution。 5. IwoooS 前端可顯示覆蓋矩陣,但不得提供可執行按鈕,也不得把可見狀態解讀成資安批准。 ## 6. 指令 diff --git a/docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md b/docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md index 9d9bc1d1d..4dbb4fdca 100644 --- a/docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md +++ b/docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md @@ -138,7 +138,7 @@ Nginx 是目前必須最先資安控管的配置,原因是它同時控制公 | P0 | Runner / deploy key / webhook / branch protection | `ops/runner/*`、source-control snapshots | Gitea / GitHub owner metadata | labels、key names、webhook names、ruleset metadata only;no token / key value | | P0 | Public admin / API route config | Nginx templates、`apps/web/src/lib/config.ts`、`apps/api/src/core/config.py` | Product owner + runtime owner | auth boundary、CORS、public URL、admin path smoke、frontend internal IP ban | | P0 | Backup / restore credential | `scripts/backup/*`、`k8s/velero/*`、DR runbooks、`docs/security/BACKUP-RESTORE-ESCROW-INVENTORY.md`、`docs/security/BACKUP-RESTORE-OWNER-REQUEST-DRAFT.md` | MinIO / restic / offsite escrow | owner request draft 已固定;credential value absent、restore drill gate、offsite owner、escrow owner、retention policy、rollback owner | -| P0 | agent-bounty-protocol treasury / MCP / A2A | `docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md` | agent-bounty owner response | no payout / claim / submit / daemon / webhook until explicit runtime approval | +| P0 | agent-bounty-protocol treasury / MCP / A2A | `docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md`、`docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md` | agent-bounty owner response | owner request draft 已固定;no payout / claim / submit / daemon / webhook until explicit runtime approval | | P1 | Prometheus / Alertmanager | `k8s/monitoring/*`、`ops/alertmanager/alertmanager.yml`、`ops/monitoring/*`、`docs/security/MONITORING-ALERTING-OBSERVABILITY-INVENTORY.md`、`docs/security/MONITORING-OWNER-REQUEST-DRAFT.md` | 110 monitoring stack | repo-only 清冊與 owner request draft 已固定;仍缺 rule diff、receiver diff、reload owner、receipt proof 與 live evidence | | P1 | Grafana / SigNoz / Sentry / Langfuse | `ops/grafana/*`、`ops/signoz/*`、`ops/sentry-self-hosted/*`、`infra/langfuse/*`、`docs/security/MONITORING-ALERTING-OBSERVABILITY-INVENTORY.md`、`docs/security/MONITORING-OWNER-REQUEST-DRAFT.md` | 110 compose / public gateway | owner request draft 已固定;仍缺 admin secret owner、public route proof、backup owner、smoke plan、upgrade window 與 rollback owner | | P1 | Harbor / registry | Nginx templates、backup scripts、CD workflows | 110 Harbor / registry domains | robot account owner、image tag immutability、scan policy、TLS | @@ -198,6 +198,7 @@ Nginx 是目前必須最先資安控管的配置,原因是它同時控制公 | Monitoring / alerting / observability owner request draft | `100%` | 已將 60 個 monitoring surface 轉成 owner request draft;request sent / received / accepted、reload、receiver route change、Telegram send、alert chain smoke 仍為 0 | | owner packet 前台只讀接入 | `100%` | `/zh-TW/iwooos` 已顯示高價值配置 owner packet 草案、C0/C1 packet 數、request / received / accepted 仍為 0 與禁止執行邊界 | | owner response request / received / accepted | `0%` | Packet 只是草案;尚未送件、尚未收件、尚未 reviewer accepted | +| agent-bounty-protocol owner request draft | `100%` | 已將 repo / refs、deployment、data classification、external agent / treasury 與 7 個 product surface 轉成 11 份 owner request draft;claim / submit、payout、cron / daemon、runtime gate 仍為 0 | | Docker / systemd owner request draft | `100%` | 已將 9 個 host service surface 轉成 owner request draft;request sent / received / accepted 仍為 0 | | SSH / firewall / network owner request draft | `100%` | 已將 16 個 SSH / network access surface 轉成 owner request draft;request sent / received / accepted、port change、firewall change、NetworkPolicy apply、NodePort change、WireGuard change 仍為 0 | | Backup / restore / escrow owner request draft | `100%` | 已將 38 個 backup / restore / escrow surface 轉成 owner request draft;request sent / received / accepted、backup run、restore run、offsite sync、remote delete、escrow marker write、retention change 仍為 0 | diff --git a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md index de251480e..e33f06cf0 100644 --- a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md +++ b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md @@ -8,6 +8,7 @@ | 本階段追加 | AwoooP 合約儀表板 IwoooS 資安契約只讀候選 + AwoooP 租戶管理 IwoooS 資安租戶範圍只讀候選 + AwoooP 執行監控 IwoooS 執行狀態只讀候選 + 既有安全 / 合規頁面 IwoooS 只讀反向橋接 + 告警 / 錯誤 / 授權 / 治理頁面 IwoooS 只讀反向橋接 + 稽核 / 工程審查頁面 IwoooS 深色只讀反向橋接 + IwoooS 前端資安頁面連接狀態板 + IwoooS GitHub 主要來源就緒度只讀狀態板 + AwoooP 工作鏈路 GitHub 主要來源就緒度只讀工作項 + AwoooP 合約儀表板 GitHub 主要來源就緒度合約只讀候選 + AwoooP 審批佇列 GitHub 主要來源就緒度審批邊界 + AwoooP 首頁 GitHub 主要來源就緒度只讀摘要 + AwoooP 租戶管理 GitHub 主要來源就緒度租戶範圍 + AwoooP 執行監控 GitHub 主要來源就緒度執行邊界 + IwoooS / AwoooP 資安可視區塊繁體中文呈現防護檢查 + AwoooP 執行詳情 / 審批詳情繁體中文呈現防護檢查 + AwoooP 首頁負責人回覆驗收總覽 + AwoooP 工作鏈路負責人回覆驗收只讀工作項 + AwoooP 合約儀表板負責人回覆驗收契約只讀候選 + AwoooP 審批佇列負責人回覆驗收只讀審查邊界 + AwoooP 租戶管理負責人回覆驗收租戶範圍 + AwoooP 執行監控負責人回覆驗收執行邊界 + AwoooP 執行詳情負責人回覆驗收詳情邊界 + AwoooP 審批決策負責人回覆驗收審批邊界 + IwoooS AwoooP 資安入口覆蓋狀態板 + IwoooS 階段式資安收斂節奏圖 + IwoooS 下一步人工收件作戰板 + IwoooS 人工回覆安全驗收閘道 + IwoooS 人工回覆審查結果分流 + IwoooS 人工決策準備佇列 + IwoooS 人工決策紀錄草稿防誤用 + IwoooS 人工決策正式紀錄負責人指派確認準備包 + IwoooS 人工決策正式紀錄負責人指派確認清單 + IwoooS 人工決策正式紀錄負責人指派確認結果分流 + IwoooS 人工決策正式紀錄負責人指派決策準備包 + IwoooS 人工決策正式紀錄負責人指派決策檢查清單 + IwoooS S4.9 負責人回覆封套欄位 + IwoooS S4.9 負責人回覆封套送件前檢查 + IwoooS S4.9 負責人回覆封套送件前結果分流 + IwoooS S4.9 負責人回覆送件請求草稿 + IwoooS S4.9 負責人回覆送件鏈路摘要 + IwoooS 低摩擦分階段收斂主控 + IwoooS 低摩擦下一步行動邊界 + IwoooS 64% 進度移動訊號驗收條 + IwoooS 第一個進度解鎖路徑 + IwoooS 第一解鎖證據包 + IwoooS 第一解鎖證據包預檢分流 + IwoooS 第一解鎖證據包補件路徑 + IwoooS 第一解鎖證據包補件送審前檢查 + IwoooS 第一解鎖證據包補件送審結果分流 + IwoooS 第一解鎖證據包 reviewer 指派準備包 + IwoooS 第一解鎖證據包 reviewer 指派前檢查 + IwoooS 第一解鎖證據包 reviewer 指派前檢查結果分流 + IwoooS 正式只讀 landing 與 Kali 112 只讀證據進度重估 | | 本階段追加補充 | IwoooS 目前具體工作地圖 + IwoooS 目前具體交付清單 + IwoooS 目前阻塞與解除條件 + IwoooS 三軸進度與全產品套用範圍 + IwoooS 全產品分階段套用台帳 + IwoooS 全產品 rollout 波次驗收門檻 + IwoooS 全產品 rollout 驗收結果分流 + IwoooS 全產品證據接線地圖 + IwoooS 全產品證據接線預檢 + IwoooS 全產品證據接線預檢結果分流 + IwoooS 全產品預檢補件回收台帳 + IwoooS 全產品補件重試門檻 + IwoooS 全產品重試結果分流 + IwoooS 全產品人工審查候選準備 + IwoooS 全產品人工審查候選預檢 + IwoooS 全產品人工審查候選預檢結果分流 + IwoooS 全產品人工審查候選預檢補件回收台帳 + IwoooS 全產品人工審查候選預檢補件重試門檻 + IwoooS 全產品只讀套用快照 + P2-145 owner response acceptance gate 正式驗證完成 | | P0 追加 | IwoooS P0 配置控管優先序前台正式驗證完成;Nginx public gateway、DNS / TLS / certbot、K8s / ArgoCD / production manifests、Workflow / runner / secret metadata、Public / admin / API runtime config、agent-bounty runtime / treasury 六類先列為即時風險配置;高價值配置 Gate 已補上 `k8s/nginx/**`、`scripts/ops/**/*cert*`、`scripts/ops/**/*tls*`,sample 從 `matched=0 / C0=0` 收斂到 `matched=3 / C0=2`;Gate 預設工作樹 preflight 已可讀取 staged / unstaged / untracked,本地 smoke 對臨時 `k8s/nginx/*` 檔命中 C0;Owner Packet snapshot 已同步為 `packets=3 / c0=2`,Coverage snapshot 已同步最新 patterns;IwoooS / AwoooP 前台 Owner Packet 摘要已正式驗證 `packet=3 / c0=2`,feature commit `e999c16b`、deploy marker `16c6b983`、Gitea code-review `2973` / CD `2972` success;IwoooS posture projection snapshot / schema / guard 已同步 `packet=3 / c0=2`,不再保留舊 `1 / 0` 口徑;高價值配置 Owner Packet 收件預檢已新增 `checks=9 / lanes=5 / required_fields=27 / blocked_requests=16`;高價值配置 Owner Request 草稿包已新增 `drafts=3 / handoff_fields=11 / forbidden_payloads=12 / sent=0`;Public Gateway live conf 匯出請求包已新增 `requests=3 / c0=2 / redaction_rules=8 / received=0`;Public Gateway redacted export 收件預檢已新增 `candidates=3 / c0=2 / checks=10 / rejection_guards=12 / received=0 / accepted=0`;Public Gateway rendered diff / nginx gate 草稿已新增 `candidates=3 / c0=2 / stages=7 / blocked=14 / rendered_diff=0 / runtime=0`;DNS / TLS / certbot Owner Confirmation Request 已新增 `requests=4 / c0=4 / fields=9 / questions=5 / guards=12 / received=0 / accepted=0`;K8s / ArgoCD manifest repo-only 清冊已新增 `files=49 / c0=36 / yaml=45 / kinds=20 / blocked=13 / runtime=0`;K8s / ArgoCD Owner Request Draft 已新增 `drafts=4 / c0=3 / fields=11 / sent=0 / runtime=0`;owner response / live evidence / runtime gate / action buttons 仍全部為 0 | +| P0 agent-bounty 追加 | agent-bounty-protocol Owner Request Draft 已新增 `drafts=11 / control=4 / surface=7 / write_capable=8 / treasury=4 / mcp_a2a=5 / fields=22 / forbidden_inputs=25 / blocked=28 / sent=0 / runtime=0`;這是 repo / refs、deployment、data classification、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic 的人工送件前草稿,不是 owner response、repo push、refs sync、workflow 修改、secret 收集、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、external send、host write 或 runtime gate | | P1 追加 | Docker / systemd / Host Service Owner Request Draft 已新增 `drafts=9 / write_capable=3 / fields=12 / blocked=14 / sent=0 / runtime=0`;SSH / Firewall / Network Access Owner Request Draft 已新增 `drafts=16 / write_capable=6 / fields=13 / blocked=16 / sent=0 / runtime=0`;Backup / Restore / Escrow Owner Request Draft 已新增 `drafts=38 / write_capable=27 / fields=14 / blocked=18 / sent=0 / runtime=0`;Monitoring / Alerting / Observability Owner Request Draft 已新增 `drafts=60 / write_capable=11 / fields=14 / blocked=24 / sent=0 / runtime=0`;上述全部仍是人工送件前草稿,不是 owner response、live evidence、reload、restart、backup、restore、Telegram send、alert smoke、host write 或 runtime gate | | 原則 | 低摩擦分階段;文件、schema、read-only evidence 優先;不做 runtime enforcement、不切 primary | | P0 主控板 | `docs/workplans/2026-06-04-iwooos-security-governance-p0.md` | @@ -390,6 +391,7 @@ headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner respons | IwoooS posture projection Owner Packet 數字同步 | 本地完成 | `iwooos-posture-projection.snapshot.json`、`iwooos_posture_projection_v1.schema.json` 與 `security-mirror-progress-guard.py` 已同步 `high_value_config_owner_packet_count=3`、`high_value_config_owner_packet_c0_packet_count=2` | 這是 committed evidence / schema / guard drift closure,不是前端 bundle、CD、runtime gate、owner request sent、owner response received / accepted 或 production write;不需要 production browser smoke | | 高價值配置 Owner Packet 收件預檢 | 本地完成 | `high-value-config-owner-packet-intake-preflight.snapshot.json` 已固定 `packet_count=3`、`c0_packet_count=2`、`dispatch_preflight_check_count=9`、`reviewer_intake_lane_count=5`、`required_owner_field_total=27`、`blocked_request_count=16`,並由 `security-mirror-progress-guard.py` 鎖住 packet ids、check ids、lane ids 與 false flags | 這是 request dispatch 前的只讀預檢與 reviewer intake lanes,不是 request sent、owner response received / accepted、reviewer queue write、Nginx reload、DNS / TLS change、workflow 修改、host write、active scan、production write 或 runtime gate;不需要 production browser smoke | | 高價值配置 Owner Request 草稿包 | 本地完成 | `high-value-config-owner-request-draft.snapshot.json` 已固定 `request_draft_count=3`、`c0_request_draft_count=2`、`handoff_envelope_field_count=11`、`required_owner_field_total=27`、`forbidden_payload_count=12`、`request_sent_count=0`,並由 `security-mirror-progress-guard.py` 鎖住 request ids、handoff fields 與 false flags | 這是人工送件前草稿與 handoff envelope,不是 request sent、recipient confirmed、audit event emitted、owner response received / accepted、reviewer queue write、Nginx reload、DNS / TLS change、workflow 修改、host write、active scan、production write 或 runtime gate;不需要 production browser smoke | +| agent-bounty-protocol Owner Request Draft | 本地完成 | `agent-bounty-owner-request-draft.snapshot.json` 已固定 `request_draft_count=11`、`control_boundary_request_count=4`、`product_surface_request_count=7`、`write_capable_request_draft_count=8`、`treasury_related_request_draft_count=4`、`mcp_a2a_related_request_draft_count=5`、`required_owner_field_count=22`、`forbidden_input_count=25`、`blocked_action_count=28`、`request_sent_count=0`、`owner_response_received_count=0`、`runtime_gate_count=0`,並由 `security-mirror-progress-guard.py` 鎖住 request ids、blocked actions 與 false flags | 這是 agent-bounty-protocol repo / refs、deployment、product surface、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic 的人工送件前 request draft,不是 request sent、owner response received / accepted、repo push、refs sync、workflow 修改、secret collection、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、external send、host write、production write 或 runtime gate;不需要 production browser smoke | | Public Gateway live conf 匯出請求包 | 本地完成 | `public-gateway-live-conf-export-request.snapshot.json` 已固定 `export_request_count=3`、`c0_export_request_count=2`、`redaction_rule_count=8`、`redacted_export_received_count=0`、`raw_live_conf_stored_count=0`,並由 `security-mirror-progress-guard.py` 鎖住 export ids、redaction rules 與 false flags | 這是 owner-provided redacted export request draft,不是 request sent、live conf received、rendered diff ready、`nginx -t`、Nginx reload、route smoke、DNS / TLS probe、certbot renew、host write、production write 或 runtime gate;不需要 production browser smoke | | Public Gateway redacted export 收件預檢 | 本地完成 | `public-gateway-redacted-export-intake-preflight.snapshot.json` 已固定 `intake_candidate_count=3`、`c0_intake_candidate_count=2`、`validation_check_count=10`、`rejection_guard_count=12`、`reviewer_intake_lane_count=5`、`redacted_export_received_count=0`、`accepted_redacted_export_count=0`,並由 `security-mirror-progress-guard.py` 鎖住 intake ids、validation checks、rejection guards、reviewer lanes 與 false flags | 這是 redacted export 收件前預檢,不是 request sent、recipient confirmed、redacted export received / accepted、raw live conf stored、rendered diff ready、`nginx -t`、Nginx reload、route smoke、DNS / TLS probe、certbot renew、host write、production write 或 runtime gate;不需要 production browser smoke | | Public Gateway rendered diff / nginx gate 草稿 | 本地完成 | `public-gateway-rendered-diff-gate-draft.snapshot.json` 已固定 `diff_gate_candidate_count=3`、`c0_diff_gate_candidate_count=2`、`preflight_stage_count=7`、`blocked_action_count=14`、`redacted_export_accepted_count=0`、`rendered_diff_ready_count=0`、`nginx_test_executed_count=0`、`runtime_gate_count=0`,並由 `security-mirror-progress-guard.py` 鎖住 diff gate ids、preflight stages、blocked actions 與 false flags | 這是 rendered diff / nginx / route smoke 分階段 gate 草稿,不是 redacted export accepted、rendered diff ready、`nginx -t`、Nginx reload、route smoke、DNS / TLS probe、certbot renew、host write、production write 或 runtime gate;不需要 production browser smoke | diff --git a/docs/security/agent-bounty-owner-request-draft.snapshot.json b/docs/security/agent-bounty-owner-request-draft.snapshot.json new file mode 100644 index 000000000..3ac2b952a --- /dev/null +++ b/docs/security/agent-bounty-owner-request-draft.snapshot.json @@ -0,0 +1,2622 @@ +{ + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "execution_boundaries": { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "auth_abuse_boundary_accepted": false, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classification_accepted": false, + "db_migration_authorized": false, + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_message_authorized": false, + "github_comment_authorized": false, + "host_write_authorized": false, + "live_evidence_received": false, + "not_authorization": true, + "owner_response_accepted": false, + "owner_response_received": false, + "payout_authorized": false, + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_refs_truth_accepted": false, + "request_sent": false, + "runtime_execution_authorized": false, + "runtime_gate": false, + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "staking_action_authorized": false, + "telegram_send_authorized": false, + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false + }, + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "generated_at": "2026-06-14T23:55:00+08:00", + "git_commit": "069d93b2", + "next_steps": [ + "人工送件前確認 product / security / source-control / deployment / external-agent / treasury owner role。", + "owner 只能提供脫敏 repo refs、dirty workspace disposition、deployment boundary、auth / abuse boundary、MCP / A2A boundary、treasury boundary 與 validation plan。", + "收到回覆後先做欄位完整性、敏感 payload 隔離、source-control / runtime / financial action 拒收與 reviewer checklist;不得直接 deploy、claim、submit、daemon、payout 或 send notification。" + ], + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "product_name": "agent-bounty-protocol", + "request_drafts": [ + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "確認 canonical repo、dirty workspace disposition、workflow / runner / secret name owner;不得 push、sync refs 或建立 repo。", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Repo / refs / workflow boundary", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:repo_refs_boundary", + "request_kind": "source_control_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "repo_refs_boundary", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "確認 production host、compose directory、domain / TLS、health smoke 與 rollback owner;不得 deploy、restart 或 migration。", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Production / compose / domain boundary", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:deployment_boundary", + "request_kind": "deployment_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "https://agent.wooo.work", + "/api/v1/health" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "deployment_boundary", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "確認 task、agent、webhook、traffic、treasury、admin、cron 資料分級;只收 metadata,不收 raw payload 或 secret。", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [ + "task / bounty / solution metadata", + "agent identity / reputation / negotiation state", + "MCP tool calls / A2A protocol events", + "webhook / traffic / scout evidence", + "settlement / staking / treasury / Stripe", + "admin / login / traffic dashboard", + "cron / daemon / ecosystem hunter" + ], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Data classification / evidence intake boundary", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": true, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:data_classification_boundary", + "request_kind": "data_classification_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "data_classification_boundary", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": true, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": false + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "確認外部 agent 自主行為、settlement、staking、payout、withdrawal 與 notification owner;不得 claim、submit、daemon、send 或 payout。", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [ + "MCP tool calls / A2A protocol events", + "settlement / staking / treasury / Stripe" + ], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "MCP / A2A / external agent / treasury boundary", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": true, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:external_agent_treasury_boundary", + "request_kind": "external_agent_treasury_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/api/mcp/[tool]", + "/api/a2a/*", + "/admin/treasury", + "/api/admin/withdraw" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "external_agent_treasury_boundary", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": true, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "public and marketplace-facing surface only; no bounty payout or external claim/submit authorization in this handoff", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Public And Task Surface", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:public-and-task-surface", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/", + "/tasks/[id]", + "/tasks/create", + "/showcase", + "/showcase/[id]", + "/leaderboard", + "/explorer", + "/traffic", + "/ico" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "public-and-task-surface", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": false + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "metadata can be indexed as route evidence; it does not authorize agent execution or credential exposure", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Well Known Agent Metadata", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:well-known-agent-metadata", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/.well-known/agent-card.json", + "/.well-known/ai-plugin.json", + "/.well-known/mcp.json", + "/.well-known/openapi.yaml" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "well-known-agent-metadata", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": false + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "MCP tool gateway requires owner response, auth boundary and abuse controls before any runtime use; this handoff is read-only", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Mcp And Open Task Api", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": true, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:mcp-and-open-task-api", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/api/mcp/[tool]", + "/api/mcp/agent_card", + "/api/mcp/create_human_task", + "/api/mcp/submit_bid", + "/api/open-tasks" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "mcp-and-open-task-api", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "external agent, settlement, staking and dispute routes stay locked until owner approval and follow-up runtime gate", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "A2A Agent Protocol", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": true, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:a2a-agent-protocol", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/api/a2a/arbitrate", + "/api/a2a/directory/sync", + "/api/a2a/dispute", + "/api/a2a/launchpad/create", + "/api/a2a/launchpad/projects", + "/api/a2a/mcp/discover", + "/api/a2a/negotiate", + "/api/a2a/reputation/verify", + "/api/a2a/rpc", + "/api/a2a/settle", + "/api/a2a/staking/deposit", + "/api/a2a/staking/withdraw" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "a2a-agent-protocol", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": true, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "cron and daemon behavior is observe-only in IwoooS; no schedule enable, external send, claim, submit, payout or self-replication is authorized", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Automation And Cron", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": true, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:automation-and-cron", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/api/cron/a2a-discovery", + "/api/cron/a2a-dispatcher", + "/api/cron/a2a-inviter", + "/api/cron/a2a-swarm", + "/api/cron/bidding-evaluator", + "/api/cron/judge-agent", + "/api/cron/lead-gen", + "/api/cron/reaper", + "/api/cron/self-replicate", + "/api/cron/sentience-check", + "/api/cron/treasury-alert" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "automation-and-cron", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "admin, treasury and withdraw surfaces require RBAC / auth / financial owner response; IwoooS only lists them as scope", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Admin And Treasury", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:admin-and-treasury", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/admin", + "/admin/traffic", + "/admin/treasury", + "/api/admin/health", + "/api/admin/simulate", + "/api/admin/treasury/stats", + "/api/admin/withdraw", + "/login" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "admin-and-treasury", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": true, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + }, + { + "action_buttons_allowed": false, + "active_scan_authorized": false, + "affected_scope": "pending_affected_scope", + "auth_abuse_boundary_accepted": false, + "auth_abuse_boundary_ref": null, + "auto_claim_authorized": false, + "auto_submit_authorized": false, + "blocked_actions": [ + "modify_agent_bounty_repo", + "commit_agent_bounty_changes", + "push_agent_bounty_refs", + "sync_refs", + "create_github_repo", + "change_workflow", + "collect_secret_value", + "read_env_file", + "deploy_production", + "restart_compose", + "run_db_migration", + "run_active_scan", + "run_credentialed_scan", + "start_daemon", + "enable_cron", + "auto_claim", + "auto_submit", + "send_external_agent_message", + "send_telegram_notification", + "send_discord_notification", + "post_github_comment", + "execute_payout", + "execute_withdrawal", + "share_database", + "share_session", + "bind_rbac", + "enable_runtime_gate", + "add_awooop_action_button" + ], + "boundary": "traffic, scout and webhook evidence must be redacted metadata only; no webhook secret or payload body collection", + "canonical_repo_ref": null, + "compose_restart_authorized": false, + "credentialed_scan_authorized": false, + "cron_enable_authorized": false, + "daemon_start_authorized": false, + "data_classes": [], + "data_classification_accepted": false, + "db_migration_authorized": false, + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "deploy_authorized": false, + "deployment_boundary_accepted": false, + "deployment_boundary_ref": null, + "discord_send_authorized": false, + "env_file_read_authorized": false, + "external_agent_boundary_accepted": false, + "external_agent_boundary_ref": null, + "external_agent_message_authorized": false, + "followup_owner": "pending_followup_owner", + "forbidden_inputs": [ + ".env content", + "database URL value", + "API key value", + "MCP API key value", + "E2B API key value", + "Telegram bot token value", + "Telegram chat id value", + "Discord webhook value", + "GitHub token value", + "Stripe secret value", + "wallet private key", + "seed phrase", + "cookie", + "session", + "auth header", + "raw webhook payload", + "raw traffic payload", + "raw agent prompt or transcript", + "claim or submit execution request", + "payout or withdraw execution request", + "deploy command request", + "compose restart request", + "DB migration request", + "repo push request", + "refs sync request" + ], + "github_comment_authorized": false, + "host_write_authorized": false, + "label": "Webhooks And Traffic", + "live_evidence_received": false, + "maintenance_window": "pending_maintenance_window", + "mcp_a2a_related_scope": false, + "not_approval": true, + "owner_response_accepted": false, + "owner_response_received": false, + "owner_role_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "followup_owner" + ], + "payout_authorized": false, + "priority": "P0", + "production_deploy_authorized": false, + "production_write_authorized": false, + "recipient_confirmed": false, + "redacted_evidence_refs": [], + "refs_sync_authorized": false, + "repo_creation_authorized": false, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "repo_refs_truth_accepted": false, + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "request_id": "agent_bounty_owner_request:webhooks-and-traffic", + "request_kind": "product_surface_boundary", + "request_sent": false, + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "requires_live_evidence": true, + "rollback_owner": "pending_rollback_owner", + "routes": [ + "/api/traffic", + "/api/webhooks/github", + "/api/webhooks/stripe", + "/api/scout/draft", + "/api/scout/issue-exists", + "/api/intents/stream", + "/api/v1/health" + ], + "runtime_execution_authorized": false, + "runtime_gate": false, + "scope_id": "webhooks-and-traffic", + "secret_value_collection_allowed": false, + "settlement_treasury_accepted": false, + "settlement_treasury_boundary_ref": null, + "shared_database_authorized": false, + "shared_rbac_authorized": false, + "shared_session_authorized": false, + "source_evidence_refs": [ + "docs/security/iwooos-posture-projection.snapshot.json", + "docs/workplans/2026-06-04-iwooos-security-governance-p0.md", + "apps/web/src/app/[locale]/iwooos/page.tsx", + "apps/web/messages/zh-TW.json", + "/Users/ogt/Documents/agent-bounty-protocol/README.md", + "/Users/ogt/Documents/agent-bounty-protocol/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/apps/web/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/mcp-server/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/packages/contracts/package.json", + "/Users/ogt/Documents/agent-bounty-protocol/docker-compose.yml" + ], + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "staking_action_authorized": false, + "status": "draft_not_dispatched", + "telegram_send_authorized": false, + "treasury_related_scope": false, + "validation_plan": "pending_validation_plan", + "webhook_secret_change_authorized": false, + "withdrawal_authorized": false, + "workflow_modification_authorized": false, + "write_capable_scope": true + } + ], + "request_fields": [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval" + ], + "required_owner_fields": [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner" + ], + "schema_version": "agent_bounty_owner_request_draft_v1", + "source_handoff_schema_version": "agent_bounty_iwooos_onboarding_handoff_v1", + "source_handoff_status": "draft_waiting_owner_review", + "status": "owner_request_draft_ready_not_dispatched", + "summary": { + "action_button_count": 0, + "active_scan_authorized_count": 0, + "auth_abuse_boundary_accepted_count": 0, + "auto_claim_authorized_count": 0, + "auto_submit_authorized_count": 0, + "blocked_action_count": 28, + "compose_restart_authorized_count": 0, + "control_boundary_request_count": 4, + "credentialed_scan_authorized_count": 0, + "cron_enable_authorized_count": 0, + "daemon_start_authorized_count": 0, + "data_classification_accepted_count": 0, + "db_migration_authorized_count": 0, + "deploy_authorized_count": 0, + "deployment_boundary_accepted_count": 0, + "discord_send_authorized_count": 0, + "env_file_read_authorized_count": 0, + "external_agent_boundary_accepted_count": 0, + "external_agent_message_authorized_count": 0, + "forbidden_input_count": 25, + "github_comment_authorized_count": 0, + "host_write_authorized_count": 0, + "live_evidence_received_count": 0, + "live_evidence_required_request_count": 11, + "mcp_a2a_related_request_draft_count": 5, + "owner_response_accepted_count": 0, + "owner_response_received_count": 0, + "owner_role_field_count": 13, + "payout_authorized_count": 0, + "product_surface_request_count": 7, + "production_deploy_authorized_count": 0, + "production_write_authorized_count": 0, + "recipient_confirmed_count": 0, + "refs_sync_authorized_count": 0, + "repo_creation_authorized_count": 0, + "repo_refs_truth_accepted_count": 0, + "request_draft_count": 11, + "request_field_count": 26, + "request_sent_count": 0, + "required_owner_field_count": 22, + "runtime_execution_authorized_count": 0, + "runtime_gate_count": 0, + "secret_value_collection_allowed_count": 0, + "settlement_treasury_accepted_count": 0, + "shared_database_authorized_count": 0, + "shared_rbac_authorized_count": 0, + "shared_session_authorized_count": 0, + "staking_action_authorized_count": 0, + "telegram_send_authorized_count": 0, + "treasury_related_request_draft_count": 4, + "webhook_secret_change_authorized_count": 0, + "withdrawal_authorized_count": 0, + "workflow_modification_authorized_count": 0, + "write_capable_request_draft_count": 8 + } +} diff --git a/docs/security/high-value-config-control-coverage.snapshot.json b/docs/security/high-value-config-control-coverage.snapshot.json index 6eef11724..3ba0ebde3 100644 --- a/docs/security/high-value-config-control-coverage.snapshot.json +++ b/docs/security/high-value-config-control-coverage.snapshot.json @@ -266,15 +266,17 @@ "category_id": "agent_bounty_protocol_runtime", "control_tier": "C0", "coverage_percent": 68, - "coverage_status": "onboarding_handoff_ready_needs_runtime_owner", - "current_gap": "尚未收到 runtime / MCP / A2A / treasury / payout owner response;runtime gate 必須維持 0。", + "coverage_status": "owner_request_draft_ready_needs_runtime_owner", + "current_gap": "owner request draft 已固定 11 份草稿;尚未收到 runtime / MCP / A2A / treasury / payout owner response,runtime gate 必須維持 0。", "evidence_refs": [ "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md", "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md", + "docs/security/agent-bounty-owner-request-draft.snapshot.json", "docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md" ], "label": "agent-bounty-protocol runtime / MCP / A2A / treasury boundary", - "next_owner_action": "補 repo owner、external agent owner、treasury owner、runtime gate owner 與 validation plan。", + "next_owner_action": "補 repo owner、external agent owner、treasury owner、runtime gate owner、maintenance window、rollback owner 與 validation plan。", "owner_response_accepted": false, "owner_response_received": false, "owner_response_required": true, @@ -456,7 +458,8 @@ "evidence_refs": [ "docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md", "docs/security/VIBEWORK-IWOOOS-ONBOARDING-HANDOFF.md", - "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md" + "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md", + "docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md" ], "label": "AWOOOI / AwoooP / IwoooS / VibeWork / other product runtime routes", "next_owner_action": "補 AWOOOI、AwoooP、IwoooS、VibeWork、agent-bounty-protocol 與公開網站 owner response。", @@ -567,8 +570,8 @@ "websocket_route_change_authorized": false, "workflow_modification_authorized": false }, - "generated_at": "2026-06-14T17:21:00+08:00", - "git_commit": "3db8d53d", + "generated_at": "2026-06-14T23:55:00+08:00", + "git_commit": "069d93b2", "lowest_coverage_categories": [ { "category_id": "docker_compose_systemd_host_config", diff --git a/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md b/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md index beee87711..b8f03e585 100644 --- a/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md +++ b/docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md @@ -699,6 +699,7 @@ Alert / Sentry / SigNoz / Gitea / Market Watch / Operator | `docs/security/ssh-network-owner-request-draft.snapshot.json` + `scripts/security/ssh-network-owner-request-draft.py` | SSH / Firewall / Network Access Owner Request Draft 已本地完成;承接 SSH / network repo-only 清冊,固定 16 份 request draft、6 份 write-capable request draft、16 份需 live evidence request、23 欄 request fields、13 欄 required owner fields 與 16 類 blocked action;request sent、recipient confirmed、owner response received / accepted、live access state、firewall / port change、NetworkPolicy apply、NodePort change、WireGuard change、host write、runtime gate、action buttons 仍全部為 `0` | 這是人工送件前 request draft,不是 request sent、owner response received / accepted、live host read、host keyscan、known_hosts patch、firewall / port change、NetworkPolicy apply、NodePort change、WireGuard change、secret collection、host write、production write 或 runtime gate | | `docs/security/backup-restore-owner-request-draft.snapshot.json` + `scripts/security/backup-restore-owner-request-draft.py` | Backup / Restore / Escrow Owner Request Draft 已本地完成;承接 backup / restore repo-only 清冊,固定 38 份 request draft、27 份 write-capable request draft、38 份需 live evidence request、24 欄 request fields、14 欄 required owner fields 與 18 類 blocked action;request sent、recipient confirmed、owner response received / accepted、live backup evidence、backup run、restore run、offsite sync、escrow marker write、retention change、runtime gate、action buttons 仍全部為 `0` | 這是人工送件前 request draft,不是 request sent、owner response received / accepted、backup run、restore run、offsite sync、remote delete、credential escrow marker write、retention change、restic prune、rclone config、Velero restore / backup、secret collection、host write、production write 或 runtime gate | | `docs/security/monitoring-owner-request-draft.snapshot.json` + `scripts/security/monitoring-owner-request-draft.py` | Monitoring / Alerting / Observability Owner Request Draft 已本地完成;承接 monitoring repo-only 清冊,固定 60 份 request draft、11 份 write-capable request draft、60 份需 live evidence request、24 欄 request fields、14 欄 required owner fields 與 24 類 blocked action;request sent、recipient confirmed、owner response received / accepted、live evidence、reload、receiver route change、silence change、Telegram send、alert chain smoke、runtime gate、action buttons 仍全部為 `0` | 這是人工送件前 request draft,不是 request sent、owner response received / accepted、Prometheus reload、Alertmanager reload、Grafana import、SigNoz apply、Sentry deploy、Langfuse change、OTEL reload、receiver route change、silence change、Telegram send、live alert fire、alert chain smoke、secret collection、host write、production write 或 runtime gate | +| `docs/security/agent-bounty-owner-request-draft.snapshot.json` + `scripts/security/agent-bounty-owner-request-draft.py` | agent-bounty-protocol Owner Request Draft 已本地完成;承接 onboarding handoff,固定 11 份 request draft、4 份 control boundary、7 份 product surface、8 份 write-capable request draft、4 份 treasury-related request draft、5 份 MCP / A2A-related request draft、22 欄 required owner fields、25 類 forbidden input 與 28 類 blocked action;request sent、recipient confirmed、owner response received / accepted、repo refs truth、deployment boundary、data classification、external agent boundary、treasury boundary、runtime gate、action buttons 仍全部為 `0` | 這是人工送件前 request draft,不是 request sent、owner response received / accepted、repo push、refs sync、workflow 修改、secret collection、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、external send、host write、production write 或 runtime gate | | `docs/evaluations/ai_agent_live_read_model_gate_2026-06-11.json` + `GET /api/v1/agents/agent-live-read-model-gate` | P2-403B AgentSession / Redis Streams live read model gate;定義 safe fields、Redis envelope、worker gate、rollback plan 與 no-write smoke,不連 DB、不讀寫 Redis、不啟動 worker | #### 3.2.1c 2026-06-11 AI Agent 主動營運委派與版本生命週期契約 @@ -849,6 +850,7 @@ Repo / registry / release notes / K8s / host / observability / backup evidence 80. 建立 SSH / Firewall / Network Access Owner Request Draft。✅ 本地完成;新增 `ssh-network-owner-request-draft.py`、snapshot 與說明文件,將 16 個 SSH / network access surface 轉成 `request_draft_count=16`、`write_capable_request_draft_count=6`、`live_evidence_required_request_count=16`、`request_field_count=23`、`required_owner_field_count=13`、`blocked_action_count=16` 的人工送件前草稿;request sent、recipient confirmed、owner response received / accepted、live access state、host keyscan、known_hosts patch、firewall / port change、NetworkPolicy apply、NodePort change、WireGuard change、secret collection、host write、runtime gate、action buttons 仍全部為 `0`。這不是 request sent、owner response received / accepted、live host read、host keyscan、known_hosts patch、firewall / port change、NetworkPolicy apply、NodePort change、WireGuard change、secret collection、host write、production write 或 runtime gate。 81. 建立 Backup / Restore / Escrow Owner Request Draft。✅ 本地完成;新增 `backup-restore-owner-request-draft.py`、snapshot 與說明文件,將 38 個 backup / restore / escrow surface 轉成 `request_draft_count=38`、`write_capable_request_draft_count=27`、`live_evidence_required_request_count=38`、`request_field_count=24`、`required_owner_field_count=14`、`blocked_action_count=18` 的人工送件前草稿;request sent、recipient confirmed、owner response received / accepted、live backup evidence、backup run、restore run、offsite sync、remote delete、credential escrow marker write、retention change、secret collection、host write、runtime gate、action buttons 仍全部為 `0`。這不是 request sent、owner response received / accepted、backup run、restore run、offsite sync、remote delete、credential escrow marker write、retention change、restic prune、rclone config、Velero restore / backup、secret collection、host write、production write 或 runtime gate。 82. 建立 Monitoring / Alerting / Observability Owner Request Draft。✅ 本地完成;新增 `monitoring-owner-request-draft.py`、snapshot 與說明文件,將 60 個 monitoring / alerting / observability surface 轉成 `request_draft_count=60`、`write_capable_request_draft_count=11`、`live_evidence_required_request_count=60`、`request_field_count=24`、`required_owner_field_count=14`、`blocked_action_count=24` 的人工送件前草稿;request sent、recipient confirmed、owner response received / accepted、live evidence、Prometheus reload、Alertmanager reload、Grafana import、SigNoz apply、Sentry deploy、Langfuse change、OTEL reload、receiver route change、silence change、Telegram send、live alert fire、alert chain smoke、secret collection、host write、runtime gate、action buttons 仍全部為 `0`。這不是 request sent、owner response received / accepted、reload、deploy、receiver route change、silence change、Telegram send、alert chain smoke、host write、production write 或 runtime gate。 +83. 建立 agent-bounty-protocol Owner Request Draft。✅ 本地完成;新增 `agent-bounty-owner-request-draft.py`、snapshot 與說明文件,將 repo / refs、deployment、data classification、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic 轉成 `request_draft_count=11`、`control_boundary_request_count=4`、`product_surface_request_count=7`、`write_capable_request_draft_count=8`、`treasury_related_request_draft_count=4`、`mcp_a2a_related_request_draft_count=5`、`required_owner_field_count=22`、`forbidden_input_count=25`、`blocked_action_count=28` 的人工送件前草稿;request sent、recipient confirmed、owner response received / accepted、repo push、refs sync、workflow 修改、secret collection、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、external send、host write、runtime gate、action buttons 仍全部為 `0`。這不是 request sent、owner response received / accepted、repo / refs / workflow action、deployment、MCP / A2A runtime、financial action、production write 或 runtime gate。 #### 3.2.1d 2026-06-11 Agent 互動、學習與成長證據面 @@ -4825,3 +4827,16 @@ Trigger commit `f5cd37b7` 與 deploy marker `0ba92357` 已把 governance UI 的 - P0 總帳、供應鏈進度、Monitoring 清冊、IwoooS 配置控管總清單、coverage 矩陣與 MASTER artifact 表已同步 P1-13。 **裁決:** 這是人工送件前 request draft,不是 request sent、recipient confirmed、owner response received / accepted、live evidence、Prometheus reload、Alertmanager reload、Grafana import、SigNoz apply、Sentry deploy、Langfuse change、OTEL reload、receiver route change、silence change、Telegram send、live alert fire、alert chain smoke、secret collection、host write、active scan、production write 或 runtime gate;IwoooS headline 仍維持 `64%`,active runtime gate 仍 `0`。 + +### 2026-06-14 23:55 (台北) — §3.2 / §5 — 新增 agent-bounty-protocol Owner Request Draft — 把 MCP / A2A / treasury 邊界轉成人工送件草稿 + +**觸發**:`agent-bounty-protocol` 已納入 IwoooS 只讀視野,但既有 handoff 仍停在 onboarding package。由於它包含外部 agent、MCP / A2A、cron / daemon、webhook、admin / treasury、claim / submit 與 payout / withdrawal 風險,需要先轉成 owner request draft,但仍不得讀 `.env`、改 repo、deploy、啟動 daemon、claim、submit、payout 或 send notification。 + +**已推進:** +- 新增 `scripts/security/agent-bounty-owner-request-draft.py`,讀取 `docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json`,產生 11 份 owner request draft。 +- 新增 `docs/security/agent-bounty-owner-request-draft.snapshot.json`,固定 `request_draft_count=11`、`control_boundary_request_count=4`、`product_surface_request_count=7`、`write_capable_request_draft_count=8`、`treasury_related_request_draft_count=4`、`mcp_a2a_related_request_draft_count=5`、`required_owner_field_count=22`、`forbidden_input_count=25`、`blocked_action_count=28`。 +- 新增 `docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md`,說明 request draft 類型、owner 必填欄位、forbidden inputs、blocked actions、完成度與 0 / false 邊界。 +- `security-mirror-progress-guard.py` 已鎖住新 snapshot 的 schema、summary、execution false flags、request ids、blocked actions 與每份草稿 false flags。 +- 高價值配置 coverage、agent-bounty onboarding handoff、IwoooS 配置控管總清單、P0 主控板、供應鏈進度與 MASTER artifact 表已同步 P0-23。 + +**裁決:** 這是人工送件前 request draft,不是 request sent、recipient confirmed、owner response received / accepted、repo push、refs sync、workflow 修改、secret collection、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、external send、host write、active scan、production write 或 runtime gate;IwoooS headline 仍維持 `64%`,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 0226ad38a..c9eec4a95 100644 --- a/docs/workplans/2026-06-04-iwooos-security-governance-p0.md +++ b/docs/workplans/2026-06-04-iwooos-security-governance-p0.md @@ -22,6 +22,7 @@ | 最新 P2-D2 AwoooP Runs fallback 文案基準 | code `7f6028c3`、deploy marker `bf016e91`、CD `2590`、code-review `2591`;Runs / Callback / Source Flow fallback 文案已正式驗證 | | 最新 AwoooP Tenants 全域產品資產台帳 D1 基準 | code `fef94df8`、deploy marker `180a6543`、code-review `2967`、CD `2966`;正式 API 顯示產品 / 專案 `16`、網站 / 服務入口 `31`、source-control candidate repo `10`,已納入 `2026fifa.wooo.work`、WOOO Open Design、n8n、Grist、Vault、Ollama、Monitor 與 AWOOOI API / AIOps 服務入口;owner response / runtime gate / action button 仍 `0` | | 最新 P0 Public Gateway / DNS TLS / K8s 配置控管基準 | P0-15 `5068654d` live conf 匯出請求包、P0-16 `f856df1c` redacted export 收件預檢、P0-17 `762f73a6` rendered diff / nginx gate 草稿、P0-19 `551d8144` DNS / TLS / certbot owner confirmation request 草稿、P0-20 `e8876c45` K8s / ArgoCD manifest repo-only 清冊、P0-21 `e8de19d7` K8s / ArgoCD owner request draft;Public Gateway 三段固定 requests / candidates `3`、C0 `2`,DNS / TLS 固定 owner confirmation requests `4`、C0 `4`,K8s manifest 固定 files `49`、C0 `36`、YAML `45`、kinds `20`,K8s owner request 固定 drafts `4`、C0 `3`;request sent、owner response received / accepted、redacted export received / accepted、raw conf stored、rendered diff ready、`nginx -t`、reload、DNS query、TLS probe、certbot renew、ArgoCD sync、kubectl action、route smoke、runtime gate、action button 全部 `0` | +| 最新 P0 agent-bounty-protocol 配置控管基準 | onboarding handoff 已固定 `product_scope_handoff_only`、owner response / runtime gate 全部 `false`;本輪新增 owner request draft,固定 `drafts=11`、`control=4`、`surface=7`、`write_capable=8`、`treasury=4`、`mcp_a2a=5`、`owner_fields=22`、`forbidden_inputs=25`、`blocked_actions=28`、request sent / received / accepted / repo push / refs sync / deploy / claim / submit / payout / daemon / cron / runtime gate 全部 `0` | | 最新 P1 Docker / systemd / Host Service 配置控管基準 | repo-only inventory 已固定 `surface=9`、`write_capable=3`、`live_evidence_required=8`、成熟度 `42% -> 50%`;本輪新增 owner request draft,固定 `drafts=9`、`owner_fields=12`、`blocked_actions=14`、request sent / received / accepted / live evidence / restart window / rollback owner / host write / runtime gate 全部 `0` | | 最新 P1 SSH / Firewall / Network Access 配置控管基準 | repo-only inventory 已固定 `surface=16`、`write_capable=6`、`live_evidence_required=16`、成熟度 `48% -> 54%`;本輪新增 owner request draft,固定 `drafts=16`、`owner_fields=13`、`blocked_actions=16`、request sent / received / accepted / live access state / firewall / port change / NetworkPolicy / NodePort / WireGuard / host write / runtime gate 全部 `0` | | 最新 P1 Backup / Restore / Escrow 配置控管基準 | repo-only inventory 已固定 `surface=38`、`write_capable=27`、`live_evidence_required=38`、成熟度 `52% -> 58%`;本輪新增 owner request draft,固定 `drafts=38`、`owner_fields=14`、`blocked_actions=18`、request sent / received / accepted / backup run / restore run / offsite sync / remote delete / escrow marker / retention change / runtime gate 全部 `0` | @@ -232,6 +233,7 @@ S4.9 是目前 IwoooS 64% 能往前的第一優先 gate。驗收前所有 count | P1 | SSH / Firewall / Network Access owner request draft | 16 個 repo-only surface 已轉成人工送件前草稿,涵蓋 SSH target、known_hosts、CI deploy SSH、sudoers、NetworkPolicy、NodePort、WireGuard 與 alert SSH action | request sent、owner response、live access state、keyscan、known_hosts patch、firewall / port change、NetworkPolicy apply、NodePort change、WireGuard change 全部維持 0 / false | | P1 | Backup / Restore / Escrow owner request draft | 38 個 repo-only surface 已轉成人工送件前草稿,涵蓋 backup、restore、offsite、credential escrow、retention、Velero、alert / health 與 DR runbook | request sent、owner response、backup run、restore run、offsite sync、remote delete、escrow marker write、retention change 全部維持 0 / false | | P1 | Monitoring / Alerting / Observability owner request draft | 60 個 repo-only surface 已轉成人工送件前草稿,涵蓋 Prometheus、Alertmanager、Grafana、SigNoz、Sentry、Langfuse、OTEL、Telegram / notification 與 alert smoke | request sent、owner response、live evidence、reload、receiver route change、silence change、Telegram send、alert chain smoke 全部維持 0 / false | +| P0 | agent-bounty-protocol owner request draft | 11 份 owner request draft 已完成,涵蓋 repo / refs、deployment、data classification、MCP / A2A、cron / daemon、admin / treasury、webhook / traffic | request sent、owner response、repo push、refs sync、workflow change、secret collection、deploy、claim / submit、payout / withdrawal、cron / daemon 全部維持 0 / false | | P1 | Kali 112 維護窗口草案 | 1994 pending updates、`networking.service` failed、服務硬化 0/4、rollback、post-check | P1-7 草案已完成;不 `apt upgrade`、不 restart | | P1 | 111 / 168 主機 scope 補強 | P1-8 已補 `DEV-HOSTS-111-168-SCOPE-HANDOFF.md`、snapshot 與 schema;scope、maintenance window、credential handling、rollback owner、validation 指標已可交接 | observe-only;不 credentialed scan、不改 route / CORS / firewall / service | | P1 | VibeWork 納入 IwoooS | P1-9 已補 `VIBEWORK-IWOOOS-ONBOARDING-HANDOFF.md`、snapshot 與 schema;repo、product、surface、owner、evidence refs、資料分級、部署邊界與獨立產品邊界已可交接 | 繁中 docs/specs;不合併產品責任、不部署、不改 refs | @@ -306,6 +308,7 @@ P1 只讀重盤階段整體完成度:`70%`。它代表 freshness / inventory / | P1-11 | SSH / Firewall / Network Access owner request draft | 已新增 `SSH-NETWORK-OWNER-REQUEST-DRAFT.md`、`ssh-network-owner-request-draft.snapshot.json` 與產生器;16 個 surface、6 個 write-capable、16 個需 live evidence、13 個 owner 必填欄位、16 類 blocked action | 草稿 artifact `100%`;request sent / received / accepted、live access state、keyscan、known_hosts patch、firewall / port change、NetworkPolicy / NodePort / WireGuard 變更、host write、runtime gate 仍全部 `0 / false` | | P1-12 | Backup / Restore / Escrow owner request draft | 已新增 `BACKUP-RESTORE-OWNER-REQUEST-DRAFT.md`、`backup-restore-owner-request-draft.snapshot.json` 與產生器;38 個 surface、27 個 write-capable、38 個需 live evidence、14 個 owner 必填欄位、18 類 blocked action | 草稿 artifact `100%`;request sent / received / accepted、backup run、restore run、offsite sync、remote delete、escrow marker write、retention change、runtime gate 仍全部 `0 / false` | | P1-13 | Monitoring / Alerting / Observability owner request draft | 已新增 `MONITORING-OWNER-REQUEST-DRAFT.md`、`monitoring-owner-request-draft.snapshot.json` 與產生器;60 個 surface、11 個 write-capable、60 個需 live evidence、14 個 owner 必填欄位、24 類 blocked action | 草稿 artifact `100%`;request sent / received / accepted、live evidence、Prometheus / Alertmanager reload、receiver route change、silence change、Telegram send、alert chain smoke、runtime gate 仍全部 `0 / false` | +| P0-23 | agent-bounty-protocol owner request draft | 已新增 `AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md`、`agent-bounty-owner-request-draft.snapshot.json` 與產生器;11 份 request draft、4 份 control boundary、7 份 product surface、8 份 write-capable、4 份 treasury-related、5 份 MCP / A2A-related、22 個 owner 必填欄位、25 類 forbidden input、28 類 blocked action | 草稿 artifact `100%`;request sent / received / accepted、repo push、refs sync、workflow change、secret collection、deploy、compose restart、DB migration、claim / submit、payout / withdrawal、cron / daemon、host write、runtime gate 仍全部 `0 / false` | ## 7. 2026-06-04 本輪驗證紀錄 diff --git a/scripts/security/agent-bounty-owner-request-draft.py b/scripts/security/agent-bounty-owner-request-draft.py new file mode 100644 index 000000000..35ce02e62 --- /dev/null +++ b/scripts/security/agent-bounty-owner-request-draft.py @@ -0,0 +1,435 @@ +#!/usr/bin/env python3 +""" +IwoooS agent-bounty-protocol owner request draft 產生器。 + +本工具讀取 agent-bounty-protocol onboarding handoff snapshot,將 repo / refs、 +deployment、產品 surface、資料分級、MCP / A2A / treasury 邊界轉成人工送件前 +request draft。它不讀 agent-bounty-protocol 工作樹、不讀 .env、不部署、不啟動 +cron / daemon、不 claim / submit、不 payout / withdraw。 +""" + +from __future__ import annotations + +import argparse +import json +import subprocess +import sys +from datetime import datetime, timedelta, timezone +from pathlib import Path +from typing import Any + + +TAIPEI = timezone(timedelta(hours=8)) + +REQUEST_FIELDS = [ + "request_id", + "scope_id", + "label", + "request_kind", + "priority", + "source_handoff_ref", + "source_evidence_refs", + "routes", + "boundary", + "data_classes", + "owner_role_fields", + "decision", + "decision_reason", + "affected_scope", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", + "not_approval", +] + +REQUIRED_OWNER_FIELDS = [ + "product_owner_role_or_team", + "security_owner_role_or_team", + "source_control_owner_role_or_team", + "deployment_owner_role_or_team", + "data_classification_owner_role_or_team", + "external_agent_boundary_owner_role_or_team", + "settlement_or_treasury_owner_role_or_team", + "notification_owner_role_or_team", + "surface_scope", + "decision", + "decision_reason", + "redacted_evidence_refs", + "canonical_repo_ref", + "repo_dirty_disposition", + "deployment_boundary_ref", + "auth_abuse_boundary_ref", + "external_agent_boundary_ref", + "settlement_treasury_boundary_ref", + "maintenance_window", + "rollback_owner", + "validation_plan", + "followup_owner", +] + +CONTROL_REQUESTS = [ + { + "scope_id": "repo_refs_boundary", + "label": "Repo / refs / workflow boundary", + "request_kind": "source_control_boundary", + "priority": "P0", + "routes": [], + "boundary": "確認 canonical repo、dirty workspace disposition、workflow / runner / secret name owner;不得 push、sync refs 或建立 repo。", + "data_classes": [], + "write_capable": True, + "treasury_related": False, + "mcp_a2a_related": False, + }, + { + "scope_id": "deployment_boundary", + "label": "Production / compose / domain boundary", + "request_kind": "deployment_boundary", + "priority": "P0", + "routes": ["https://agent.wooo.work", "/api/v1/health"], + "boundary": "確認 production host、compose directory、domain / TLS、health smoke 與 rollback owner;不得 deploy、restart 或 migration。", + "data_classes": [], + "write_capable": True, + "treasury_related": False, + "mcp_a2a_related": False, + }, + { + "scope_id": "data_classification_boundary", + "label": "Data classification / evidence intake boundary", + "request_kind": "data_classification_boundary", + "priority": "P0", + "routes": [], + "boundary": "確認 task、agent、webhook、traffic、treasury、admin、cron 資料分級;只收 metadata,不收 raw payload 或 secret。", + "data_classes": "all", + "write_capable": False, + "treasury_related": True, + "mcp_a2a_related": True, + }, + { + "scope_id": "external_agent_treasury_boundary", + "label": "MCP / A2A / external agent / treasury boundary", + "request_kind": "external_agent_treasury_boundary", + "priority": "P0", + "routes": ["/api/mcp/[tool]", "/api/a2a/*", "/admin/treasury", "/api/admin/withdraw"], + "boundary": "確認外部 agent 自主行為、settlement、staking、payout、withdrawal 與 notification owner;不得 claim、submit、daemon、send 或 payout。", + "data_classes": ["MCP tool calls / A2A protocol events", "settlement / staking / treasury / Stripe"], + "write_capable": True, + "treasury_related": True, + "mcp_a2a_related": True, + }, +] + + +FALSE_COUNTER_KEYS = [ + "request_sent_count", + "recipient_confirmed_count", + "owner_response_received_count", + "owner_response_accepted_count", + "live_evidence_received_count", + "repo_refs_truth_accepted_count", + "data_classification_accepted_count", + "deployment_boundary_accepted_count", + "external_agent_boundary_accepted_count", + "settlement_treasury_accepted_count", + "auth_abuse_boundary_accepted_count", + "runtime_gate_count", + "runtime_execution_authorized_count", + "production_deploy_authorized_count", + "repo_creation_authorized_count", + "refs_sync_authorized_count", + "workflow_modification_authorized_count", + "secret_value_collection_allowed_count", + "env_file_read_authorized_count", + "active_scan_authorized_count", + "credentialed_scan_authorized_count", + "deploy_authorized_count", + "compose_restart_authorized_count", + "db_migration_authorized_count", + "daemon_start_authorized_count", + "cron_enable_authorized_count", + "auto_claim_authorized_count", + "auto_submit_authorized_count", + "external_agent_message_authorized_count", + "telegram_send_authorized_count", + "discord_send_authorized_count", + "github_comment_authorized_count", + "payout_authorized_count", + "withdrawal_authorized_count", + "staking_action_authorized_count", + "webhook_secret_change_authorized_count", + "shared_database_authorized_count", + "shared_session_authorized_count", + "shared_rbac_authorized_count", + "host_write_authorized_count", + "production_write_authorized_count", + "action_button_count", +] + +FALSE_DRAFT_KEYS = [ + "request_sent", + "recipient_confirmed", + "owner_response_received", + "owner_response_accepted", + "live_evidence_received", + "repo_refs_truth_accepted", + "data_classification_accepted", + "deployment_boundary_accepted", + "external_agent_boundary_accepted", + "settlement_treasury_accepted", + "auth_abuse_boundary_accepted", + "runtime_gate", + "runtime_execution_authorized", + "production_deploy_authorized", + "repo_creation_authorized", + "refs_sync_authorized", + "workflow_modification_authorized", + "secret_value_collection_allowed", + "env_file_read_authorized", + "active_scan_authorized", + "credentialed_scan_authorized", + "deploy_authorized", + "compose_restart_authorized", + "db_migration_authorized", + "daemon_start_authorized", + "cron_enable_authorized", + "auto_claim_authorized", + "auto_submit_authorized", + "external_agent_message_authorized", + "telegram_send_authorized", + "discord_send_authorized", + "github_comment_authorized", + "payout_authorized", + "withdrawal_authorized", + "staking_action_authorized", + "webhook_secret_change_authorized", + "shared_database_authorized", + "shared_session_authorized", + "shared_rbac_authorized", + "host_write_authorized", + "production_write_authorized", + "action_buttons_allowed", +] + + +def git_short_sha(root: Path) -> str: + try: + result = subprocess.run( + ["git", "rev-parse", "--short", "HEAD"], + cwd=root, + check=True, + capture_output=True, + text=True, + ) + return result.stdout.strip() + except Exception: + return "unknown" + + +def load_json(path: Path) -> dict[str, Any]: + return json.loads(path.read_text(encoding="utf-8")) + + +def request_draft( + *, + scope_id: str, + label: str, + request_kind: str, + priority: str, + routes: list[str], + boundary: str, + data_classes: list[str], + write_capable: bool, + treasury_related: bool, + mcp_a2a_related: bool, + handoff: dict[str, Any], +) -> dict[str, Any]: + draft = { + "request_id": f"agent_bounty_owner_request:{scope_id}", + "status": "draft_not_dispatched", + "scope_id": scope_id, + "label": label, + "request_kind": request_kind, + "priority": priority, + "source_handoff_ref": "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "source_evidence_refs": handoff["source_evidence_refs"], + "routes": routes, + "boundary": boundary, + "data_classes": data_classes, + "write_capable_scope": write_capable, + "treasury_related_scope": treasury_related, + "mcp_a2a_related_scope": mcp_a2a_related, + "requires_live_evidence": True, + "request_fields": REQUEST_FIELDS, + "owner_role_fields": handoff["owner_response_handoff"]["required_response_fields"], + "required_owner_fields": REQUIRED_OWNER_FIELDS, + "forbidden_inputs": handoff["owner_response_handoff"]["forbidden_inputs"], + "blocked_actions": handoff["forbidden_actions"], + "decision": "pending_owner_decision", + "decision_reason": "pending_decision_reason", + "affected_scope": "pending_affected_scope", + "redacted_evidence_refs": [], + "canonical_repo_ref": None, + "repo_dirty_disposition": "pending_repo_dirty_disposition", + "deployment_boundary_ref": None, + "auth_abuse_boundary_ref": None, + "external_agent_boundary_ref": None, + "settlement_treasury_boundary_ref": None, + "maintenance_window": "pending_maintenance_window", + "rollback_owner": "pending_rollback_owner", + "validation_plan": "pending_validation_plan", + "followup_owner": "pending_followup_owner", + "not_approval": True, + } + for key in FALSE_DRAFT_KEYS: + draft[key] = False + return draft + + +def build_report(root: Path, handoff: dict[str, Any], generated_at: str | None) -> dict[str, Any]: + report_time = generated_at or datetime.now(TAIPEI).isoformat(timespec="seconds") + data_types = [item["data_type"] for item in handoff["data_classification_intake"]] + drafts: list[dict[str, Any]] = [] + + for control in CONTROL_REQUESTS: + data_classes = data_types if control["data_classes"] == "all" else list(control["data_classes"]) + drafts.append( + request_draft( + scope_id=control["scope_id"], + label=control["label"], + request_kind=control["request_kind"], + priority=control["priority"], + routes=list(control["routes"]), + boundary=control["boundary"], + data_classes=data_classes, + write_capable=bool(control["write_capable"]), + treasury_related=bool(control["treasury_related"]), + mcp_a2a_related=bool(control["mcp_a2a_related"]), + handoff=handoff, + ) + ) + + for surface in handoff["product_surfaces"]: + surface_id = surface["surface_id"] + treasury_related = surface_id in {"a2a-agent-protocol", "admin-and-treasury"} + mcp_a2a_related = surface_id in {"mcp-and-open-task-api", "a2a-agent-protocol", "automation-and-cron"} + write_capable = surface_id in { + "mcp-and-open-task-api", + "a2a-agent-protocol", + "automation-and-cron", + "admin-and-treasury", + "webhooks-and-traffic", + } + drafts.append( + request_draft( + scope_id=surface_id, + label=surface_id.replace("-", " ").title(), + request_kind="product_surface_boundary", + priority="P0", + routes=surface["routes"], + boundary=surface["boundary"], + data_classes=[], + write_capable=write_capable, + treasury_related=treasury_related, + mcp_a2a_related=mcp_a2a_related, + handoff=handoff, + ) + ) + + write_capable_drafts = [item for item in drafts if item["write_capable_scope"]] + treasury_related_drafts = [item for item in drafts if item["treasury_related_scope"]] + mcp_a2a_related_drafts = [item for item in drafts if item["mcp_a2a_related_scope"]] + + summary = { + "request_draft_count": len(drafts), + "control_boundary_request_count": len(CONTROL_REQUESTS), + "product_surface_request_count": len(handoff["product_surfaces"]), + "write_capable_request_draft_count": len(write_capable_drafts), + "treasury_related_request_draft_count": len(treasury_related_drafts), + "mcp_a2a_related_request_draft_count": len(mcp_a2a_related_drafts), + "live_evidence_required_request_count": len(drafts), + "request_field_count": len(REQUEST_FIELDS), + "required_owner_field_count": len(REQUIRED_OWNER_FIELDS), + "owner_role_field_count": len(handoff["owner_response_handoff"]["required_response_fields"]), + "forbidden_input_count": len(handoff["owner_response_handoff"]["forbidden_inputs"]), + "blocked_action_count": len(handoff["forbidden_actions"]), + } + for key in FALSE_COUNTER_KEYS: + summary[key] = 0 + + execution_boundaries = { + ("action_buttons_allowed" if key == "action_button_count" else key.replace("_count", "")): False + for key in FALSE_COUNTER_KEYS + } + execution_boundaries["not_authorization"] = True + + return { + "schema_version": "agent_bounty_owner_request_draft_v1", + "generated_at": report_time, + "git_commit": git_short_sha(root), + "source_handoff_schema_version": handoff["schema_version"], + "source_handoff_status": handoff["status"], + "status": "owner_request_draft_ready_not_dispatched", + "product_name": handoff["summary"]["product_name"], + "summary": summary, + "execution_boundaries": execution_boundaries, + "request_fields": REQUEST_FIELDS, + "required_owner_fields": REQUIRED_OWNER_FIELDS, + "owner_role_fields": handoff["owner_response_handoff"]["required_response_fields"], + "forbidden_inputs": handoff["owner_response_handoff"]["forbidden_inputs"], + "blocked_actions": handoff["forbidden_actions"], + "request_drafts": drafts, + "next_steps": [ + "人工送件前確認 product / security / source-control / deployment / external-agent / treasury owner role。", + "owner 只能提供脫敏 repo refs、dirty workspace disposition、deployment boundary、auth / abuse boundary、MCP / A2A boundary、treasury boundary 與 validation plan。", + "收到回覆後先做欄位完整性、敏感 payload 隔離、source-control / runtime / financial action 拒收與 reviewer checklist;不得直接 deploy、claim、submit、daemon、payout 或 send notification。", + ], + } + + +def main() -> int: + parser = argparse.ArgumentParser(description="IwoooS agent-bounty owner request draft 產生器") + parser.add_argument("--root", default=".", help="repo root") + parser.add_argument( + "--handoff-report", + default="docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + help="agent-bounty-iwooos-onboarding handoff JSON", + ) + parser.add_argument("--output", help="寫出 JSON 報告") + parser.add_argument("--generated-at", help="固定報告時間,供 committed snapshot 使用") + args = parser.parse_args() + + root = Path(args.root).resolve() + handoff = load_json(root / args.handoff_report) + report = build_report(root, handoff, args.generated_at) + payload = json.dumps(report, ensure_ascii=False, indent=2, sort_keys=True) + + if args.output: + output = Path(args.output) + output.parent.mkdir(parents=True, exist_ok=True) + output.write_text(payload + "\n", encoding="utf-8") + else: + print(payload) + + summary = report["summary"] + print( + "AGENT_BOUNTY_OWNER_REQUEST_DRAFT_OK " + f"drafts={summary['request_draft_count']} " + f"write_capable={summary['write_capable_request_draft_count']} " + f"treasury={summary['treasury_related_request_draft_count']} " + f"fields={summary['required_owner_field_count']} " + f"sent={summary['request_sent_count']} " + f"runtime_gate={summary['runtime_gate_count']}", + file=sys.stderr, + ) + return 0 + + +if __name__ == "__main__": + sys.exit(main()) diff --git a/scripts/security/high-value-config-control-coverage.py b/scripts/security/high-value-config-control-coverage.py index 47ea73d39..8140da4c9 100644 --- a/scripts/security/high-value-config-control-coverage.py +++ b/scripts/security/high-value-config-control-coverage.py @@ -103,15 +103,17 @@ CONTROL_STATUS_BY_CATEGORY = { "next_owner_action": "補 restore drill approval package、offsite owner、escrow owner、retention owner、rollback owner 與 no-secret-value evidence。", }, "agent_bounty_protocol_runtime": { - "coverage_status": "onboarding_handoff_ready_needs_runtime_owner", + "coverage_status": "owner_request_draft_ready_needs_runtime_owner", "coverage_percent": 68, "evidence_refs": [ "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md", "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md", + "docs/security/agent-bounty-owner-request-draft.snapshot.json", "docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md", ], - "current_gap": "尚未收到 runtime / MCP / A2A / treasury / payout owner response;runtime gate 必須維持 0。", - "next_owner_action": "補 repo owner、external agent owner、treasury owner、runtime gate owner 與 validation plan。", + "current_gap": "owner request draft 已固定 11 份草稿;尚未收到 runtime / MCP / A2A / treasury / payout owner response,runtime gate 必須維持 0。", + "next_owner_action": "補 repo owner、external agent owner、treasury owner、runtime gate owner、maintenance window、rollback owner 與 validation plan。", }, "monitoring_alerting_observability": { "coverage_status": "repo_only_inventory_ready_needs_live_route_evidence", @@ -166,6 +168,7 @@ CONTROL_STATUS_BY_CATEGORY = { "docs/security/IWOOOS-CONFIG-CONTROL-INVENTORY.md", "docs/security/VIBEWORK-IWOOOS-ONBOARDING-HANDOFF.md", "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md", + "docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md", ], "current_gap": "跨產品 owner response 尚未 accepted;產品 route / admin / webhook 仍需逐產品補證。", "next_owner_action": "補 AWOOOI、AwoooP、IwoooS、VibeWork、agent-bounty-protocol 與公開網站 owner response。", diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py index 444f17ab8..4bc709df9 100755 --- a/scripts/security/security-mirror-progress-guard.py +++ b/scripts/security/security-mirror-progress-guard.py @@ -88,6 +88,9 @@ def validate(root: Path) -> None: rollout_policy = load_json(security_dir / "security-rollout-policy.snapshot.json") iwooos_projection = load_json(security_dir / "iwooos-posture-projection.snapshot.json") high_value_config_coverage = load_json(security_dir / "high-value-config-control-coverage.snapshot.json") + agent_bounty_owner_request_draft = load_json( + security_dir / "agent-bounty-owner-request-draft.snapshot.json" + ) high_value_config_owner_packet_intake = load_json( security_dir / "high-value-config-owner-packet-intake-preflight.snapshot.json" ) @@ -2492,6 +2495,214 @@ def validate(root: Path) -> None: [item["category_id"] for item in high_value_config_coverage["coverage_categories"]], "agent_bounty_protocol_runtime", ) + agent_bounty_category = next( + item + for item in high_value_config_coverage["coverage_categories"] + if item["category_id"] == "agent_bounty_protocol_runtime" + ) + assert_equal( + "high_value_config_coverage.coverage_categories.agent_bounty.coverage_percent", + agent_bounty_category["coverage_percent"], + 68, + ) + assert_equal( + "high_value_config_coverage.coverage_categories.agent_bounty.coverage_status", + agent_bounty_category["coverage_status"], + "owner_request_draft_ready_needs_runtime_owner", + ) + for evidence_ref in [ + "docs/security/AGENT-BOUNTY-IWOOOS-ONBOARDING-HANDOFF.md", + "docs/security/agent-bounty-iwooos-onboarding-handoff.snapshot.json", + "docs/security/AGENT-BOUNTY-OWNER-REQUEST-DRAFT.md", + "docs/security/agent-bounty-owner-request-draft.snapshot.json", + ]: + assert_contains( + "high_value_config_coverage.coverage_categories.agent_bounty.evidence_refs", + agent_bounty_category["evidence_refs"], + evidence_ref, + ) + assert_equal( + "agent_bounty_owner_request_draft.schema", + agent_bounty_owner_request_draft["schema_version"], + "agent_bounty_owner_request_draft_v1", + ) + assert_equal( + "agent_bounty_owner_request_draft.status", + agent_bounty_owner_request_draft["status"], + "owner_request_draft_ready_not_dispatched", + ) + assert_equal( + "agent_bounty_owner_request_draft.product_name", + agent_bounty_owner_request_draft["product_name"], + "agent-bounty-protocol", + ) + assert_equal( + "agent_bounty_owner_request_draft.source_handoff_schema_version", + agent_bounty_owner_request_draft["source_handoff_schema_version"], + "agent_bounty_iwooos_onboarding_handoff_v1", + ) + assert_equal( + "agent_bounty_owner_request_draft.source_handoff_status", + agent_bounty_owner_request_draft["source_handoff_status"], + "draft_waiting_owner_review", + ) + expected_agent_bounty_owner_request_summary = { + "request_draft_count": 11, + "control_boundary_request_count": 4, + "product_surface_request_count": 7, + "write_capable_request_draft_count": 8, + "treasury_related_request_draft_count": 4, + "mcp_a2a_related_request_draft_count": 5, + "live_evidence_required_request_count": 11, + "request_field_count": 26, + "required_owner_field_count": 22, + "owner_role_field_count": 13, + "forbidden_input_count": 25, + "blocked_action_count": 28, + "request_sent_count": 0, + "recipient_confirmed_count": 0, + "owner_response_received_count": 0, + "owner_response_accepted_count": 0, + "live_evidence_received_count": 0, + "repo_refs_truth_accepted_count": 0, + "data_classification_accepted_count": 0, + "deployment_boundary_accepted_count": 0, + "external_agent_boundary_accepted_count": 0, + "settlement_treasury_accepted_count": 0, + "auth_abuse_boundary_accepted_count": 0, + "runtime_gate_count": 0, + "runtime_execution_authorized_count": 0, + "production_deploy_authorized_count": 0, + "repo_creation_authorized_count": 0, + "refs_sync_authorized_count": 0, + "workflow_modification_authorized_count": 0, + "secret_value_collection_allowed_count": 0, + "env_file_read_authorized_count": 0, + "active_scan_authorized_count": 0, + "credentialed_scan_authorized_count": 0, + "deploy_authorized_count": 0, + "compose_restart_authorized_count": 0, + "db_migration_authorized_count": 0, + "daemon_start_authorized_count": 0, + "cron_enable_authorized_count": 0, + "auto_claim_authorized_count": 0, + "auto_submit_authorized_count": 0, + "external_agent_message_authorized_count": 0, + "telegram_send_authorized_count": 0, + "discord_send_authorized_count": 0, + "github_comment_authorized_count": 0, + "payout_authorized_count": 0, + "withdrawal_authorized_count": 0, + "staking_action_authorized_count": 0, + "webhook_secret_change_authorized_count": 0, + "shared_database_authorized_count": 0, + "shared_session_authorized_count": 0, + "shared_rbac_authorized_count": 0, + "host_write_authorized_count": 0, + "production_write_authorized_count": 0, + "action_button_count": 0, + } + for key, expected in expected_agent_bounty_owner_request_summary.items(): + assert_equal( + f"agent_bounty_owner_request_draft.summary.{key}", + agent_bounty_owner_request_draft["summary"][key], + expected, + ) + for key, value in agent_bounty_owner_request_draft["execution_boundaries"].items(): + if key == "not_authorization": + assert_true(f"agent_bounty_owner_request_draft.execution_boundaries.{key}", value) + else: + assert_false(f"agent_bounty_owner_request_draft.execution_boundaries.{key}", value) + assert_equal( + "agent_bounty_owner_request_draft.request_drafts.count", + len(agent_bounty_owner_request_draft["request_drafts"]), + 11, + ) + agent_bounty_request_ids = [ + item["request_id"] for item in agent_bounty_owner_request_draft["request_drafts"] + ] + for request_id in [ + "agent_bounty_owner_request:repo_refs_boundary", + "agent_bounty_owner_request:deployment_boundary", + "agent_bounty_owner_request:mcp-and-open-task-api", + "agent_bounty_owner_request:a2a-agent-protocol", + "agent_bounty_owner_request:automation-and-cron", + "agent_bounty_owner_request:admin-and-treasury", + "agent_bounty_owner_request:webhooks-and-traffic", + ]: + assert_contains( + "agent_bounty_owner_request_draft.request_drafts", + agent_bounty_request_ids, + request_id, + ) + for draft in agent_bounty_owner_request_draft["request_drafts"]: + assert_equal( + f"agent_bounty_owner_request_draft.{draft['request_id']}.required_owner_fields", + len(draft["required_owner_fields"]), + 22, + ) + assert_equal( + f"agent_bounty_owner_request_draft.{draft['request_id']}.forbidden_inputs", + len(draft["forbidden_inputs"]), + 25, + ) + assert_equal( + f"agent_bounty_owner_request_draft.{draft['request_id']}.blocked_actions", + len(draft["blocked_actions"]), + 28, + ) + assert_true( + f"agent_bounty_owner_request_draft.{draft['request_id']}.not_approval", + draft["not_approval"], + ) + for false_key in [ + "request_sent", + "recipient_confirmed", + "owner_response_received", + "owner_response_accepted", + "live_evidence_received", + "repo_refs_truth_accepted", + "data_classification_accepted", + "deployment_boundary_accepted", + "external_agent_boundary_accepted", + "settlement_treasury_accepted", + "auth_abuse_boundary_accepted", + "runtime_gate", + "runtime_execution_authorized", + "production_deploy_authorized", + "repo_creation_authorized", + "refs_sync_authorized", + "workflow_modification_authorized", + "secret_value_collection_allowed", + "env_file_read_authorized", + "active_scan_authorized", + "credentialed_scan_authorized", + "deploy_authorized", + "compose_restart_authorized", + "db_migration_authorized", + "daemon_start_authorized", + "cron_enable_authorized", + "auto_claim_authorized", + "auto_submit_authorized", + "external_agent_message_authorized", + "telegram_send_authorized", + "discord_send_authorized", + "github_comment_authorized", + "payout_authorized", + "withdrawal_authorized", + "staking_action_authorized", + "webhook_secret_change_authorized", + "shared_database_authorized", + "shared_session_authorized", + "shared_rbac_authorized", + "host_write_authorized", + "production_write_authorized", + "action_buttons_allowed", + ]: + assert_false( + f"agent_bounty_owner_request_draft.{draft['request_id']}.{false_key}", + draft[false_key], + ) nginx_gateway_category = next( item for item in high_value_config_coverage["coverage_categories"]