docs(security): add workflow secret owner response intake [skip ci]

This commit is contained in:
Your Name
2026-05-17 22:49:36 +08:00
parent a5a762416e
commit 532731eb9e
29 changed files with 960 additions and 49 deletions

View File

@@ -1,3 +1,40 @@
## 2026-05-17 | 資安供應鏈 S4.12Workflow / Secret Name Owner Response 收件包
**背景**S4.1 / S4.2 / S4.3 已把 workflow、webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret 名稱 inventory 與 redacted export request 文件化;但 owner 真正回覆時仍缺一份可填、可驗收、可拒收的 intake 格式。為了維持低摩擦,本輪不新增第 36 個主 contract、不新增第 9 個 approval item、不收 secret value、不使用 write token、不修改 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / repo secret、不啟用 GitHub hosted runner、不同步 refs、不切 primary只新增 S4.12 owner response 收件包。
**完成**
- 新增 `docs/schemas/source_control_workflow_secret_name_owner_response_v1.schema.json`
- 新增 `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json``docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md`
- 定義 5 個 response templates對應 webhook redacted export、runner label owner、deploy key redacted export、branch protection / CODEOWNERS 與 repository secret name parity。
- 定義 8 個 acceptance checks 與 10 個 rejection rules避免 owner response 夾帶 secret value、write token、runner token、deploy key material、未脫敏 webhook payload、workflow 修改、runner 啟用、refs sync 或 GitHub primary switch。
- 特別標記 runner lane 的 GitHub hosted minutes 風險:可做 risk review但不授權啟用 GitHub hosted runner也不增加 GitHub Actions 免費額度消耗風險。
- 更新 workflow / secret inventory、export request、manifest、mirror readiness、status rollup、primary readiness gate、approval queue / gate / review packet / follow-up gate、AwoooP checklist、handoff、migration inventory、migration matrix 與 progress使 AwoooP 能只讀顯示 S4.12 response templates。
**仍未完成**
- 尚未收到任何 workflow / secret 名稱 owner response。
- 尚未接受任何 webhook、runner、deploy key、branch protection / CODEOWNERS 或 repository secret name parity disposition。
- 尚未完成實際 redacted export。
- 尚未解開 workflow-secret parity blocker 或 GitHub primary readiness blocker。
**仍禁止**
- 不收 secret value、token value、cookie、session、private key、deploy key material、runner token 或 webhook secret。
- 不保存完整 webhook URL、query token、header / cookie / body payload 或未脫敏截圖。
- 不使用 write token。
- 不修改 workflow、webhook、runner、deploy key、branch protection、CODEOWNERS 或 repository secret。
- 不啟用 GitHub hosted runner不讓此階段消耗 GitHub Actions hosted minutes。
- 不建立 GitHub repo、不修改 visibility、不 sync refs、不 delete refs、不 force push、不切 GitHub primary。
- 不把 S4.12 response packet 當成 workflow 修改、secret 建立、runner 啟用、refs sync 或 primary approval。
**驗證**
- JSON 全量 parse 通過141 個 JSON files。
- S4.12 assertion 通過candidate repos 8 個、in-scope repos 7 個、export requests 7 個、export lanes 5 個、local evidence repos 4 個、workflow files 31 個、referenced secret names 43 個。
- Owner response assertion 通過response templates 5 個、received / accepted / rejected response 皆為 0、acceptance checks 8 個、rejection rules 10 個。
- Safety flag assertion 通過secret value collection、write token、workflow / webhook / runner / deploy key / branch protection / repo secret change、GitHub hosted runner enablement、refs sync、GitHub primary switch 與 action buttons 皆為 false。
- Readiness assertion 通過contract manifest 仍為 35 個主 contracts、mirror readiness 維持 32 ready / 2 partial / 1 contract-only / 0 blocked。
- Approval lane assertion 通過approval queue / review packets / follow-up runtime gate templates 維持 8 / 8 / 8`active_runtime_gates=0``github_primary_ready_count=0`
- `git diff --check` 通過。
- 敏感字串掃描確認本輪未保存 Kali SSH 密碼樣式、常見 token pattern、private key material 或 `GITEA_READONLY_TOKEN` value。
## 2026-05-17 | 資安供應鏈 S4.11Source Control Ref Truth Owner Response 收件包
**背景**`source_control_ref_truth_classification_v1` 已把 `awoooi``clawbot-v5``wooo-aiops` 的 141 個 refs review items 拆成 main/dev truth、deprecated drift、release tag 與 GitHub-only refs review lane但 owner 真正回覆時仍缺一份可填、可驗收、可拒收的 intake 格式。為了維持低摩擦,本輪不新增第 36 個主 contract、不新增第 9 個 approval item、不 fetch、不 push refs、不 delete refs、不 force push、不切 primary只新增 S4.11 owner response 收件包。

View File

@@ -0,0 +1,222 @@
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "urn:awoooi:source-control-workflow-secret-name-owner-response-v1",
"title": "Source Control Workflow / Secret Name Owner Response 收件契約 v1",
"description": "定義 owner 回覆 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / repository secret 名稱 parity 時的收件欄位、驗收規則與拒收規則。此 schema 不授權收集 secret value、使用 write token、修改 workflow/webhook/runner/deploy key/branch protection/secret、建立 repo、sync refs 或切換 GitHub primary。",
"type": "object",
"required": [
"schema_version",
"status",
"date",
"mode",
"runtime_execution_authorized",
"source_contract",
"target_contract",
"source_indexes",
"summary",
"response_templates",
"acceptance_checks",
"rejection_rules",
"allowed_outputs",
"forbidden_actions"
],
"properties": {
"schema_version": {
"const": "source_control_workflow_secret_name_owner_response_v1"
},
"status": {
"type": "string",
"enum": ["draft_waiting_owner_response"]
},
"date": {
"type": "string"
},
"mode": {
"type": "string",
"enum": ["owner_workflow_secret_name_response_intake_only"]
},
"runtime_execution_authorized": {
"type": "boolean",
"const": false
},
"source_contract": {
"type": "string",
"const": "source_control_workflow_secret_name_inventory_v1"
},
"target_contract": {
"type": "string",
"const": "source_control_workflow_secret_name_export_request_v1"
},
"source_indexes": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"summary": {
"type": "object",
"required": [
"owner_response_status",
"candidate_repo_count",
"in_scope_repo_count",
"export_request_count",
"export_lane_count",
"local_evidence_repo_count",
"local_workflow_file_count",
"local_referenced_secret_name_count",
"response_template_count",
"received_response_count",
"accepted_response_count",
"rejected_response_count",
"acceptance_check_count",
"rejection_rule_count",
"secret_value_collection_allowed",
"write_token_allowed",
"workflow_modification_authorized",
"webhook_modification_authorized",
"runner_change_authorized",
"deploy_key_change_authorized",
"branch_protection_change_authorized",
"repo_secret_change_authorized",
"github_hosted_runner_enable_authorized",
"refs_sync_authorized",
"github_primary_switch_authorized",
"action_buttons_allowed"
],
"properties": {
"owner_response_status": {"type": "string", "enum": ["waiting_owner_response"]},
"candidate_repo_count": {"type": "integer", "minimum": 0},
"in_scope_repo_count": {"type": "integer", "minimum": 0},
"export_request_count": {"type": "integer", "minimum": 0},
"export_lane_count": {"type": "integer", "minimum": 0},
"local_evidence_repo_count": {"type": "integer", "minimum": 0},
"local_workflow_file_count": {"type": "integer", "minimum": 0},
"local_referenced_secret_name_count": {"type": "integer", "minimum": 0},
"response_template_count": {"type": "integer", "minimum": 0},
"received_response_count": {"type": "integer", "minimum": 0},
"accepted_response_count": {"type": "integer", "minimum": 0},
"rejected_response_count": {"type": "integer", "minimum": 0},
"acceptance_check_count": {"type": "integer", "minimum": 0},
"rejection_rule_count": {"type": "integer", "minimum": 0},
"secret_value_collection_allowed": {"type": "boolean", "const": false},
"write_token_allowed": {"type": "boolean", "const": false},
"workflow_modification_authorized": {"type": "boolean", "const": false},
"webhook_modification_authorized": {"type": "boolean", "const": false},
"runner_change_authorized": {"type": "boolean", "const": false},
"deploy_key_change_authorized": {"type": "boolean", "const": false},
"branch_protection_change_authorized": {"type": "boolean", "const": false},
"repo_secret_change_authorized": {"type": "boolean", "const": false},
"github_hosted_runner_enable_authorized": {"type": "boolean", "const": false},
"refs_sync_authorized": {"type": "boolean", "const": false},
"github_primary_switch_authorized": {"type": "boolean", "const": false},
"action_buttons_allowed": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"response_templates": {
"type": "array",
"items": {
"type": "object",
"required": [
"template_id",
"lane",
"affected_repos",
"risk",
"covered_repo_count",
"requested_owner_decision",
"required_owner_fields",
"acceptable_decisions",
"minimum_evidence_refs",
"acceptance_criteria",
"rejection_conditions",
"allowed_outputs",
"execution_authorized"
],
"properties": {
"template_id": {"type": "string"},
"lane": {"type": "string"},
"affected_repos": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"risk": {"type": "string"},
"covered_repo_count": {"type": "integer", "minimum": 0},
"requested_owner_decision": {"type": "string"},
"required_owner_fields": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"acceptable_decisions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"minimum_evidence_refs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"acceptance_criteria": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"rejection_conditions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"allowed_outputs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"minItems": 1
},
"acceptance_checks": {
"type": "array",
"items": {
"type": "object",
"required": [
"check_id",
"title",
"required",
"pass_condition",
"failure_lane",
"execution_authorized"
],
"properties": {
"check_id": {"type": "string"},
"title": {"type": "string"},
"required": {"type": "boolean"},
"pass_condition": {"type": "string"},
"failure_lane": {"type": "string"},
"execution_authorized": {"type": "boolean", "const": false}
},
"additionalProperties": false
},
"minItems": 1
},
"rejection_rules": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"allowed_outputs": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
},
"forbidden_actions": {
"type": "array",
"items": {"type": "string"},
"minItems": 1
}
},
"additionalProperties": false
}

View File

@@ -55,7 +55,7 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
| `source_control_ref_truth_classification_v1` | refs diff 真相來源與 deprecated 候選分類S4.11 owner response 收件包 | Repo owner review queue、migration reviewer handoff | approval-only | 只顯示分類、5 個 response templates 與人工判定隊列,不執行 sync/delete/force push |
| `source_control_primary_readiness_gate_v1` | GitHub primary readiness / parity gate | Source-control review、Operator Console、Audit | approval-only | 只顯示 primary blockers、parity gates、rollback ADR 缺口;目前 `primary_ready_count=0` |
| `source_control_primary_rollback_adr_v1` | GitHub primary rollback ADR 草案與 validation window | Source-control review、Operator Console、Audit | approval-only | 只顯示 7 個 repo 的 rollback draft、owner review、validation window不得執行 rollback 或切 primary |
| `source_control_workflow_secret_name_inventory_v1` | workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory gate | Source-control review、Secret hygiene audit、Operator Console | approval-only | 只顯示缺口、S4.2 local evidenceS4.3 redacted export request目前 `inventory_complete_count=0`,不得保存 secret value |
| `source_control_workflow_secret_name_inventory_v1` | workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory gateS4.12 owner response 收件包 | Source-control review、Secret hygiene audit、Operator Console | approval-only | 只顯示缺口、S4.2 local evidenceS4.3 redacted export request 與 5 個 response templates;目前 `inventory_complete_count=0`,不得保存 secret value |
| `local_repo_canonical_probe_v1` | 本機 working tree lineage 比對 | Canonical decision evidence | mirror-only | 不自動合併、不自動建 repo、不刪除 |
| `git_remote_refs_probe_v1` | 指定 repo remote refs read-only probe | Source readiness evidence | mirror-only | 不 fetch、不 push、不自動 mirror |
| `approval_required_event_v1` | 上述事件的高風險 gate | Approval queue、Audit | approval-only | `blocked_until_approved=true` |
@@ -127,6 +127,7 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
| `source_control_reconcile_plan_v1.status=draft_blocked` | `approve_required` | 只顯示 refs reconcile 草案與 gate不執行 sync |
| `source_control_ref_detail_diff_v1.status=draft_blocked` | `observe` | 顯示 branch/tag 明細 diff支援人工 review |
| `source_control_ref_truth_classification_v1.status=draft_blocked` | `approve_required` | 顯示 main/dev 真相來源、drift deprecated 候選、release / UAT tag review lane 與 S4.11 owner response templates不執行分類結果 |
| `source_control_workflow_secret_name_inventory_v1.status=draft_missing_evidence` | `approve_required` | 顯示 S4.2 local evidence、S4.3 export request 與 S4.12 owner response templates不收 secret value、不改 workflow、不啟用 runner |
| `local_repo_canonical_probe_v1.status=unrelated` | `approve_required` | 禁止自動合併,需人工 canonical 判定 |
| `git_remote_refs_probe_v1.status=ok` | `observe` | 可作 source evidence但仍需 GitHub target 與 approval |
| `security_rollout_policy_v1.enforcement_level=mirror_only` | `observe` | 只顯示 policy不阻擋既有流程 |
@@ -182,6 +183,7 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
| Source Control workflow / secret name inventory | `docs/security/source-control-workflow-secret-name-inventory.snapshot.json` / `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-INVENTORY.md` |
| Source Control workflow / secret name local evidence | `docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json` / `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-LOCAL-EVIDENCE.md` |
| Source Control workflow / secret name export request | `docs/security/source-control-workflow-secret-name-export-request.snapshot.json` / `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md` |
| Source Control workflow / secret name owner response 收件包 | `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` / `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` |
| Kali 112 integration status | `docs/security/kali-integration-status.snapshot.json` / `docs/security/KALI-INTEGRATION-STATUS.md` |
| Security finding contract | `docs/security/security-finding-kali-sample.snapshot.json` / `docs/security/SECURITY-FINDING-CONTRACT.md` |
| Kali scan scope approval package | `docs/security/kali-scan-scope-approval.snapshot.json` / `docs/security/KALI-SCAN-SCOPE-APPROVAL-PACKAGE.md` |
@@ -213,5 +215,6 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
2. Security Supply Chain Session 補齊 Gitea 全量 repo inventory 的只讀 token 或管理匯出來源。
3. Security Supply Chain Session 依 S4.10 收到並驗收 7 個 GitHub target owner / visibility / canonical response。
4. Security Supply Chain Session 依 S4.11 收到並驗收 5 個 refs truth owner response templatesresponse 通過也只更新 read-only classification / reconcile / readiness wording。
5. AwoooP 只建立 mirror/read-only policy 入口,不新增 execution action
6. 任一方要把事件升級成實際執行,都必須先產出 `approval_required_event_v1`,並在 `security_approval_queue_v1` 中維持 `blocked_until_approved=true` 直到人工決策完成。
5. Security Supply Chain Session 依 S4.12 收到並驗收 5 個 workflow / secret 名稱 owner response templatesresponse 通過也只更新 read-only inventory / export request / readiness wording
6. AwoooP 只建立 mirror/read-only policy 入口,不新增 execution action。
7. 任一方要把事件升級成實際執行,都必須先產出 `approval_required_event_v1`,並在 `security_approval_queue_v1` 中維持 `blocked_until_approved=true` 直到人工決策完成。

View File

@@ -73,7 +73,7 @@
```text
Kali / Code Review / GitHub / Gitea / Codex
-> security_supply_chain_contract_manifest_v1
-> security_mirror_readiness_v1 / security_mirror_intake_plan_v1 / security_mirror_event_v1 / security_mirror_route_v1 / security_mirror_acceptance_v1 / security_mirror_quarantine_v1 / security_mirror_dry_run_v1 / security_mirror_status_rollup_v1 / security_finding_v1 / kali_scan_scope_approval_v1 / security_approval_queue_v1 / security_approval_gate_v1 / security_approval_decision_record_v1 / security_approval_review_packet_v1 / security_approval_state_transition_v1 / security_followup_runtime_gate_v1 / source_control_primary_readiness_gate_v1 / source_control_primary_rollback_adr_v1 / source_control_workflow_secret_name_inventory_v1 / coding_task_v1 / source_control_migration_event_v1 / gitea_repo_inventory_v1 / local_git_remote_inventory_v1 / github_target_probe_v1 / github_target_decision_v1 / github_target_owner_decision_response_v1 / github_target_repo_approval_package_v1 / security_rollout_policy_v1
-> security_mirror_readiness_v1 / security_mirror_intake_plan_v1 / security_mirror_event_v1 / security_mirror_route_v1 / security_mirror_acceptance_v1 / security_mirror_quarantine_v1 / security_mirror_dry_run_v1 / security_mirror_status_rollup_v1 / security_finding_v1 / kali_scan_scope_approval_v1 / security_approval_queue_v1 / security_approval_gate_v1 / security_approval_decision_record_v1 / security_approval_review_packet_v1 / security_approval_state_transition_v1 / security_followup_runtime_gate_v1 / source_control_primary_readiness_gate_v1 / source_control_primary_rollback_adr_v1 / source_control_workflow_secret_name_inventory_v1 / source_control_workflow_secret_name_owner_response_v1 / coding_task_v1 / source_control_migration_event_v1 / gitea_repo_inventory_v1 / local_git_remote_inventory_v1 / github_target_probe_v1 / github_target_decision_v1 / github_target_owner_decision_response_v1 / github_target_repo_approval_package_v1 / security_rollout_policy_v1
-> AWOOOI ingestion / asset_inventory / AIOps KPI / AOL
-> mirror 到 AwoooP Runtime State / Channel Event / Audit
-> AwoooP Policy / Approval / Exception / Operator Console
@@ -245,7 +245,9 @@ S4.2 local evidence已新增本機只讀 collector 與 snapshot7 個 local
S4.3 export request已新增 `source_control_workflow_secret_name_export_request_v1` supporting schema、snapshot 與人讀版7 個 in-scope repos、5 類 export laneswebhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity。`write_token_allowed=false``secret_value_collection_allowed=false`
AwoooP 初期處理方式:只顯示 inventory lane 缺口、S4.2 local evidence、S4.3 export request、要求 redacted snapshot 與人工 review不得收集 secret value、修改 workflow、rotate secret、sync refs 或切 GitHub primary
S4.12 owner response已新增 `source_control_workflow_secret_name_owner_response_v1` supporting schema、snapshot 與人讀版5 個 response templates 對應 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity。`received_response_count=0``accepted_response_count=0``secret_value_collection_allowed=false``write_token_allowed=false`
AwoooP 初期處理方式:只顯示 inventory lane 缺口、S4.2 local evidence、S4.3 export request、S4.12 owner response templates、要求 redacted snapshot 與人工 review不得收集 secret value、修改 workflow、rotate secret、啟用 GitHub hosted runner、sync refs 或切 GitHub primary。
### `security_mirror_readiness_v1`
@@ -339,7 +341,7 @@ Schema`docs/schemas/security_mirror_status_rollup_v1.schema.json`
Snapshot`docs/security/security-mirror-status-rollup.snapshot.json`
目前 rollup`framework_ready_waiting_approval`35 個 contracts、32 ready、2 partial、1 contract-only、0 blockedapproval queue 仍為 8 items其中 7 pending approval、1 block candidatereview packets 8 筆state transition rules 5 筆follow-up runtime gate templates 8 筆active runtime gates 0 筆GitHub primary candidate repos 8 筆primary ready 0 筆S4.4 rollback ADR repo plans 7 筆、owner approved 0 筆、dry-run completed 0 筆S4.10 GitHub target owner decision response templates 7 筆、received response 0 筆、accepted response 0 筆Gitea inventory 目前 `partial_waiting_authenticated_inventory`public-only repo 2 個、本機可見 Gitea unique repo 4 個、export source options 2 類、S4.6 import acceptance payload 0 筆、S4.7 owner attestation items 5 筆、received attestation 0 筆、S4.9 owner response templates 5 筆、received response 0 筆、quarantine required=true、token value collection allowed=falseworkflow / secret 名稱 inventory candidate repos 8 筆、complete 0 筆S4.2 local evidence repos 4 筆、workflow files 31 筆、referenced secret names 43 筆decision records 目前 0 筆。
目前 rollup`framework_ready_waiting_approval`35 個 contracts、32 ready、2 partial、1 contract-only、0 blockedapproval queue 仍為 8 items其中 7 pending approval、1 block candidatereview packets 8 筆state transition rules 5 筆follow-up runtime gate templates 8 筆active runtime gates 0 筆GitHub primary candidate repos 8 筆primary ready 0 筆S4.4 rollback ADR repo plans 7 筆、owner approved 0 筆、dry-run completed 0 筆S4.10 GitHub target owner decision response templates 7 筆、received response 0 筆、accepted response 0 S4.11 refs truth owner response templates 5 筆、received response 0 筆、accepted response 0 Gitea inventory 目前 `partial_waiting_authenticated_inventory`public-only repo 2 個、本機可見 Gitea unique repo 4 個、export source options 2 類、S4.6 import acceptance payload 0 筆、S4.7 owner attestation items 5 筆、received attestation 0 筆、S4.9 owner response templates 5 筆、received response 0 筆、quarantine required=true、token value collection allowed=falseworkflow / secret 名稱 inventory candidate repos 8 筆、complete 0 筆、S4.12 owner response templates 5 筆、received response 0 筆、accepted response 0 S4.2 local evidence repos 4 筆、workflow files 31 筆、referenced secret names 43 筆decision records 目前 0 筆。
AwoooP 初期處理方式:只顯示階段狀態、下一個 gate 與禁止事項,可寫入 Audit evidence不得把 rollup 當 runtime authorization。
@@ -853,6 +855,8 @@ Console 初期不提供高風險執行按鈕。
2026-05-13 S4.3 workflow / secret name redacted export request 追加:已新增 `docs/schemas/source_control_workflow_secret_name_export_request_v1.schema.json``docs/security/source-control-workflow-secret-name-export-request.snapshot.json``docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md`。本輪只定義 7 個 in-scope repos、5 類 export lanes 的 owner / read-only export 欄位與拒收規則webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity`write_token_allowed=false``secret_value_collection_allowed=false`,不得呼叫 API 或修改 GitHub/Gitea。
2026-05-17 S4.12 workflow / secret name owner response 追加:已新增 `docs/schemas/source_control_workflow_secret_name_owner_response_v1.schema.json``docs/security/source-control-workflow-secret-name-owner-response.snapshot.json``docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md`。目前 5 個 response templates 對應 webhook、runner、deploy key、branch protection / CODEOWNERS 與 repository secret name parityreceived / accepted response 皆為 0。AwoooP 可 mirror 成 owner response intake queue但不得把 response packet 當成 secret value collection、workflow modification、GitHub hosted runner enablement 或 GitHub primary approval。
2026-05-13 S4.4 GitHub primary rollback ADR 追加:已新增 `docs/schemas/source_control_primary_rollback_adr_v1.schema.json``docs/security/source-control-primary-rollback-adr.snapshot.json``docs/security/SOURCE-CONTROL-PRIMARY-ROLLBACK-ADR.md`。本輪只定義 7 個 in-scope repos 的 rollback ADR 草案、precondition、trigger、validation window 與 owner review`owner_approved_count=0``dry_run_completed_count=0``active_cutover_count=0`,不得切 GitHub primary、不得執行 rollback、不得停用 Gitea。
2026-05-13 S4.5 Gitea 認證清冊匯出請求追加:已新增 `docs/schemas/gitea_authenticated_inventory_export_request_v1.schema.json``docs/security/gitea-authenticated-inventory-export-request.snapshot.json``docs/security/GITEA-AUTHENTICATED-INVENTORY-EXPORT-REQUEST.md`。本輪只定義 Gitea 私有 / 內部全量清冊的脫敏匯出請求;目前未認證公開範圍 repo 2 個、本機可見 Gitea unique repo 4 個、覆蓋缺口 2 個、匯出來源選項 2 類;不得保存 token value、不得使用 write token、不得寫入 Gitea、不得建立或刪除 repo、不得 sync refs、不得切 GitHub primary。
@@ -943,6 +947,8 @@ Console 初期不提供高風險執行按鈕。
- [source_control_workflow_secret_name_local_evidence_v1 snapshot](/Users/ogt/awoooi/docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json)
- [Source Control workflow / secret name redacted export request](/Users/ogt/awoooi/docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md)
- [source_control_workflow_secret_name_export_request_v1 snapshot](/Users/ogt/awoooi/docs/security/source-control-workflow-secret-name-export-request.snapshot.json)
- [Source Control workflow / secret name owner response](/Users/ogt/awoooi/docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md)
- [source_control_workflow_secret_name_owner_response_v1 snapshot](/Users/ogt/awoooi/docs/security/source-control-workflow-secret-name-owner-response.snapshot.json)
- [source-control workflow / secret name local collector](/Users/ogt/awoooi/scripts/security/source-control-workflow-secret-name-local-inventory.py)
- [本機 repo canonical lineage snapshot](/Users/ogt/awoooi/docs/security/LOCAL-REPO-CANONICAL-EWOOOC-MOMO-SNAPSHOT.md)
- [local_repo_canonical_probe_v1 snapshot](/Users/ogt/awoooi/docs/security/local-repo-canonical-ewoooc-momo.snapshot.json)
@@ -983,6 +989,7 @@ Console 初期不提供高風險執行按鈕。
- [source_control_workflow_secret_name_inventory_v1 schema](/Users/ogt/awoooi/docs/schemas/source_control_workflow_secret_name_inventory_v1.schema.json)
- [source_control_workflow_secret_name_local_evidence_v1 schema](/Users/ogt/awoooi/docs/schemas/source_control_workflow_secret_name_local_evidence_v1.schema.json)
- [source_control_workflow_secret_name_export_request_v1 schema](/Users/ogt/awoooi/docs/schemas/source_control_workflow_secret_name_export_request_v1.schema.json)
- [source_control_workflow_secret_name_owner_response_v1 schema](/Users/ogt/awoooi/docs/schemas/source_control_workflow_secret_name_owner_response_v1.schema.json)
- [local_repo_canonical_probe_v1 schema](/Users/ogt/awoooi/docs/schemas/local_repo_canonical_probe_v1.schema.json)
- [git_remote_refs_probe_v1 schema](/Users/ogt/awoooi/docs/schemas/git_remote_refs_probe_v1.schema.json)
- [approval_required_event_v1 schema](/Users/ogt/awoooi/docs/schemas/approval_required_event_v1.schema.json)

View File

@@ -27,6 +27,7 @@
| Source Control branch/tag detail diff | `docs/security/SOURCE-CONTROL-REF-DETAIL-DIFF.md` / `docs/security/source-control-ref-detail-diff.snapshot.json` |
| Source Control ref truth classification | `docs/security/SOURCE-CONTROL-REF-TRUTH-CLASSIFICATION.md` / `docs/security/source-control-ref-truth-classification.snapshot.json` |
| Source Control ref truth owner response | `docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md` / `docs/security/source-control-ref-truth-owner-response.snapshot.json` |
| Workflow / secret name owner response | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` / `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` |
| Source Control 遷移矩陣 | `docs/security/SOURCE-CONTROL-MIGRATION-MATRIX.md` |
| Canonical repo 判定表 | `docs/security/SOURCE-CONTROL-CANONICAL-DECISION-TABLE.md` |
@@ -50,6 +51,7 @@
- GitHub target 決策表已建立8 個候選中 7 個需人工批准;其中 `ewoooc``bitan-pharmacy``tsenyang-website` 在 target visibility / owner 決策前不得自動建立或同步。
- GitHub target repo-by-repo approval package 已建立7 個 approval-required targets 拆成 refs reconcile、target 建立 / 授權、internal remote 用途確認三條路徑;此 package 採低摩擦原則,只 gate 高風險執行,不阻擋 read-only evidence。
- Source Control ref truth classification 已建立141 個 refs review items 已拆成 4 個真相來源判定、114 個 drift deprecated 候選、3 個 release tag review、20 個 GitHub-only refs reviewS4.11 已補 5 個 owner response templatesreceived / accepted response 皆為 0。這是人工判定隊列與收件框架不是同步批准。
- Workflow / secret 名稱 owner response 已建立S4.12 補 5 個 response templatesreceived / accepted response 皆為 0這只允許 owner 補 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的 redacted disposition不授權收 secret value、修改 workflow、啟用 GitHub hosted runner 或切 GitHub primary。
- 本機可見 Git working tree 輔助盤點已找到 13 個 repo其中去重後 Gitea repo 4 個、GitHub repo 5 個、110 內部 repo 4 個;此結果可用來補遷移矩陣,但不能取代 Gitea server 全量清單。
因此後續必須先完成「repo/branch/tag/workflow/webhook/permission/secrets 名稱」全量 inventory再逐步 mirror 與驗證。
@@ -80,6 +82,7 @@
| Source Control draft reconcile plan | `docs/security/source-control-reconcile-plan.snapshot.json`,只產生 `draft_blocked` 草案,不授權 refs sync |
| Source Control branch/tag detail diff | `docs/security/source-control-ref-detail-diff.snapshot.json`,保存 3 個 refs-blocked mapped repos 的 branch/tag 明細,不授權 fetch/push |
| Source Control ref truth classification | `docs/security/source-control-ref-truth-classification.snapshot.json`,將 ref diff 轉成單 ref 人工判定隊列,不授權 sync/delete |
| Workflow / secret name owner response | `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json`,固定 5 類 response templates不授權 secret value collection、workflow modification、hosted runner enablement 或 primary switch |
## 1.1 Gitea repo list snapshot
@@ -223,5 +226,6 @@ GitHub target repo-by-repo approval package 已建立於 `docs/security/GITHUB-T
2.`github_target_decision_v1` 對需要人工批准的 target 做 owner / visibility / canonical 決策。
3.`docs/security/SOURCE-CONTROL-REF-TRUTH-CLASSIFICATION.md` 由 repo owner 對 main/dev、release tags、GitHub-only refs 與 drift deprecated 候選逐項判定;仍不 push refs。
4. 標記「可 mirror」、「需人工判斷」、「需封存」、「不可搬」。
5. 產出 GitHub primary ADR定義切換 gate 與 rollback
6. `source_control_migration_event_v1``gitea_repo_inventory_v1``local_git_remote_inventory_v1` mirror 到 AwoooP初期只作為 evidence。
5. 依 S4.12 workflow / secret name owner response 收件包驗收 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity仍不得收 secret value、改 workflow 或啟用 hosted runner
6. 產出 GitHub primary ADR定義切換 gate 與 rollback。
7.`source_control_migration_event_v1``gitea_repo_inventory_v1``local_git_remote_inventory_v1` mirror 到 AwoooP初期只作為 evidence。

View File

@@ -38,7 +38,7 @@ S3.1 開始,實際人工決策紀錄由 `security_approval_decision_record_v1`
| 1 | Redacted finding ingestion | 只批准設計或 draft PR |
| 2 | Safe web crawl | 只批准低噪音 scope 定義 |
| 3 | Gitea owner attestation + read-only inventory | 先依 S4.9 驗收 S4.7 owner response再只批准只讀 inventory 或 redacted admin export |
| 4 | GitHub target decisions | 只批准逐 repo S4.10 response 驗收與決策草案 |
| 4 | GitHub target decisions | 只批准逐 repo S4.10 response 與 S4.12 workflow / secret 名稱 response 驗收與決策草案 |
| 5 | Ref truth review | 只批准 S4.11 owner response 驗收、人工分類與 reconcile 草案 |
| 6 | Credentialed scan | 只允許人工 exception 設計,仍需 runtime gate |
| 7 | Kali full-upgrade / reboot | 只允許維護窗口與 rollback 規劃 |

View File

@@ -35,7 +35,7 @@ S3.0 開始,人工批准範圍由 `security_approval_gate_v1` 承接。S3.1
| 1 | `kali-finding-runtime-ingestion-approval-20260513` | 先接 redacted finding evidence風險低、價值高 |
| 2 | `kali-safe-web-crawl-approval-20260513` | TLS/header/basic crawl 屬低噪音,但仍需批准 scope |
| 3 | `gitea-private-internal-server-side-inventory-2026-05-12` | 先依 S4.9 收到並驗收 S4.7 owner coverage attestation response再審 Gitea 全量版本轉 GitHub 的只讀 inventory gate |
| 4 | `source-control-target-repo-approval-bundle-20260513` | 先依 S4.10 驗收逐 repo owner / visibility / canonical response |
| 4 | `source-control-target-repo-approval-bundle-20260513` | 先依 S4.10 驗收逐 repo owner / visibility / canonical response並依 S4.12 驗收 workflow / secret 名稱 owner response |
| 5 | `source-control-ref-truth-review-bundle-20260513` | 先依 S4.11 驗收 refs truth owner response再看 deprecated / release tag review |
| 6 | `kali-credentialed-scan-approval-20260513` | 需要憑證,風險較高 |
| 7 | `kali-full-upgrade-reboot-approval-20260513` | 需要維護窗口、snapshot、rollback 與 post-check |

View File

@@ -39,7 +39,7 @@ S3.4 開始,等待 runtime gate 時要看哪些前置條件,由 `security_fo
| 1 | Redacted finding ingestion | `design_or_draft_review` | 只審是否可設計或建立 draft PR |
| 2 | Safe web crawl | `low_noise_scan_scope_review` | 只審低噪音 scope 定義 |
| 3 | Gitea owner attestation + read-only inventory | `read_only_inventory_review` | 先依 S4.9 審 S4.7 owner response再審只讀 token 或 redacted export |
| 4 | GitHub target decisions | `design_or_draft_review` | 先審 S4.10 owner response再審 owner / visibility / canonical 草案 |
| 4 | GitHub target decisions | `design_or_draft_review` | 先審 S4.10 owner response 與 S4.12 workflow / secret 名稱 response再審 owner / visibility / canonical 草案 |
| 5 | Ref truth review | `design_or_draft_review` | 先審 S4.11 owner response 驗收,再審人工分類與 reconcile 草案 |
| 6 | Credentialed scan | `manual_exception_review` | 只審 exception 設計 |
| 7 | Kali full-upgrade / reboot | `manual_exception_review` | 只審維護窗口與 rollback 計畫 |

View File

@@ -34,7 +34,7 @@
| Redacted finding ingestion | MEDIUM | 只準備 ingestion adapter 的 redaction / audit 前置條件 |
| Safe web crawl scope | MEDIUM | 只準備 TLS/header/basic crawl 的低噪音 scope |
| Gitea owner attestation + read-only inventory | MEDIUM | 先依 S4.9 驗收 S4.7 owner response再準備 read-only token 或 redacted export inventory |
| GitHub target decision | HIGH | 只準備 S4.10 owner response 驗收、owner / visibility / canonical / workflow parity 決策 |
| GitHub target decision | HIGH | 只準備 S4.10 owner response、S4.12 workflow / secret 名稱 response 驗收、owner / visibility / canonical / workflow parity 決策 |
| Ref truth review | HIGH | 只準備 S4.11 owner response 驗收、refs truth / deprecated / release tag 人工判定 |
| Credentialed scan exception | HIGH | 只準備人工 exception、credential lifecycle 與停用方式 |
| Kali full-upgrade / reboot | HIGH | 只準備維護窗口、snapshot、rollback 與 post-health |

View File

@@ -91,4 +91,6 @@ GitHub target 決策面需同時 mirror S4.10 `GITHUB-TARGET-OWNER-DECISION-RESP
Ref truth 決策面需同時 mirror S4.11 `SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md``source-control-ref-truth-owner-response.snapshot.json`,只顯示 5 個 owner response templates、received / accepted response 皆為 0、8 個 acceptance checks 與 10 個 rejection rules不得把 response packet 當成 refs sync、delete、force push 或 GitHub primary approval。
Workflow / secret 名稱決策面需同時 mirror S4.12 `SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md``source-control-workflow-secret-name-owner-response.snapshot.json`,只顯示 5 個 owner response templates、received / accepted response 皆為 0、8 個 acceptance checks 與 10 個 rejection rules不得把 response packet 當成 secret value 收集、workflow 修改、GitHub hosted runner 啟用或 GitHub primary approval。
整個 S2 不新增 execution router、不新增執行按鈕、不新增 runtime blocker。

View File

@@ -27,10 +27,10 @@
| Review packets | S3.2 已建立8 packets、7 ready for human review、1 block candidate |
| State transitions | S3.3 已建立5 個 decision options 都有 next state且都不授權執行 |
| Follow-up runtime gate templates | S3.4 已建立8 個 templates、0 個 active runtime gates |
| GitHub primary readiness gate | S4.0 已建立8 個 candidate repos、7 個 in-scope blocked、0 個 primary readyS4.10 已補 GitHub target owner decision response 收件包7 個 response templates、owner response 0 筆S4.11 已補 refs truth owner response 收件包5 個 response templates、owner response 0 筆 |
| GitHub primary readiness gate | S4.0 已建立8 個 candidate repos、7 個 in-scope blocked、0 個 primary readyS4.10 已補 GitHub target owner decision response 收件包7 個 response templates、owner response 0 筆S4.11 已補 refs truth owner response 收件包5 個 response templates、owner response 0 筆S4.12 已補 workflow / secret 名稱 owner response 收件包5 個 response templates、owner response 0 筆 |
| GitHub primary rollback ADR | S4.4 已建立7 個 in-scope rollback drafts、0 個 owner approved、0 個 dry-run completed、0 個 active cutover |
| Gitea inventory | S4.5 已補認證清冊匯出請求S4.6 已補匯入驗收契約S4.7 已補 owner coverage attestationS4.8 已把既有 Gitea queue/gate/review packet/follow-up gate 對齊 attestation 先行S4.9 已補 owner response 收件包;目前 status=`partial_waiting_authenticated_inventory`、未認證公開範圍 repos 2 個、本機可見 Gitea unique repos 4 個、匯出來源選項 2 類、匯入驗收 payload 0 筆、owner attestation items 5 個、收到 attestation 0 筆、owner response 0 筆、敏感 payload 必須隔離、允許收集 token value=false |
| Workflow / secret name inventory | S4.1 已建立S4.2 補 4 個 repos、31 個 workflow files、43 個 referenced secret names 的 local evidenceS4.3 補 7 個 repos、5 類 lanes 的 redacted export request0 個 inventory complete、禁止收集 secret value、禁止 write token |
| Workflow / secret name inventory | S4.1 已建立S4.2 補 4 個 repos、31 個 workflow files、43 個 referenced secret names 的 local evidenceS4.3 補 7 個 repos、5 類 lanes 的 redacted export requestS4.12 補 5 個 owner response templates0 個 inventory complete、禁止收集 secret value、禁止 write token |
| Dry-run | `contract_defined_not_executed` |
| Runtime actions | `false` |
| Payload ingestion | `false` |
@@ -63,8 +63,9 @@
4. GitHub target / owner / visibility / canonical先依 S4.10 收到並驗收 7 個 owner decision response templatesreceived / accepted response 目前皆為 0不得把 response packet 當成 repo creation、visibility change、refs sync 或 primary approval。
5. Kali `/execute` 維持 block candidate。
6. Refs truth owner response先依 S4.11 顯示 main/dev truth、deprecated drift、release tag、GitHub-only refs 的 5 個 response templatesreceived / accepted response 目前皆為 0不得把 response packet 當成 refs sync、delete、force push 或 primary approval。
7. GitHub primary readiness blockers 與 rollback ADR 缺口
8. S4.4 GitHub primary rollback ADR 草案:先顯示 7 個 repo 的 rollback owner、validation window 與 triggersowner approval 前不可執行
9. workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口,先看 S4.2 local evidence再依 S4.3 redacted export request 補 webhook / runner / deploy key / branch protection / repository secret parity只保存名稱與 owner不保存 value不使用 write token
7. Workflow / secret 名稱 owner response先依 S4.12 顯示 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的 5 個 response templatesreceived / accepted response 目前皆為 0不得把 response packet 當成 secret value 收集、workflow 修改、GitHub hosted runner 啟用或 primary approval
8. GitHub primary readiness blockers 與 rollback ADR 缺口
9. S4.4 GitHub primary rollback ADR 草案:先顯示 7 個 repo 的 rollback owner、validation window 與 triggersowner approval 前不可執行
10. workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口,先看 S4.2 local evidence再依 S4.3 redacted export request 與 S4.12 owner response 收件包補 webhook / runner / deploy key / branch protection / repository secret parity只保存名稱與 owner不保存 value不使用 write token。
任何批准後的執行仍需下一階段 runtime gate 與獨立 evidence不得由本 rollup 自動觸發。

View File

@@ -50,7 +50,7 @@
| `source_control_ref_truth_classification_v1` | approval-only | refs diff 的真相來源候選與 deprecated 候選分類S4.11 已補 owner response 收件包5 templates、received 0 | `source-control-ref-truth-classification.snapshot.json` / `source-control-ref-truth-owner-response.snapshot.json` |
| `source_control_primary_readiness_gate_v1` | approval-only | GitHub primary readiness / parity gate | `source-control-primary-readiness-gate.snapshot.json` |
| `source_control_primary_rollback_adr_v1` | approval-only | GitHub primary rollback ADR 草案與 validation window | `source-control-primary-rollback-adr.snapshot.json` |
| `source_control_workflow_secret_name_inventory_v1` | approval-only | workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory gateS4.2 已補 local evidenceS4.3 已補 redacted export request | `source-control-workflow-secret-name-inventory.snapshot.json` / `source-control-workflow-secret-name-local-evidence.snapshot.json` / `source-control-workflow-secret-name-export-request.snapshot.json` |
| `source_control_workflow_secret_name_inventory_v1` | approval-only | workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory gateS4.2 已補 local evidenceS4.3 已補 redacted export requestS4.12 已補 owner response 收件包 | `source-control-workflow-secret-name-inventory.snapshot.json` / `source-control-workflow-secret-name-local-evidence.snapshot.json` / `source-control-workflow-secret-name-export-request.snapshot.json` / `source-control-workflow-secret-name-owner-response.snapshot.json` |
| `local_repo_canonical_probe_v1` | mirror-only | momo/ewoooc lineage evidence | `local-repo-canonical-ewoooc-momo.snapshot.json` |
| `git_remote_refs_probe_v1` | mirror-only | 110 / GitHub remote refs readiness | `bitan-tsenyang``wooo-infra-config` |
| `approval_required_event_v1` | approval-only | 高風險 / 敏感邊界 approval | `gitea-readonly-inventory-approval.snapshot.json` |

View File

@@ -4,7 +4,7 @@
|------|------|
| 日期 | 2026-05-17 |
| 狀態 | S0/S1 read-only evidence 建置中 |
| 本階段完成 | 資安供應鏈 contract manifest + Source Control Approval Board + Draft Reconcile Plan + Ref Detail Diff + Ref Truth Classification + Source Control Ref Truth Owner Response 收件包 + GitHub Primary Readiness Gate + GitHub Primary Rollback ADR + GitHub Target Owner Decision Response 收件包 + Gitea 認證清冊匯出請求 + Gitea 認證清冊匯入驗收契約 + Gitea 清冊覆蓋 Owner Attestation + Gitea Owner Attestation Approval Lane 對齊 + Gitea Owner Attestation Response 收件包 + Workflow / Secret Name Inventory + Workflow / Secret Name Local Evidence + Workflow / Secret Name Redacted Export Request + Kali 112 live integration status + Security Finding contract + Kali scan scope approval package + Security Approval Queue + S3 人工批准 Gate + S3 人工決策紀錄 + S3 人工審查封包 + S3 人工決策狀態轉移 + S3 後續 runtime gate 準備契約 + 鏡像 readiness index + 鏡像接收計畫 + 鏡像事件信封 + 鏡像路由矩陣 + 鏡像驗收契約 + 鏡像隔離契約 + 鏡像 dry-run 報告契約 + 鏡像狀態彙整契約 |
| 本階段完成 | 資安供應鏈 contract manifest + Source Control Approval Board + Draft Reconcile Plan + Ref Detail Diff + Ref Truth Classification + Source Control Ref Truth Owner Response 收件包 + GitHub Primary Readiness Gate + GitHub Primary Rollback ADR + GitHub Target Owner Decision Response 收件包 + Gitea 認證清冊匯出請求 + Gitea 認證清冊匯入驗收契約 + Gitea 清冊覆蓋 Owner Attestation + Gitea Owner Attestation Approval Lane 對齊 + Gitea Owner Attestation Response 收件包 + Workflow / Secret Name Inventory + Workflow / Secret Name Local Evidence + Workflow / Secret Name Redacted Export Request + Workflow / Secret Name Owner Response 收件包 + Kali 112 live integration status + Security Finding contract + Kali scan scope approval package + Security Approval Queue + S3 人工批准 Gate + S3 人工決策紀錄 + S3 人工審查封包 + S3 人工決策狀態轉移 + S3 後續 runtime gate 準備契約 + 鏡像 readiness index + 鏡像接收計畫 + 鏡像事件信封 + 鏡像路由矩陣 + 鏡像驗收契約 + 鏡像隔離契約 + 鏡像 dry-run 報告契約 + 鏡像狀態彙整契約 |
| 原則 | 低摩擦分階段文件、schema、read-only evidence 優先;不做 runtime enforcement、不切 primary |
## 0. 本階段完成後整體進度
@@ -38,10 +38,11 @@
| S3.2 人工審查封包契約 | 完成草案 | `security_approval_review_packet_v1` 已建立8 個 review packets、7 ready for human review、1 block candidate、0 個 runtime action 授權 | AwoooP 可顯示 review lane不可把 packet 當批准或執行 |
| S3.3 人工決策狀態轉移契約 | 完成草案 | `security_approval_state_transition_v1` 已建立5 個 decision options 都有 next state、0 個 runtime action 授權 | AwoooP 可顯示決策後狀態,不可把 transition 當執行 |
| S3.4 後續 runtime gate 準備契約 | 完成草案 | `security_followup_runtime_gate_v1` 已建立8 個 gate templates、0 個 active runtime gates、0 個 approved scope | AwoooP 可顯示前置 evidence、preflight checks 與 rollback / disable requirement不可啟用 runtime gate |
| S4.0 GitHub primary readiness gate | 完成草案 | `source_control_primary_readiness_gate_v1` 已建立8 個 candidate repos、7 個 in-scope blocked、0 個 primary readyS4.10 已補 target owner response gateS4.11 已補 refs truth owner response gate | AwoooP 可顯示 parity、owner、rollback ADR 缺口,不可切 primary |
| S4.0 GitHub primary readiness gate | 完成草案 | `source_control_primary_readiness_gate_v1` 已建立8 個 candidate repos、7 個 in-scope blocked、0 個 primary readyS4.10 已補 target owner response gateS4.11 已補 refs truth owner response gateS4.12 已補 workflow / secret 名稱 owner response gate | AwoooP 可顯示 parity、owner、rollback ADR 缺口,不可切 primary |
| S4.1 Workflow / Secret 名稱 inventory 契約 | 完成草案 | `source_control_workflow_secret_name_inventory_v1` 已建立8 個 candidate repos、7 個 in-scope repos 尚缺實際 inventory、0 個 complete、禁止收集 secret value | AwoooP 可顯示 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱缺口,不可修改 workflow 或 secret |
| S4.2 Workflow / Secret 名稱 local evidence | 完成草案 | 已建立 local read-only collector 與 snapshot7 個 local repos visible、4 個 local evidence repos、31 個 workflow files、43 個 referenced secret names、secret value detected=false | 補 webhook / deploy key / branch protection / repository secret parity 的 redacted evidence仍不可切 primary |
| S4.3 Workflow / Secret 名稱 redacted export request | 完成草案 | 已建立 export request schema / snapshot / 人讀版7 個 in-scope repos、5 類 export laneswebhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name paritywrite token allowed=false | repo owner 或未來只讀 API 依 request 補 redacted export仍不可收 secret value、不可修改 GitHub/Gitea |
| S4.12 Workflow / Secret Name Owner Response 收件包 | 完成草案 | 已建立 owner response schema / snapshot / 人讀版5 個 response templates、8 個 acceptance checks、10 個 rejection rules、candidate repos 8、in-scope repos 7、received response 0、accepted 0、execution authorized=false | owner 依模板回覆 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parityresponse 通過只更新 read-only inventory / export request / readiness wording不代表收 secret value、改 workflow、啟用 runner 或 primary approval |
| S4.4 GitHub Primary rollback ADR | 完成草案 | 已建立 rollback ADR schema / snapshot / 人讀版7 個 in-scope rollback drafts、0 owner approved、0 dry-run completed、0 active cutover | repo owner 審查 rollback owner、validation window 與 triggers仍不可切 primary 或執行 rollback |
| S4.5 Gitea 認證清冊匯出請求 | 完成草案 | 已建立匯出請求 schema / snapshot / 人讀版;目前未認證公開範圍 repo 2 個、本機可見 Gitea unique repo 4 個、覆蓋缺口 2 個、匯出來源選項 2 類;允許收集 token value=false | repo owner 依只讀 token API 或已脫敏管理匯出補私有 / 內部全量 repo list仍不可保存 token、不可 write Gitea、不可 refs sync |
| S4.6 Gitea 認證清冊匯入驗收契約 | 完成草案 | 已建立匯入驗收 schema / snapshot / 人讀版;目前 received payload 0、accepted 0、rejected 0定義 10 個驗收檢查、10 個拒收規則與 4 個 quarantine lanes | owner 提供脫敏 payload 後先驗收 / 拒收 / 隔離;仍不可把驗收當 primary approval |
@@ -101,6 +102,8 @@
| Source Control workflow / secret name local collector | `scripts/security/source-control-workflow-secret-name-local-inventory.py` |
| Source Control workflow / secret name export request | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md` |
| Source Control workflow / secret name export request JSON | `docs/security/source-control-workflow-secret-name-export-request.snapshot.json` |
| Source Control workflow / secret name owner response 收件包 | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` |
| Source Control workflow / secret name owner response JSON | `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` |
| Kali 112 integration status | `docs/security/KALI-INTEGRATION-STATUS.md` |
| Kali 112 integration status JSON | `docs/security/kali-integration-status.snapshot.json` |
| Security finding contract | `docs/security/SECURITY-FINDING-CONTRACT.md` |
@@ -162,8 +165,9 @@
1. 先依 S4.9 `GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md` 收到並驗收 S4.7 `GITEA-INVENTORY-COVERAGE-ATTESTATION.md` 的 owner responseS4.8 已把這件事接到既有 approval queue / gate / review packet / follow-up runtime gate。之後再依 S4.5 `GITEA-AUTHENTICATED-INVENTORY-EXPORT-REQUEST.md` 取得 Gitea 認證清冊;收到 payload 後依 S4.6 `GITEA-AUTHENTICATED-INVENTORY-IMPORT-ACCEPTANCE.md` 驗收 / 拒收 / 隔離。目前未認證公開範圍 2 個、本機可見 Gitea unique 4 個、覆蓋缺口 2 個、attestation items 5 個、owner response 0 筆;只能用只讀 token API 或已脫敏管理匯出補私有 / 內部 server-side 全量 repo list不保存 token value。
2. 依 S4.10 `GITHUB-TARGET-OWNER-DECISION-RESPONSE.md``SOURCE-CONTROL-APPROVAL-BOARD.md` 對 7 個 `approval_required=true` 的 GitHub target 做 owner / visibility / canonical response目前 response 0 筆、accepted 0 筆,通過後也只更新 read-only decision table / approval package / readiness gate不代表 repo creation、visibility change、refs sync 或 primary approval。
3. 依 S4.11 `SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md``SOURCE-CONTROL-REF-TRUTH-CLASSIFICATION.md``awoooi``clawbot-v5``wooo-aiops` 做單 repo / 單 ref owner response 驗收response 通過也只更新 read-only classification / reconcile / readiness wording仍不得 push/delete refs 或 force push。
4. `ewoooc` / `momo-pro-system` 完成 server-side canonical 判定
5. `KALI-SCAN-SCOPE-APPROVAL-PACKAGE.md` 取得 safe crawl、credentialed scan、runtime ingestion、full-upgrade / reboot 等 gate 的人工批准;不得直接接 `/execute`
6. AwoooP 主線先讀 `security_mirror_readiness_v1``security_mirror_intake_plan_v1``security_mirror_event_v1``security_mirror_route_v1``security_mirror_acceptance_v1``security_mirror_quarantine_v1``security_mirror_dry_run_v1``security_mirror_status_rollup_v1``security_approval_gate_v1``security_approval_decision_record_v1``security_approval_review_packet_v1``security_approval_state_transition_v1``security_followup_runtime_gate_v1``source_control_primary_readiness_gate_v1``source_control_primary_rollback_adr_v1``source_control_workflow_secret_name_inventory_v1`,只建立 mirror-only / read-only policy 入口,不新增執行按鈕;其中 Gitea inventory 需同時顯示 S4.5 認證清冊匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation 與 S4.9 owner response 收件包GitHub target 決策需同時顯示 S4.10 owner decision response templatesrefs truth 需同時顯示 S4.11 owner response templatesworkflow / secret inventory 需同時顯示 S4.3 redacted export requestprimary readiness 需同時顯示 S4.4 rollback ADR 草案
7. AwoooP 主線消費 `security_rollout_policy_v1` 時,只做 read-only policy不做 runtime blocking
8. AwoooP 主線再讀 `security_approval_queue_v1``security_approval_gate_v1``security_approval_decision_record_v1``security_approval_review_packet_v1``security_approval_state_transition_v1``security_followup_runtime_gate_v1``source_control_primary_readiness_gate_v1``source_control_primary_rollback_adr_v1``source_control_workflow_secret_name_inventory_v1``security_supply_chain_contract_manifest_v1`,顯示 review order、批准範圍、審查封包、決策紀錄、決策後狀態、後續 runtime gate 準備條件、Gitea inventory 覆蓋缺口、S4.5 認證匯出請求、S4.6 匯入驗收 / 隔離規則、S4.7 owner attestation items、S4.9 owner response templates、S4.10 GitHub target owner response templates、S4.11 refs truth owner response templates、GitHub primary readiness blockers、rollback ADR 草案、workflow / secret 名稱 inventory 缺口、redacted export request 與 blocked reason不新增 execution router。
4. 依 S4.12 `SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` `SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md` 對 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 做 owner response 驗收response 通過也只更新 read-only inventory / export request / readiness wording仍不得收 secret value、改 workflow 或啟用 runner
5. `ewoooc` / `momo-pro-system` 完成 server-side canonical 判定
6. `KALI-SCAN-SCOPE-APPROVAL-PACKAGE.md` 取得 safe crawl、credentialed scan、runtime ingestion、full-upgrade / reboot 等 gate 的人工批准;不得直接接 `/execute`
7. AwoooP 主線先讀 `security_mirror_readiness_v1``security_mirror_intake_plan_v1``security_mirror_event_v1``security_mirror_route_v1``security_mirror_acceptance_v1``security_mirror_quarantine_v1``security_mirror_dry_run_v1``security_mirror_status_rollup_v1``security_approval_gate_v1``security_approval_decision_record_v1``security_approval_review_packet_v1``security_approval_state_transition_v1``security_followup_runtime_gate_v1``source_control_primary_readiness_gate_v1``source_control_primary_rollback_adr_v1``source_control_workflow_secret_name_inventory_v1`,只建立 mirror-only / read-only policy 入口,不新增執行按鈕;其中 Gitea inventory 需同時顯示 S4.5 認證清冊匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation 與 S4.9 owner response 收件包GitHub target 決策需同時顯示 S4.10 owner decision response templatesrefs truth 需同時顯示 S4.11 owner response templatesworkflow / secret inventory 需同時顯示 S4.3 redacted export request 與 S4.12 owner response templatesprimary readiness 需同時顯示 S4.4 rollback ADR 草案
8. AwoooP 主線消費 `security_rollout_policy_v1` 時,只做 read-only policy不做 runtime blocking。
9. AwoooP 主線再讀 `security_approval_queue_v1``security_approval_gate_v1``security_approval_decision_record_v1``security_approval_review_packet_v1``security_approval_state_transition_v1``security_followup_runtime_gate_v1``source_control_primary_readiness_gate_v1``source_control_primary_rollback_adr_v1``source_control_workflow_secret_name_inventory_v1``security_supply_chain_contract_manifest_v1`,顯示 review order、批准範圍、審查封包、決策紀錄、決策後狀態、後續 runtime gate 準備條件、Gitea inventory 覆蓋缺口、S4.5 認證匯出請求、S4.6 匯入驗收 / 隔離規則、S4.7 owner attestation items、S4.9 owner response templates、S4.10 GitHub target owner response templates、S4.11 refs truth owner response templates、S4.12 workflow / secret 名稱 owner response templates、GitHub primary readiness blockers、rollback ADR 草案、workflow / secret 名稱 inventory 缺口、redacted export request 與 blocked reason不新增 execution router。

View File

@@ -13,6 +13,7 @@
| Source Control draft reconcile plan | `docs/security/SOURCE-CONTROL-RECONCILE-PLAN.md` |
| Source Control branch/tag detail diff | `docs/security/SOURCE-CONTROL-REF-DETAIL-DIFF.md` |
| Source Control ref truth classification | `docs/security/SOURCE-CONTROL-REF-TRUTH-CLASSIFICATION.md` |
| Workflow / secret name owner response | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` |
| 原則 | 只做盤點與分類,不做同步、不刪除、不切 primary |
## 0. 核心結論
@@ -122,6 +123,8 @@ Repo-by-repo approval package 已建立7 個 approval-required targets 皆為
Ref truth classification 已建立,將 `awoooi``clawbot-v5``wooo-aiops` 的 141 個 refs 差異拆成 review lane。`main` / `dev` 屬真相來源判定,`drift/adopt-*` 先列 deprecated candidaterelease / UAT tags 先列保留判定S4.11 已補 owner response 收件包5 個 templates、received / accepted response 皆為 0。不得把分類結果或 response packet 直接執行成同步、刪除、force push 或 primary switch。
Workflow / secret name owner response 已建立S4.12 補 5 個 templates對應 webhook、runner、deploy key、branch protection / CODEOWNERS 與 repository secret name parityreceived / accepted response 皆為 0。不得把 response packet 當成 secret value collection、workflow modification、GitHub hosted runner enablement 或 primary approval。
## 3. 必要驗收 gate
任何 repo 進入「已可切 GitHub primary」之前都必須通過
@@ -152,6 +155,7 @@ Ref truth classification 補充:完整 review lane 見 `docs/security/SOURCE-C
1. 先批准 Gitea read-only inventory package再用只讀 token 或管理匯出補齊 Gitea server repo list。
2. 依 GitHub target repo-by-repo approval package 處理 7 個 approval-required target。
3. 依 S4.11 ref truth owner response 收件包與 classification 釐清 `wooo/awoooi``wooo/clawbot-v5``wooo/wooo-aiops` 的雙端分歧來源;仍不得 push/delete refs。
4. 釐清 `wooo/ewoooc``root/momo-pro-system``momo-pro-system``momo_pro_system` 的 canonical 關係
5. 釐清 `bitan-pharmacy``tsenyang-website` 是否仍 active並決定 GitHub owner / visibility
6. 產出 GitHub primary ADR 前,不做主控切換。
4. 依 S4.12 workflow / secret name owner response 收件包補 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity 的 redacted disposition仍不得收 secret value、改 workflow 或啟用 hosted runner
5. 釐清 `wooo/ewoooc``root/momo-pro-system``momo-pro-system``momo_pro_system` 的 canonical 關係
6. 釐清 `bitan-pharmacy``tsenyang-website` 是否仍 active並決定 GitHub owner / visibility。
7. 產出 GitHub primary ADR 前,不做主控切換。

View File

@@ -9,6 +9,7 @@
| Rollback ADR | `docs/security/source-control-primary-rollback-adr.snapshot.json` |
| GitHub target owner response | `docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md` |
| Ref truth owner response | `docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md` |
| Workflow / secret owner response | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` |
| 模式 | `primary_readiness_gate_only` |
| runtime 執行授權 | `false` |
@@ -37,7 +38,7 @@
|------|----------|------|
| Gitea authenticated inventory | blocked | private/internal 全量 repo list 尚未完成S4.7 owner coverage attestation 與 S4.9 owner response 仍未收到 |
| refs truth / branch-tag parity | blocked | 3 個 mapped repos 仍有 refs driftS4.11 已補 refs truth owner response 收件包received / accepted response 皆為 0 |
| workflow / runner / secret name parity | missing evidence | S4.1 已建立 inventory 契約;尚未有實際 redacted workflow、webhook、runner、secret 名稱 snapshot |
| workflow / runner / secret name parity | missing evidence | S4.1 已建立 inventory 契約;S4.12 已補 owner response 收件包received / accepted response 皆為 0尚未有實際 redacted workflow、webhook、runner、secret 名稱 snapshot |
| owner / visibility / canonical | pending review | 7 個 in-scope targets 仍需人工決策S4.10 已補 owner response 收件包received / accepted response 皆為 0 |
| rollback ADR | pending review | S4.4 已建立 rollback ADR 草案7 個 in-scope repos 仍需 owner approval、dry-run 與 validation window |
@@ -46,12 +47,13 @@
1. 顯示每個 repo 的 readiness state、blockers 與 evidence refs。
2. 顯示 `primary_ready_count=0`
3. 將 7 個 in-scope repos 維持在 approval / review lane。
4. 顯示哪些 evidence 仍缺Gitea authenticated inventory、S4.7 owner coverage attestation、S4.9 owner response、S4.11 refs truth owner response、workflow/runner/secret name inventory、rollback ADR。
4. 顯示哪些 evidence 仍缺Gitea authenticated inventory、S4.7 owner coverage attestation、S4.9 owner response、S4.11 refs truth owner response、S4.12 workflow / secret name owner response、workflow/runner/secret name inventory、rollback ADR。
5. 連到 S4.10 `github_target_owner_decision_response_v1` 顯示 7 個 owner decision response templates、8 個 acceptance checks、10 個 rejection rules且 received / accepted response 皆為 0。
6. 連到 S4.11 `source_control_ref_truth_owner_response_v1` 顯示 5 個 refs owner response templates、8 個 acceptance checks、10 個 rejection rules且 received / accepted response 皆為 0。
7. 連到 `source_control_workflow_secret_name_inventory_v1` 顯示 8 個 candidate repos 的 inventory lane 缺口與 S4.2 local evidence只保存 secret 名稱與 owner不保存 value。
8. 連到 `source_control_primary_rollback_adr_v1` 顯示 7in-scope repos 的 rollback owner、trigger 與 validation window 草案
9. 把狀態寫入 Audit evidence 與 Operator Console
8. 連到 S4.12 `source_control_workflow_secret_name_owner_response_v1` 顯示 5owner response templates、8 個 acceptance checks、10 個 rejection rules且 received / accepted response 皆為 0
9. 連到 `source_control_primary_rollback_adr_v1` 顯示 7 個 in-scope repos 的 rollback owner、trigger 與 validation window 草案
10. 把狀態寫入 Audit evidence 與 Operator Console。
## 4. AwoooP 不可做
@@ -67,6 +69,6 @@
S4.0 只是把「切換前一定要看見什麼」先定義清楚。
S4.4 已補上 rollback ADR 草案,但它只是 owner review 的資料包不是切換批准。S4.7 已補上 Gitea coverage owner attestationS4.9 已補上 Gitea owner response 收件包S4.10 已補上 GitHub target owner decision response 收件包S4.11 已補上 refs truth owner response 收件包;它們只是 scope decision 與 response 驗收框架,不是 migration approval、repo creation approval、visibility change approval、refs sync approval、delete approval、force-push approval 或 primary approval。`owner_approved_count=0``dry_run_completed_count=0``active_cutover_count=0`
S4.4 已補上 rollback ADR 草案,但它只是 owner review 的資料包不是切換批准。S4.7 已補上 Gitea coverage owner attestationS4.9 已補上 Gitea owner response 收件包S4.10 已補上 GitHub target owner decision response 收件包S4.11 已補上 refs truth owner response 收件包S4.12 已補上 workflow / secret 名稱 owner response 收件包;它們只是 scope decision 與 response 驗收框架,不是 migration approval、repo creation approval、visibility change approval、refs sync approval、delete approval、force-push approval、secret value collection approval、workflow modification approval 或 primary approval。`owner_approved_count=0``dry_run_completed_count=0``active_cutover_count=0`
這讓長期回到 GitHub 的方向可以繼續往前,但仍維持低摩擦:目前只 mirror、只顯示、只留痕不執行。

View File

@@ -7,6 +7,7 @@
| Schema | `docs/schemas/source_control_workflow_secret_name_export_request_v1.schema.json` |
| Snapshot | `docs/security/source-control-workflow-secret-name-export-request.snapshot.json` |
| 來源契約 | `source_control_workflow_secret_name_inventory_v1` |
| Owner response 收件包 | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` / `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` |
| 模式 | `redacted_export_request_only` |
| runtime 執行授權 | `false` |
@@ -14,7 +15,7 @@
S4.3 把 S4.2 還缺的控制面 evidence 拆成可交接的 redacted export request。
這不是 API 執行、不是 GitHub primary cutover、也不是 workflow / secret 修改。它只是告訴 repo owner 或未來只讀匯出工具:每個 repo 要補哪些欄位、哪些欄位可以保存、哪些敏感值必須拒收。
這不是 API 執行、不是 GitHub primary cutover、也不是 workflow / secret 修改。它只是告訴 repo owner 或未來只讀匯出工具:每個 repo 要補哪些欄位、哪些欄位可以保存、哪些敏感值必須拒收。S4.12 已補 owner response 收件包,讓回覆可審、可驗收、可拒收,但仍不授權任何變更。
## 1. 摘要
@@ -24,6 +25,8 @@ S4.3 把 S4.2 還缺的控制面 evidence 拆成可交接的 redacted export req
| In-scope export requests | 7 |
| External scope review | 1 |
| Export lanes | 5 |
| S4.12 response templates | 5 |
| S4.12 received / accepted / rejected | `0 / 0 / 0` |
| Webhook export request repos | 2 |
| Runner export request repos | 4 |
| Deploy key export request repos | 1 |
@@ -63,6 +66,7 @@ S4.3 把 S4.2 還缺的控制面 evidence 拆成可交接的 redacted export req
3. 顯示 GitHub hosted runner 可能造成額度消耗的 review lane。
4. 把完成的 redacted export 作為 Audit evidence 等待人工審查。
5. 若 payload 含敏感值,送進 mirror quarantine。
6. 顯示 S4.12 owner response templates、acceptance checks 與 rejection rules。
## 5. AwoooP 不可做
@@ -76,4 +80,6 @@ S4.3 把 S4.2 還缺的控制面 evidence 拆成可交接的 redacted export req
S4.1 建立 inventory gateS4.2 補本機 workflow / CODEOWNERS / referenced secret name evidenceS4.3 補「下一步匯出請求包」。
S4.12 補「owner response 收件包」,固定 5 類 export lanes 的回覆欄位與拒收規則,避免後續誤收 secret value、誤用 write token、誤啟 GitHub hosted runner 或誤改 workflow。
這仍然是低摩擦框架期:先把資料責任、欄位邊界與拒收規則定清楚,避免後續真的接 owner export 或只讀 API 時誤收秘密值、誤用 write token或誤把資料補齊當成主控切換批准。

View File

@@ -8,6 +8,7 @@
| Snapshot | `docs/security/source-control-workflow-secret-name-inventory.snapshot.json` |
| Local evidence | `docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json` |
| Export request | `docs/security/source-control-workflow-secret-name-export-request.snapshot.json` |
| Owner response 收件包 | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` / `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` |
| 模式 | `inventory_contract_only` |
| runtime 執行授權 | `false` |
@@ -23,6 +24,8 @@ S4.2 已補本機可見 evidence4 個 repos 有 workflow / CODEOWNERS evidenc
S4.3 已補 redacted export request package7 個 in-scope repos 需要 owner / read-only export5 類 export lanes 包含 webhook、runner、deploy key、branch protection / CODEOWNERS 與 repository secret name parity所有 export 都禁止 secret value 與 write token。
S4.12 已補 owner response 收件包5 個 response templates 對應 webhook、runner、deploy key、branch protection / CODEOWNERS 與 repository secret name parity目前 received / accepted response 皆為 0。response 通過也只更新 read-only evidence不代表修改 workflow、secret、runner、deploy key 或 branch protection。
## 1. 目前狀態
| 指標 | 數量 |
@@ -38,6 +41,8 @@ S4.3 已補 redacted export request package7 個 in-scope repos 需要 owner
| Local referenced secret names | 43 |
| Redacted export request repos | 7 |
| Redacted export lanes | 5 |
| S4.12 response templates | 5 |
| S4.12 received / accepted / rejected | `0 / 0 / 0` |
## 2. Inventory Lanes
@@ -60,6 +65,7 @@ S4.3 已補 redacted export request package7 個 in-scope repos 需要 owner
5. 將失敗或含敏感值 payload 交給 mirror quarantine。
6. 顯示 S4.2 本機 evidence 與仍缺的 API / export lanes。
7. 顯示 S4.3 export request 的欄位清單、拒收欄位與 acceptance gate。
8. 顯示 S4.12 owner response templates、acceptance checks 與 rejection rules。
## 4. AwoooP 不可做
@@ -79,4 +85,6 @@ S4.2 讓本機可見 workflow / CODEOWNERS / referenced secret names 先形成 p
S4.3 讓後續 webhook、runner、deploy key、branch protection / CODEOWNERS 與 repository secret parity 的 owner / read-only export 有明確的欄位、拒收規則與驗收 gate。
S4.12 讓 owner response 有固定收件格式與拒收規則,避免 GitHub hosted runner 額度風險、secret value、write token 或未脫敏 payload 被誤接進 AwoooP。
這仍是低摩擦框架期:只定義欄位、只顯示缺口、只留痕,不碰任何實際 secret 或發版流程。後續即使取得 redacted export也只代表 evidence 可 review不代表 GitHub primary ready。

View File

@@ -0,0 +1,126 @@
# Workflow / Secret Name Owner Response 收件包
| 項目 | 內容 |
|------|------|
| 日期 | 2026-05-17 |
| 狀態 | 草案,等待 owner response |
| 資料契約 | `docs/schemas/source_control_workflow_secret_name_owner_response_v1.schema.json` |
| 快照 | `docs/security/source-control-workflow-secret-name-owner-response.snapshot.json` |
| 來源契約 | `source_control_workflow_secret_name_inventory_v1` |
| 目標契約 | `source_control_workflow_secret_name_export_request_v1` |
| 模式 | `owner_workflow_secret_name_response_intake_only` |
| 執行面授權 | `false` |
## 0. 核心結論
S4.12 補的是「owner 要怎麼回覆 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / repository secret 名稱 parity」。
S4.12 不是 secret 搬移、不是 workflow 修改、不是 runner 啟用、不是 deploy key 變更,也不是 GitHub primary approval。它只把 owner response 的欄位、可接受決策、驗收規則、拒收規則與允許輸出固定下來,讓 AwoooP 可以只讀顯示並等待人工補證。
此文件不要求貼 token不接受 raw secret不使用 write token不修改 workflow、webhook、runner、deploy key、branch protection、CODEOWNERS 或 repository secret不建立 repo、不 sync refs、不切 primary也不停用 Gitea。
## 1. Response 摘要
| 指標 | 值 |
|------|----|
| owner response 狀態 | `waiting_owner_response` |
| candidate repos | 8 |
| in-scope repos | 7 |
| redacted export requests | 7 |
| export lanes | 5 |
| local evidence repos | 4 |
| local workflow files | 31 |
| local referenced secret names | 43 |
| response templates | 5 |
| 已收到 response | 0 |
| 已接受 response | 0 |
| 已拒收 response | 0 |
| acceptance checks | 8 |
| rejection rules | 10 |
| 允許收集 secret value | `false` |
| 允許 write token | `false` |
| 授權修改 workflow / webhook / runner / deploy key / branch protection / secret | `false` |
| 授權啟用 GitHub hosted runner | `false` |
| 授權 sync refs / 切 GitHub primary | `false` |
## 2. Owner Response 必填欄位
每筆 response 至少要能回答:
1. `owner_role_or_team`:回覆者角色或團隊,不要求個人敏感資訊。
2. `decision`:必須是該 lane template 允許的決策值。
3. `decision_reason`:為什麼做此 redacted export / no-data / hold 判定。
4. `repo``provider`:必須標示 GitHub / Gitea / local evidence 來源。
5. lane-specific owner例如 `webhook_owner``runner_owner``key_owner``ruleset_owner``rotation_owner`
6. lane-specific metadata只能填允許欄位例如 host redacted、runner label、key name、required check names、secret name list。
7. `evidence_refs`:只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata。
## 3. 五個 Response Template
| Template | Lane | 覆蓋範圍 | 驗收重點 |
|----------|------|----------|----------|
| `response-webhook-redacted-export` | `webhook_redacted_export_request` | `awoooi``wooo-aiops` | 只收 redacted host / event types / owner不收 webhook secret 或 URL token |
| `response-runner-label-owner` | `runner_label_owner_export_request` | `awoooi``wooo-aiops``wooo-infra-config``ewoooc` | 確認 self-hosted / hosted 與額度風險,不授權啟用 GitHub hosted runner |
| `response-deploy-key-redacted-export` | `deploy_key_redacted_export_request` | `wooo-infra-config` | 只收 key name / read-only flag / owner不收 private key 或完整 public key |
| `response-branch-protection-codeowners` | `branch_protection_codeowners_export_request` | `awoooi``clawbot-v5``wooo-infra-config``ewoooc` | 只收 required checks / CODEOWNERS path / ruleset owner不修改規則 |
| `response-repository-secret-name-parity` | `repository_secret_name_parity_export_request` | 7 個 in-scope repos | 只收 secret name / scope / present-absent / owner不收 value、hash、partial token |
## 4. 可接受決策值
| Lane | Decision |
|------|----------|
| `webhook_redacted_export_request` | `provide_redacted_webhook_inventory_candidate``mark_no_webhook_candidate``hold_pending_webhook_owner``unknown_requires_more_evidence` |
| `runner_label_owner_export_request` | `keep_self_hosted_runner_candidate``approve_hosted_runner_risk_review_candidate``mark_no_runner_candidate``hold_pending_runner_owner``unknown_requires_more_evidence` |
| `deploy_key_redacted_export_request` | `provide_deploy_key_name_scope_candidate``mark_no_deploy_key_candidate``mark_write_capable_key_risk_candidate``hold_pending_key_owner``unknown_requires_more_evidence` |
| `branch_protection_codeowners_export_request` | `provide_branch_protection_codeowners_candidate``mark_no_branch_protection_candidate``hold_pending_ruleset_owner``unknown_requires_more_evidence` |
| `repository_secret_name_parity_export_request` | `provide_secret_name_presence_map_candidate``mark_no_repository_secret_candidate``hold_pending_secret_owner``unknown_requires_more_evidence` |
## 5. 驗收規則
1. response 必須對應 S4.3 既有 export lane。
2. `decision` 必須在該 lane template 的允許值內。
3. 必須標示 repo、provider 與 lane批次 secret name parity 必須有可重現 repo list。
4. 必須有 owner 或補證 owner未知時要明確選 hold / unknown。
5. 只能包含 lane allowed fields不得加入 request body、header、credential 或 raw config。
6. 不得包含 secret、token、cookie、private key、deploy key、runner token、webhook secret、password、hash、masked token 或 partial credential。
7. 不得要求 write API、rotate secret、修改 workflow、webhook、runner、deploy key 或 branch protection。
8. 不得要求建立 repo、sync refs、切 GitHub primary、停用 Gitea或把 inventory 視為 primary ready。
## 6. 必須拒收
1. secret value、PAT、cookie、session、CSRF token、private key、deploy key value、runner token、webhook secret 或 partial credential。
2. 完整 webhook payload URL、query token、authorization header、request body 或未脫敏截圖。
3. runner registration token、runner admin token、SSH private key、host password 或 API token。
4. deploy key private material、完整 public key、token value、password 或 credential value。
5. secret value、secret hash、partial token、masked token 或任何可還原片段。
6. 要求 write API、修改 workflow/webhook/runner/deploy key/branch protection/CODEOWNERS 或 rotate secret。
7. 要求建立 repo、sync refs、切 GitHub primary、停用或封存 Gitea。
8. 缺 repo、provider、lane owner 或 no-data disposition。
9. 把 owner response 當成 inventory complete、workflow ready、secret parity complete 或 GitHub primary ready。
10. 任何不確定是否含敏感值、私有 URL 憑證、完整 key material 或未脫敏截圖的回覆。
## 7. AwoooP 可做
1. 顯示 5 個 owner response templates。
2. 顯示 8 個 acceptance checks 與 10 個 rejection rules。
3. 顯示 GitHub hosted runner 額度風險 review lane但不啟用 hosted runner。
4. 在 owner response 到來後,只更新 read-only inventory、export request、primary readiness blocker wording 與 status rollup。
5. 將不完整或可疑 response 放進 mirror quarantine。
6. 持續顯示 `received_response_count=0``accepted_response_count=0`,直到真的收到脫敏 response。
## 8. AwoooP 不可做
1. 不要求使用者貼 token、secret、private key、cookie、session、deploy key 或 runner token。
2. 不把 response 當成 workflow 修改批准。
3. 不把 response 當成 secret 建立 / 複製 / rotate 批准。
4. 不把 response 當成 GitHub hosted runner 啟用批准。
5. 不把 response 當成 GitHub primary approval。
6. 不建立 GitHub repo。
7. 不修改 GitHub/Gitea repo。
8. 不新增執行按鈕。
## 9. 階段定位
S4.12 是 S4.1 / S4.2 / S4.3 後面的 owner response 收件包。
它讓 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / repository secret 名稱 parity 的 owner response 變得可審、可驗收、可拒收,但仍停在框架期。真正進入 GitHub primary 前,仍必須等 Gitea inventory、GitHub target response、refs truth、workflow-secret parity、rollback ADR、owner approval 與後續 runtime gate 全部補齊。

View File

@@ -140,7 +140,9 @@
"decision_options": ["approve_scope", "reject", "defer", "request_more_evidence"],
"allowed_after_approval": [
"依 S4.10 驗收 owner decision response",
"依 S4.12 驗收 workflow / secret 名稱 owner response",
"逐 repo 更新 owner/visibility/canonical decision",
"更新 workflow / secret name parity read-only wording",
"產生 draft reconcile plan 或 ADR",
"更新 GitHub target decision snapshot"
],
@@ -148,6 +150,7 @@
"建立 repo",
"修改 visibility",
"把 S4.10 response packet 當成 repo creation 或 visibility approval",
"把 S4.12 response packet 當成 secret value collection、workflow modification 或 runner enablement approval",
"push refs",
"delete refs",
"切 GitHub primary"
@@ -158,7 +161,9 @@
"docs/security/source-control-approval-board.snapshot.json",
"docs/security/GITHUB-TARGET-REPO-APPROVAL-PACKAGE.md",
"docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md",
"docs/security/github-target-owner-decision-response.snapshot.json"
"docs/security/github-target-owner-decision-response.snapshot.json",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
]
},
{

View File

@@ -126,7 +126,7 @@
"risk": "HIGH",
"state": "pending_approval",
"recommended_awooop_mode": "approve_required",
"requested_decision": "是否依 S4.10 逐 repo 收到並驗收 GitHub target、owner、visibility、canonical response此 bundle 不授權執行。",
"requested_decision": "是否依 S4.10 逐 repo 收到並驗收 GitHub target、owner、visibility、canonical response並依 S4.12 驗收 workflow / secret 名稱 owner response此 bundle 不授權執行。",
"blocked_until_approved": true,
"required_reviewers": [
"migration-engineer",
@@ -138,11 +138,15 @@
"docs/security/source-control-approval-board.snapshot.json",
"docs/security/GITHUB-TARGET-REPO-APPROVAL-PACKAGE.md",
"docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md",
"docs/security/github-target-owner-decision-response.snapshot.json"
"docs/security/github-target-owner-decision-response.snapshot.json",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
],
"allowed_after_approval": [
"依 S4.10 驗收 owner decision response",
"依 S4.12 驗收 workflow / secret 名稱 owner response",
"逐 repo 更新 owner/visibility/canonical decision",
"更新 workflow / secret name parity read-only wording",
"產生 draft reconcile plan 或 ADR",
"更新 GitHub target decision snapshot"
],
@@ -150,6 +154,7 @@
"建立 repo",
"修改 visibility",
"把 S4.10 response packet 當成 repo creation 或 visibility approval",
"把 S4.12 response packet 當成 secret value collection、workflow modification 或 runner enablement approval",
"push refs",
"delete refs",
"切 GitHub primary"

View File

@@ -169,22 +169,26 @@
"docs/security/source-control-approval-board.snapshot.json",
"docs/security/GITHUB-TARGET-REPO-APPROVAL-PACKAGE.md",
"docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md",
"docs/security/github-target-owner-decision-response.snapshot.json"
"docs/security/github-target-owner-decision-response.snapshot.json",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
],
"allowed_pre_decision_actions": [
"顯示 7 個 approval-required target",
"顯示 S4.10 owner response templates、received_response_count=0 與 rejection rules",
"顯示 S4.12 workflow / secret 名稱 owner response templates、received_response_count=0 與 rejection rules",
"要求 repo owner 補 owner/visibility/canonical 判定",
"維持 refs action disabled"
],
"allowed_after_decision_actions": [
"若 approve_scope只能更新 S4.10 response 驗收結果、決策草案、draft reconcile plan 或 ADR",
"若 approve_scope只能更新 S4.10 / S4.12 response 驗收結果、決策草案、workflow parity wording、draft reconcile plan 或 ADR",
"任何 repo creation 或 visibility change 仍需後續 runtime gate"
],
"still_forbidden": [
"建立 repo",
"修改 visibility",
"把 S4.10 response packet 當成 repo creation 或 visibility approval",
"把 S4.12 response packet 當成 secret value collection、workflow modification 或 runner enablement approval",
"push refs",
"delete refs",
"切 GitHub primary"

View File

@@ -13,7 +13,8 @@
"docs/security/security-rollout-policy.snapshot.json",
"docs/security/gitea-inventory-coverage-attestation.snapshot.json",
"docs/security/gitea-inventory-owner-attestation-response.snapshot.json",
"docs/security/source-control-ref-truth-owner-response.snapshot.json"
"docs/security/source-control-ref-truth-owner-response.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
],
"summary": {
"total_gate_templates": 8,
@@ -157,6 +158,7 @@
"applies_after_decision": "approve_scope",
"minimum_required_evidence": [
"S4.10 owner decision response 驗收結果docs/security/github-target-owner-decision-response.snapshot.json",
"S4.12 workflow / secret 名稱 owner response 驗收結果docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"repo owner / visibility / canonical decision",
"GitHub target 是否已存在的最新 probe",
"workflow parity checklist",
@@ -169,6 +171,7 @@
],
"preflight_checks": [
"確認 S4.10 response packet 未被當成 repo creation、visibility change、refs sync 或 primary approval",
"確認 S4.12 response packet 未被當成 secret value collection、workflow modification、runner enablement 或 primary approval",
"確認 not_found_or_private 不被當成可自動建立 repo",
"確認 visibility change 仍未授權",
"確認 refs action disabled",
@@ -176,6 +179,7 @@
],
"allowed_pre_runtime_artifacts": [
"owner decision response acceptance note",
"workflow-secret owner response acceptance note",
"target decision table update",
"draft reconcile ADR",
"repo owner review note",

View File

@@ -380,14 +380,16 @@
"snapshot_paths": [
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json"
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
],
"human_docs": [
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-INVENTORY.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-LOCAL-EVIDENCE.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md"
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md"
],
"notes": "可 mirror workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口S4.2 local evidence 有 4 個 repos、31 個 workflow files、43 個 referenced secret namesS4.3 export request 有 7 個 repos、5 類 export lanessecret_value_collection_allowed=false。"
"notes": "可 mirror workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口S4.2 local evidence 有 4 個 repos、31 個 workflow files、43 個 referenced secret namesS4.3 export request 有 7 個 repos、5 類 export lanesS4.12 owner response templates 5 個、received_response_count=0secret_value_collection_allowed=false。"
},
{
"contract": "local_repo_canonical_probe_v1",

View File

@@ -30,6 +30,7 @@
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"docs/security/security-rollout-policy.snapshot.json"
],
"summary": {
@@ -76,7 +77,13 @@
"workflow_secret_inventory_unique_secret_name_count": 43,
"workflow_secret_inventory_export_request_count": 7,
"workflow_secret_inventory_export_lane_count": 5,
"workflow_secret_owner_response_template_count": 5,
"workflow_secret_owner_received_response_count": 0,
"workflow_secret_owner_accepted_response_count": 0,
"workflow_secret_owner_rejected_response_count": 0,
"workflow_secret_inventory_write_token_allowed": false,
"workflow_secret_modification_authorized": false,
"workflow_secret_github_hosted_runner_enable_authorized": false,
"secret_value_collection_allowed": false,
"secret_value_detected": false,
"pending_approval_count": 7,
@@ -113,8 +120,8 @@
{
"phase_id": "S4_migration_execution",
"state": "not_started",
"current_result": "GitHub primary 是長期方向source_control_primary_readiness_gate_v1 已定義 8 個 candidate repos、7 個 in-scope blocked repos、0 個 primary readyS4.1 已定義 workflow / secret 名稱 inventory 契約S4.2 已補 local evidenceS4.3 已補 redacted export requestS4.4 已補 rollback ADR 草案S4.5 已補 Gitea authenticated inventory export requestS4.6 已補 redacted import acceptanceS4.7 已補 owner coverage attestation requestS4.9 已補 Gitea owner response intake packetS4.10 已補 GitHub target owner decision response intake packetS4.11 已補 refs truth owner response intake packet但 inventory status 仍 partialGitHub target response 與 refs truth response 仍 0 筆。",
"next_gate": "依 S4.9 收到並驗收 S4.7 Gitea owner response、依 S4.10 收到並驗收 7 個 GitHub target owner / visibility / canonical response、依 S4.11 收到並驗收 5 個 refs truth owner response templates、authenticated inventory payload 通過 S4.6 驗收、workflow / webhook / runner / deploy key / branch protection / repository secret parity redacted evidence、rollback ADR owner approval 與逐 repo 人工批准。"
"current_result": "GitHub primary 是長期方向source_control_primary_readiness_gate_v1 已定義 8 個 candidate repos、7 個 in-scope blocked repos、0 個 primary readyS4.1 已定義 workflow / secret 名稱 inventory 契約S4.2 已補 local evidenceS4.3 已補 redacted export requestS4.4 已補 rollback ADR 草案S4.5 已補 Gitea authenticated inventory export requestS4.6 已補 redacted import acceptanceS4.7 已補 owner coverage attestation requestS4.9 已補 Gitea owner response intake packetS4.10 已補 GitHub target owner decision response intake packetS4.11 已補 refs truth owner response intake packetS4.12 已補 workflow / secret 名稱 owner response intake packet但 inventory status 仍 partialGitHub target / refs truth / workflow-secret response 仍 0 筆。",
"next_gate": "依 S4.9 收到並驗收 S4.7 Gitea owner response、依 S4.10 收到並驗收 7 個 GitHub target owner / visibility / canonical response、依 S4.11 收到並驗收 5 個 refs truth owner response templates、依 S4.12 收到並驗收 5 個 workflow / secret 名稱 owner response templates、authenticated inventory payload 通過 S4.6 驗收、rollback ADR owner approval 與逐 repo 人工批准。"
}
],
"next_safe_actions": [
@@ -302,13 +309,17 @@
"source_contract": "source_control_workflow_secret_name_inventory_v1",
"allowed_processing": [
"顯示 8 個 candidate repos 的 inventory lanes、4 個 repos 的 local evidence 與 7 個 repos 的 redacted export request",
"顯示 S4.12 owner response templates、received_response_count=0 與 rejection rules",
"要求 repo owner 補 redacted workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 snapshot",
"顯示 GitHub hosted runner 額度風險與 self-hosted runner owner review lane",
"response 通過後只更新 read-only inventory、export request 與 readiness blocker wording",
"只保存 secret name、owner 與 present/absent metadata不保存 value"
],
"blocked_processing": [
"把 S4.12 response packet 當成 workflow 修改、secret 建立、runner 啟用或 primary approval",
"收集或保存 secret value",
"修改 workflow 或 webhook",
"啟用 GitHub hosted runner 或消耗 GitHub Actions 額度",
"rotate secret",
"sync refs 或切 GitHub primary"
]
@@ -348,7 +359,8 @@
"S4.8 只把既有 Gitea approval queue/gate/review packet/follow-up gate 對齊 S4.7 先行條件approval_queue_total 仍為 8、active_runtime_gates 仍為 0不新增執行入口。",
"S4.9 只新增 Gitea owner attestation response 收件包required_response_item_count=5、received_response_count=0、accepted_response_count=0不把 response packet 當 inventory 執行或 primary approval。",
"S4.10 只新增 GitHub target owner decision response 收件包response_template_count=7、received_response_count=0、accepted_response_count=0不把 response packet 當 repo creation、visibility change、refs sync 或 GitHub primary approval。",
"S4.11 只新增 refs truth owner response 收件包response_template_count=5、received_response_count=0、accepted_response_count=0不把 response packet 當 refs sync、delete、force push 或 GitHub primary approval。"
"S4.11 只新增 refs truth owner response 收件包response_template_count=5、received_response_count=0、accepted_response_count=0不把 response packet 當 refs sync、delete、force push 或 GitHub primary approval。",
"S4.12 只新增 workflow / secret 名稱 owner response 收件包response_template_count=5、received_response_count=0、accepted_response_count=0不把 response packet 當 secret value collection、workflow modification、GitHub hosted runner enablement 或 GitHub primary approval。"
],
"forbidden_actions": [
"start_kali_scan",

View File

@@ -603,12 +603,14 @@
"snapshot_paths": [
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json"
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json"
],
"human_docs": [
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-INVENTORY.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-LOCAL-EVIDENCE.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md"
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md"
],
"consumer": "AwoooP source-control review / Secret hygiene audit / Operator Console",
"consumption_mode": "approval_only",
@@ -626,7 +628,7 @@
"sync_refs",
"switch_github_primary"
],
"notes": "定義 S4.1 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 契約S4.2 已補 local evidence4 repos、31 workflow files、43 個 referenced secret namesS4.3 已補 7 repos / 5 lanes 的 redacted export request仍不保存 secret value。"
"notes": "定義 S4.1 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 契約S4.2 已補 local evidence4 repos、31 workflow files、43 個 referenced secret namesS4.3 已補 7 repos / 5 lanes 的 redacted export requestS4.12 已補 5 個 owner response templatesreceived_response_count=0仍不保存 secret value。"
},
{
"contract": "local_repo_canonical_probe_v1",

View File

@@ -13,6 +13,7 @@
"docs/security/source-control-ref-truth-classification.snapshot.json",
"docs/security/source-control-ref-truth-owner-response.snapshot.json",
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"docs/security/source-control-primary-rollback-adr.snapshot.json",
"docs/security/gitea-repo-inventory.snapshot.json",
"docs/security/gitea-authenticated-inventory-export-request.snapshot.json",
@@ -99,11 +100,13 @@
],
"current_gap": [
"S4.1 已定義 workflow / webhook / runner / secret 名稱 inventory 契約,但尚未收集實際 redacted snapshot",
"S4.12 已建立 workflow / secret 名稱 owner response 收件包,但目前 received_response_count=0、accepted_response_count=0",
"不得搬移或輸出 secret value",
"不得因缺資料而假設 GitHub ready"
],
"allowed_now": [
"建立 read-only inventory plan",
"mirror S4.12 owner response templates、acceptance checks 與 rejection rules",
"列出需要 owner 補證的欄位",
"維持 GitHub primary blocked"
],

View File

@@ -8,6 +8,7 @@
"source_indexes": [
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"docs/security/source-control-primary-readiness-gate.snapshot.json",
"docs/security/security-rollout-policy.snapshot.json"
],
@@ -17,6 +18,9 @@
"external_scope_review_count": 1,
"export_request_count": 7,
"export_lane_count": 5,
"owner_response_template_count": 5,
"owner_response_received_count": 0,
"owner_response_accepted_count": 0,
"webhook_export_request_repo_count": 2,
"runner_export_request_repo_count": 4,
"deploy_key_export_request_repo_count": 1,
@@ -27,6 +31,17 @@
"runtime_actions_authorized": false,
"action_buttons_allowed": false
},
"owner_response_packet": {
"schema_version": "source_control_workflow_secret_name_owner_response_v1",
"snapshot_path": "docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"human_doc": "docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
"response_template_count": 5,
"received_response_count": 0,
"accepted_response_count": 0,
"rejected_response_count": 0,
"execution_authorized": false,
"allowed_effect": "response 通過後只更新 read-only inventory / export request / readiness wording不授權 workflow/secret/runner/deploy key 變更"
},
"export_lanes": [
{
"lane_id": "webhook_redacted_export_request",

View File

@@ -8,6 +8,7 @@
"docs/security/source-control-primary-readiness-gate.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"docs/security/github-target-decision.snapshot.json",
"docs/security/source-control-approval-board.snapshot.json",
"docs/security/source-control-reconcile-plan.snapshot.json",
@@ -19,10 +20,23 @@
"external_scope_count": 1,
"inventory_complete_count": 0,
"missing_inventory_count": 7,
"owner_response_template_count": 5,
"owner_response_received_count": 0,
"owner_response_accepted_count": 0,
"secret_value_collection_allowed": false,
"runtime_actions_authorized": false,
"action_buttons_allowed": false
},
"owner_response_packet": {
"schema_version": "source_control_workflow_secret_name_owner_response_v1",
"snapshot_path": "docs/security/source-control-workflow-secret-name-owner-response.snapshot.json",
"human_doc": "docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md",
"response_template_count": 5,
"received_response_count": 0,
"accepted_response_count": 0,
"rejected_response_count": 0,
"execution_authorized": false
},
"inventory_lanes": [
{
"lane_id": "workflow_file_inventory",
@@ -413,6 +427,7 @@
"此 inventory 完成前GitHub primary readiness gate 必須維持 blocked。",
"S4.2 已補本機可見 workflow / CODEOWNERS / referenced secret name evidence但 webhook、deploy key、branch protection 與 repository secret parity 仍未完成。",
"S4.3 已補 redacted export request package將 webhook、runner、deploy key、branch protection/CODEOWNERS 與 repository secret name parity 的 owner / read-only export 欄位、拒收欄位與 acceptance gate 文件化;它仍不是 API 執行或 primary cutover 批准。",
"S4.12 已補 owner response 收件包,將 5 類 export lanes 的 response 欄位、驗收規則與拒收規則文件化received_response_count=0仍不得收集 secret value 或修改 workflow。",
"inventory snapshot 只能 mirror 成 Operator Console / Audit evidence不得新增 execution action。"
],
"forbidden_actions": [

View File

@@ -0,0 +1,418 @@
{
"schema_version": "source_control_workflow_secret_name_owner_response_v1",
"status": "draft_waiting_owner_response",
"date": "2026-05-17",
"mode": "owner_workflow_secret_name_response_intake_only",
"runtime_execution_authorized": false,
"source_contract": "source_control_workflow_secret_name_inventory_v1",
"target_contract": "source_control_workflow_secret_name_export_request_v1",
"source_indexes": [
"docs/security/source-control-workflow-secret-name-inventory.snapshot.json",
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-INVENTORY.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-LOCAL-EVIDENCE.md",
"docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-EXPORT-REQUEST.md",
"docs/security/source-control-primary-readiness-gate.snapshot.json",
"docs/security/security-approval-review-packet.snapshot.json",
"docs/security/security-followup-runtime-gate.snapshot.json"
],
"summary": {
"owner_response_status": "waiting_owner_response",
"candidate_repo_count": 8,
"in_scope_repo_count": 7,
"export_request_count": 7,
"export_lane_count": 5,
"local_evidence_repo_count": 4,
"local_workflow_file_count": 31,
"local_referenced_secret_name_count": 43,
"response_template_count": 5,
"received_response_count": 0,
"accepted_response_count": 0,
"rejected_response_count": 0,
"acceptance_check_count": 8,
"rejection_rule_count": 10,
"secret_value_collection_allowed": false,
"write_token_allowed": false,
"workflow_modification_authorized": false,
"webhook_modification_authorized": false,
"runner_change_authorized": false,
"deploy_key_change_authorized": false,
"branch_protection_change_authorized": false,
"repo_secret_change_authorized": false,
"github_hosted_runner_enable_authorized": false,
"refs_sync_authorized": false,
"github_primary_switch_authorized": false,
"action_buttons_allowed": false
},
"response_templates": [
{
"template_id": "response-webhook-redacted-export",
"lane": "webhook_redacted_export_request",
"affected_repos": [
"owenhytsai/awoooi",
"owenhytsai/wooo-aiops"
],
"risk": "MEDIUM",
"covered_repo_count": 2,
"requested_owner_decision": "回覆 webhook 名稱、redacted host、事件類型、enabled flag 與 owner不得包含 webhook secret、token URL、header、cookie 或 payload body。",
"required_owner_fields": [
"owner_role_or_team",
"decision",
"decision_reason",
"repo",
"provider",
"webhook_name_or_none",
"destination_host_redacted",
"event_types",
"active_enabled_flag",
"webhook_owner",
"evidence_refs"
],
"acceptable_decisions": [
"provide_redacted_webhook_inventory_candidate",
"mark_no_webhook_candidate",
"hold_pending_webhook_owner",
"unknown_requires_more_evidence"
],
"minimum_evidence_refs": [
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-primary-readiness-gate.snapshot.json",
"docs/security/security-mirror-quarantine.snapshot.json"
],
"acceptance_criteria": [
"只允許保存 redacted host、event types、enabled flag 與 owner。",
"必須標示 primary cutover 後哪一端負責發 webhook或明確要求補證。",
"必須承認 response 通過後只更新 read-only inventory / readiness wording不修改 webhook。"
],
"rejection_conditions": [
"含 webhook secret、完整 payload URL、query token、header、cookie 或 request body。",
"要求立即建立、停用或修改 webhook。",
"缺 repo、provider、webhook owner 或 no-webhook disposition。"
],
"allowed_outputs": [
"更新 `source-control-workflow-secret-name-export-request.snapshot.json` 的 webhook read-only owner response 欄位。",
"更新 `source-control-primary-readiness-gate.snapshot.json` 的 workflow/webhook blocker wording。",
"建立 request_more_evidence / quarantine lane。"
],
"execution_authorized": false
},
{
"template_id": "response-runner-label-owner",
"lane": "runner_label_owner_export_request",
"affected_repos": [
"owenhytsai/awoooi",
"owenhytsai/wooo-aiops",
"owenhytsai/wooo-infra-config",
"owenhytsai/ewoooc"
],
"risk": "HIGH",
"covered_repo_count": 4,
"requested_owner_decision": "回覆 runner label、executor type、hosted/self-hosted、owner 與 GitHub hosted minutes 風險;不得包含 runner registration token、admin token、SSH key 或 host password。",
"required_owner_fields": [
"owner_role_or_team",
"decision",
"decision_reason",
"repo",
"provider",
"runner_label_or_none",
"runner_scope",
"executor_type",
"hosted_or_self_hosted",
"runner_owner",
"github_hosted_minutes_risk",
"maintenance_window",
"evidence_refs"
],
"acceptable_decisions": [
"keep_self_hosted_runner_candidate",
"approve_hosted_runner_risk_review_candidate",
"mark_no_runner_candidate",
"hold_pending_runner_owner",
"unknown_requires_more_evidence"
],
"minimum_evidence_refs": [
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-primary-readiness-gate.snapshot.json"
],
"acceptance_criteria": [
"必須標示 runner 是 self-hosted 或 hosted若 hosted必須列入額度風險 review而不是啟用批准。",
"必須指定 runner owner 與維護窗口,或明確要求補證。",
"必須承認 response 不授權新增 runner、不授權改 workflow、不授權消耗 GitHub hosted minutes。"
],
"rejection_conditions": [
"含 runner registration token、admin token、SSH private key、host password 或 API token。",
"要求立即啟用 GitHub hosted runner 或改 runner label。",
"把 hosted runner risk review candidate 當成使用 GitHub Actions 額度的批准。"
],
"allowed_outputs": [
"更新 runner label owner review lane。",
"更新 GitHub hosted runner 額度風險 wording。",
"維持 workflow / runner execution disabled。"
],
"execution_authorized": false
},
{
"template_id": "response-deploy-key-redacted-export",
"lane": "deploy_key_redacted_export_request",
"affected_repos": [
"owenhytsai/wooo-infra-config"
],
"risk": "HIGH",
"covered_repo_count": 1,
"requested_owner_decision": "回覆 deploy key / machine key 名稱、read-only flag、repo scope 與 owner不得包含 private key、完整 public key、token value 或 password。",
"required_owner_fields": [
"owner_role_or_team",
"decision",
"decision_reason",
"repo",
"provider",
"key_name_or_none",
"read_only_flag",
"repo_scope",
"key_owner",
"rotation_owner",
"evidence_refs"
],
"acceptable_decisions": [
"provide_deploy_key_name_scope_candidate",
"mark_no_deploy_key_candidate",
"mark_write_capable_key_risk_candidate",
"hold_pending_key_owner",
"unknown_requires_more_evidence"
],
"minimum_evidence_refs": [
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/GIT-REMOTE-REFS-WOOO-INFRA-CONFIG-SNAPSHOT.md",
"docs/security/security-mirror-quarantine.snapshot.json"
],
"acceptance_criteria": [
"只允許 key 名稱、read-only flag、repo scope、owner 與 rotation owner。",
"write-capable key 只能列為風險 candidate不得自動 rotate 或刪除。",
"必須承認 response 不授權搬移 key、不授權貼 private key、不授權修改 deploy key。"
],
"rejection_conditions": [
"含 private key、完整 public key、token value、password 或 credential value。",
"要求立即 rotate、刪除或新增 deploy key。",
"缺 key owner / rotation owner 或 no-key disposition。"
],
"allowed_outputs": [
"更新 deploy key read-only risk lane。",
"更新 primary readiness key blocker wording。",
"建立 key_owner request_more_evidence lane。"
],
"execution_authorized": false
},
{
"template_id": "response-branch-protection-codeowners",
"lane": "branch_protection_codeowners_export_request",
"affected_repos": [
"owenhytsai/awoooi",
"owenhytsai/clawbot-v5",
"owenhytsai/wooo-infra-config",
"owenhytsai/ewoooc"
],
"risk": "MEDIUM",
"covered_repo_count": 4,
"requested_owner_decision": "回覆 protected branch、required checks、required review count、CODEOWNERS path 與 owner teams不得包含 team secret、PAT、admin override token 或 session cookie。",
"required_owner_fields": [
"owner_role_or_team",
"decision",
"decision_reason",
"repo",
"provider",
"protected_branch_name_or_none",
"required_review_count",
"required_status_check_names",
"codeowners_path_or_none",
"owner_team_names",
"ruleset_owner",
"evidence_refs"
],
"acceptable_decisions": [
"provide_branch_protection_codeowners_candidate",
"mark_no_branch_protection_candidate",
"hold_pending_ruleset_owner",
"unknown_requires_more_evidence"
],
"minimum_evidence_refs": [
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/source-control-primary-readiness-gate.snapshot.json"
],
"acceptance_criteria": [
"必須列出 required status check names並標示與 workflow / runner label 對應狀態。",
"缺 CODEOWNERS 或 branch protection 只能形成 readiness gap不代表可修改規則。",
"必須指定 ruleset owner 或 request_more_evidence owner。"
],
"rejection_conditions": [
"含 PAT、admin override token、session cookie、team secret 或未脫敏截圖。",
"要求立即修改 branch protection、ruleset、required checks 或 CODEOWNERS。",
"把 branch protection response 當成 primary readiness complete。"
],
"allowed_outputs": [
"更新 branch protection / CODEOWNERS owner review lane。",
"更新 required status check parity wording。",
"維持 primary_ready_count=0。"
],
"execution_authorized": false
},
{
"template_id": "response-repository-secret-name-parity",
"lane": "repository_secret_name_parity_export_request",
"affected_repos": [
"owenhytsai/awoooi",
"owenhytsai/clawbot-v5",
"owenhytsai/wooo-aiops",
"owenhytsai/wooo-infra-config",
"owenhytsai/ewoooc",
"owenhytsai/bitan-pharmacy",
"owenhytsai/tsenyang-website"
],
"risk": "HIGH",
"covered_repo_count": 7,
"requested_owner_decision": "回覆 repository secret 名稱 parity、scope、owning team、used-by workflow 與 present_in_gitea / present_in_github metadata不得包含 value、hash、partial token 或可還原片段。",
"required_owner_fields": [
"owner_role_or_team",
"decision",
"decision_reason",
"repo",
"provider",
"secret_name_list_or_none",
"secret_scope",
"owning_team",
"used_by_workflow_name",
"rotation_owner",
"present_in_gitea",
"present_in_github",
"evidence_refs"
],
"acceptable_decisions": [
"provide_secret_name_presence_map_candidate",
"mark_no_repository_secret_candidate",
"hold_pending_secret_owner",
"unknown_requires_more_evidence"
],
"minimum_evidence_refs": [
"docs/security/source-control-workflow-secret-name-local-evidence.snapshot.json",
"docs/security/source-control-workflow-secret-name-export-request.snapshot.json",
"docs/security/security-mirror-quarantine.snapshot.json"
],
"acceptance_criteria": [
"只允許保存 secret name、scope、owner、used-by workflow、present/absent metadata。",
"不得保存 value、hash、partial token、masked token 或任何可還原片段。",
"缺漏 secret 只建立 owner review lane不自動建立、複製、rotate 或刪除 secret。"
],
"rejection_conditions": [
"含 secret value、plaintext、hash、partial token、private key、credential value 或未脫敏截圖。",
"要求立即建立、複製、修改、rotate 或刪除 repository secret。",
"把 secret name parity response 當成 workflow 已可執行或 primary ready。"
],
"allowed_outputs": [
"更新 repository secret name parity owner review lane。",
"更新 workflow / secret name inventory gap wording。",
"維持 inventory_complete_count=0 與 primary_ready_count=0。"
],
"execution_authorized": false
}
],
"acceptance_checks": [
{
"check_id": "maps_to_known_export_lane",
"title": "回覆對應既有 export lane",
"required": true,
"pass_condition": "`lane` 必須對應 S4.3 既有 export laneswebhook、runner、deploy key、branch protection / CODEOWNERS 或 repository secret name parity。",
"failure_lane": "reject_unknown_export_lane",
"execution_authorized": false
},
{
"check_id": "decision_value_allowed",
"title": "決策值在允許範圍內",
"required": true,
"pass_condition": "`decision` 必須是該 response template 的 acceptable_decisions 之一。",
"failure_lane": "request_owner_correction",
"execution_authorized": false
},
{
"check_id": "repo_scope_present",
"title": "repo scope 已標示",
"required": true,
"pass_condition": "每筆回覆必須有 repo、provider 與 lane批次 secret name parity 必須有可重現 repo list。",
"failure_lane": "request_more_evidence",
"execution_authorized": false
},
{
"check_id": "owner_present",
"title": "owner 或補證 owner 已標示",
"required": true,
"pass_condition": "每筆回覆必須有 owner role/team且 lane-specific owner 不得空白;未知時必須選 hold/unknown。",
"failure_lane": "request_owner_assignment",
"execution_authorized": false
},
{
"check_id": "allowed_fields_only",
"title": "只含允許欄位",
"required": true,
"pass_condition": "回覆只能包含 lane allowed_fields 與 owner/evidence metadata不得加入 request body、header、credential 或 raw config。",
"failure_lane": "quarantine_unexpected_payload",
"execution_authorized": false
},
{
"check_id": "secret_values_absent",
"title": "未包含 secret value",
"required": true,
"pass_condition": "不得包含 secret/token/cookie/private key/deploy key/runner token/webhook secret/password、hash、masked token 或 partial credential。",
"failure_lane": "quarantine_sensitive_payload",
"execution_authorized": false
},
{
"check_id": "no_write_or_rotation_requested",
"title": "不含 write 或 rotation 要求",
"required": true,
"pass_condition": "回覆不得要求 write API、rotate secret、修改 workflow、修改 webhook、修改 runner、修改 deploy key 或修改 branch protection。",
"failure_lane": "reject_runtime_change_request",
"execution_authorized": false
},
{
"check_id": "no_primary_or_refs_action_requested",
"title": "不含 primary 或 refs action",
"required": true,
"pass_condition": "回覆不得要求建立 repo、sync refs、切 GitHub primary、停用 Gitea 或把 inventory 視為 primary ready。",
"failure_lane": "reject_primary_or_refs_action",
"execution_authorized": false
}
],
"rejection_rules": [
"回覆含 secret value、PAT、cookie、session、CSRF token、private key、deploy key value、runner token、webhook secret 或 partial credential 時必須拒收。",
"回覆含完整 webhook payload URL、query token、authorization header、request body 或未脫敏截圖時必須拒收。",
"回覆含 runner registration token、runner admin token、SSH private key、host password 或 API token 時必須拒收。",
"回覆含 deploy key private material、完整 public key、token value、password 或 credential value 時必須拒收。",
"回覆含 secret value、secret hash、partial token、masked token 或任何可還原片段時必須拒收。",
"回覆要求 write API、修改 workflow/webhook/runner/deploy key/branch protection/CODEOWNERS 或 rotate secret 時必須拒收。",
"回覆要求建立 repo、sync refs、切 GitHub primary、停用或封存 Gitea 時必須拒收。",
"回覆缺 repo、provider、lane owner 或 no-data disposition 時不得標記 accepted。",
"回覆把 owner response 當成 inventory complete、workflow ready、secret parity complete 或 GitHub primary ready 時必須拒收。",
"任何不確定是否含敏感值、私有 URL 憑證、完整 key material 或未脫敏截圖的回覆必須先進 mirror quarantine。"
],
"allowed_outputs": [
"更新 `source-control-workflow-secret-name-inventory.snapshot.json` 的 read-only owner response 欄位。",
"更新 `source-control-workflow-secret-name-export-request.snapshot.json` 的 response status wording。",
"更新 `source-control-primary-readiness-gate.snapshot.json` 的 workflow / webhook / runner / secret name blocker wording。",
"更新 `security-mirror-status-rollup.snapshot.json` 的 workflow_secret owner response summary。",
"建立 request_more_evidence / quarantine lane。",
"維持 `inventory_complete_count=0`、`github_primary_ready_count=0` 與所有 workflow / secret / repo / refs / primary execution flags false。"
],
"forbidden_actions": [
"收集或保存 secret value、token value、cookie、session、private key、deploy key value、runner token 或 webhook secret。",
"使用 write token 或 write API。",
"修改 workflow、webhook、runner、deploy key、branch protection、CODEOWNERS 或 repository secret。",
"rotate secret、建立 secret、複製 secret 或刪除 secret。",
"啟用 GitHub hosted runner 或消耗 GitHub Actions 額度。",
"建立 GitHub repo 或修改 visibility。",
"sync refs、push refs、delete refs 或 force push。",
"切 GitHub primary。",
"停用、刪除、封存或降級 Gitea repo。",
"新增 AwoooP execution action button。"
]
}