docs(security): add gitea owner response preflight
This commit is contained in:
@@ -1,3 +1,18 @@
|
||||
## 2026-05-18 | 資安供應鏈 S4.9:Owner Response Intake Preflight
|
||||
|
||||
**背景**:S4.13 已把下一個建議收件固定為 S4.9;本輪補強 S4.9 本身的收件前檢查,讓 AwoooP 在 owner response 到來時先判斷可收、補證、隔離或拒收,而不是直接推進 inventory / migration。
|
||||
|
||||
**完成**:
|
||||
- `gitea_inventory_owner_attestation_response_v1` schema 新增 optional `intake_preflight_checks`,summary 新增 `intake_preflight_check_count`。
|
||||
- `gitea-inventory-owner-attestation-response.snapshot.json` 新增 6 個 preflight checks:已知 item、必填欄位、允許 decision、脫敏 evidence、不得夾帶執行要求、接受前覆蓋五個 items。
|
||||
- `source-control-owner-response-guard.py` 反查 S4.9 preflight count、id 順序、display order 與 `execution_authorized=false`。
|
||||
- 更新 S4.9 人讀文件、AwoooP checklist、readiness、manifest、status rollup、approval queue / gate / review packet、follow-up runtime gate、primary readiness gate、runbook 與 progress。
|
||||
|
||||
**仍禁止**:
|
||||
- 不把 preflight pass 當成 owner response accepted。
|
||||
- 不把 owner response 當成 read-only inventory runtime、repo migration、refs sync、GitHub primary 或 Gitea 停用批准。
|
||||
- 不收 token value、secret value、private key、cookie、session、DB dump、git object pack 或未脫敏 payload。
|
||||
|
||||
## 2026-05-18 | 資安供應鏈 S4.13:Next Collection Candidate
|
||||
|
||||
**背景**:S4.13 已有 4 條 missing response lanes 與 4 步 collection order;本輪補上單一 `next_collection_candidate`,讓 AwoooP 只顯示下一包建議收件,而不是把整串順序誤讀成 approval queue 或 execution queue。
|
||||
|
||||
@@ -61,6 +61,7 @@
|
||||
"accepted_response_count",
|
||||
"rejected_response_count",
|
||||
"response_template_count",
|
||||
"intake_preflight_check_count",
|
||||
"acceptance_check_count",
|
||||
"rejection_rule_count",
|
||||
"token_value_collection_allowed",
|
||||
@@ -80,6 +81,7 @@
|
||||
"accepted_response_count": {"type": "integer", "minimum": 0},
|
||||
"rejected_response_count": {"type": "integer", "minimum": 0},
|
||||
"response_template_count": {"type": "integer", "minimum": 0},
|
||||
"intake_preflight_check_count": {"type": "integer", "minimum": 0},
|
||||
"acceptance_check_count": {"type": "integer", "minimum": 0},
|
||||
"rejection_rule_count": {"type": "integer", "minimum": 0},
|
||||
"token_value_collection_allowed": {
|
||||
@@ -168,6 +170,46 @@
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"intake_preflight_checks": {
|
||||
"type": "array",
|
||||
"description": "AwoooP 收到 S4.9 owner response 前後可執行的只讀 preflight;只分類可收、補證或隔離,不授權任何執行。",
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"check_id",
|
||||
"display_order",
|
||||
"title",
|
||||
"required",
|
||||
"pass_condition",
|
||||
"failure_lane",
|
||||
"awooop_display",
|
||||
"execution_authorized"
|
||||
],
|
||||
"properties": {
|
||||
"check_id": {"type": "string"},
|
||||
"display_order": {"type": "integer", "minimum": 1},
|
||||
"title": {"type": "string"},
|
||||
"required": {"type": "boolean"},
|
||||
"pass_condition": {"type": "string"},
|
||||
"failure_lane": {"type": "string"},
|
||||
"awooop_display": {
|
||||
"type": "string",
|
||||
"enum": [
|
||||
"ready_for_owner_review",
|
||||
"request_more_evidence",
|
||||
"quarantine_sensitive_payload",
|
||||
"reject_execution_request"
|
||||
]
|
||||
},
|
||||
"execution_authorized": {
|
||||
"type": "boolean",
|
||||
"const": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"minItems": 1
|
||||
},
|
||||
"acceptance_checks": {
|
||||
"type": "array",
|
||||
"items": {
|
||||
|
||||
@@ -45,7 +45,7 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
|
||||
| `source_control_owner_response_validation_rollup_v1` | S4.9 / S4.10 / S4.11 / S4.12 owner response validation rollup | Operator Console、Source-control review、Audit | mirror-only | 只顯示四包 response packets、22 個 templates、missing response lanes、owner response collection order、next collection candidate、10 個 cross-packet checks、quarantine rules 與 latest local validation;不得視為 approval 或 runtime gate |
|
||||
| `coding_task_v1` | Code Review / Codex Security / manual review | Approval candidate、Channel Event、Audit | suggest-only | 不自動開 patch runner、不自動 merge |
|
||||
| `source_control_migration_event_v1` | Gitea/GitHub branch/tag/SHA diff | Supply-chain evidence、Approval candidate | mirror-only | 不觸發 deploy、不切換 primary |
|
||||
| `gitea_repo_inventory_v1` | Gitea org/user repo list 或管理匯出 | Supply-chain evidence、migration matrix | mirror-only | 顯示 public-only evidence、S4.5 authenticated/admin export request、S4.6 redacted import acceptance、S4.7 owner coverage attestation 與 S4.9 owner response 收件包;不保存 token value、不刪除或停用 Gitea repo |
|
||||
| `gitea_repo_inventory_v1` | Gitea org/user repo list 或管理匯出 | Supply-chain evidence、migration matrix | mirror-only | 顯示 public-only evidence、S4.5 authenticated/admin export request、S4.6 redacted import acceptance、S4.7 owner coverage attestation、S4.9 owner response 收件包與 6 個 intake preflight checks;不保存 token value、不刪除或停用 Gitea repo |
|
||||
| `local_git_remote_inventory_v1` | 本機可見 Git working tree remote | Source-control coverage evidence、migration matrix | mirror-only | 不視為 Gitea server 全量、不修改 remote |
|
||||
| `github_target_probe_v1` | 候選 GitHub repo read-only probe | Migration target evidence | mirror-only | `not_found_or_private` 不等同確認不存在 |
|
||||
| `github_target_decision_v1` | GitHub target 建立與可見性決策草案;S4.10 owner decision response 收件包 | Approval candidate、Migration target evidence | mirror-only | approval 前不得建立 repo、修改 visibility、同步 refs;S4.10 response 目前 0 筆,不代表執行批准 |
|
||||
@@ -118,7 +118,7 @@ AwoooP 初期不得直接啟動掃描、不得呼叫 Codex patch runner、不得
|
||||
| `source_control_migration_event_v1.status=blocked` | `observe` | 顯示 blocking reason,不允許切 primary |
|
||||
| `source_control_migration_event_v1.status=verified` | `approve_required` | 仍需人工批准主控切換 |
|
||||
| `gitea_repo_inventory_v1.status=blocked` | `observe` | 補只讀 token 或管理匯出,不做同步 |
|
||||
| `gitea_repo_inventory_v1.status=partial` | `observe` | 視為 public-only evidence,顯示 S4.5 export request、S4.6 import acceptance、S4.7 owner attestation request、S4.9 owner response templates 與 coverage gap,不做同步 |
|
||||
| `gitea_repo_inventory_v1.status=partial` | `observe` | 視為 public-only evidence,顯示 S4.5 export request、S4.6 import acceptance、S4.7 owner attestation request、S4.9 owner response templates、intake preflight checks 與 coverage gap,不做同步 |
|
||||
| `gitea_repo_inventory_v1.status=ok` | `warn` | 進入 repo mapping / branch tag diff |
|
||||
| `approval_required_event_v1.requested_action=run_gitea_readonly_inventory` | `approve_required` | 只允許 read-only token 或 redacted admin export,不保存 token value |
|
||||
| `local_git_remote_inventory_v1.status=partial` | `observe` | 補 server-side inventory,不做主控切換 |
|
||||
|
||||
@@ -58,6 +58,8 @@ AwoooP 顯示 S4.13 時,應把 `missing_response_lanes` 當成 Operator Consol
|
||||
|
||||
可同步顯示 `next_collection_candidate`,目前只指向 S4.9 Gitea owner attestation response:需要 5 個 Gitea coverage attestation items、received / accepted 皆為 0、顯示模式為 `display_next_collection_item_only`。這個欄位只提示下一包 response,不是 approval,也不代表 S4.10 / S4.11 / S4.12 可被提前接受。
|
||||
|
||||
S4.9 也提供 6 個 `intake_preflight_checks`:已知 item、必填欄位、允許 decision、脫敏 evidence、不得夾帶執行要求、接受前覆蓋五個 items。AwoooP 只能用它判斷可收、補證、隔離或拒收,不得把 preflight pass 當成 inventory runtime、repo migration 或 primary approval。
|
||||
|
||||
## 1. Session 分工
|
||||
|
||||
### AwoooP 主線 Session
|
||||
|
||||
@@ -29,6 +29,7 @@ S4.7 已定義要問什麼,S4.8 已把它接到 AwoooP approval lane;S4.9
|
||||
| 已接受 response | 0 |
|
||||
| 已拒收 response | 0 |
|
||||
| response templates | 5 |
|
||||
| intake preflight checks | 6 |
|
||||
| acceptance checks | 8 |
|
||||
| rejection rules | 10 |
|
||||
| 允許收集 token value | `false` |
|
||||
@@ -48,6 +49,19 @@ S4.7 已定義要問什麼,S4.8 已把它接到 AwoooP approval lane;S4.9
|
||||
5. `evidence_refs`:只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata。
|
||||
6. `followup_owner`:若需要補 evidence,需指定下一個負責角色或團隊。
|
||||
|
||||
## 2.1 AwoooP 收件前 Preflight
|
||||
|
||||
| 順序 | 檢查 | 失敗處理 |
|
||||
|------|------|----------|
|
||||
| 1 | 回覆必須對應 S4.7 已知 item | 要求 owner 修正 |
|
||||
| 2 | 必填欄位完整 | 要求補 evidence |
|
||||
| 3 | `decision` 在模板允許值內 | 要求 owner 修正 |
|
||||
| 4 | 只接受脫敏 evidence refs | 進 mirror quarantine |
|
||||
| 5 | 不得夾帶執行要求 | 拒收 execution request |
|
||||
| 6 | 接受前需覆蓋五個 items | 維持 waiting 或 request more evidence |
|
||||
|
||||
這 6 個 preflight 只協助 AwoooP 判斷「可收、補證、隔離或拒收」。它們不授權 read-only inventory runtime、不建立 GitHub repo、不修改 Gitea、不 sync refs,也不切 GitHub primary。
|
||||
|
||||
## 3. 五個 Response Template
|
||||
|
||||
| Template | 對應 S4.7 item | 驗收重點 |
|
||||
@@ -85,7 +99,7 @@ S4.7 已定義要問什麼,S4.8 已把它接到 AwoooP approval lane;S4.9
|
||||
## 6. AwoooP 可做
|
||||
|
||||
1. 顯示 5 個 owner response templates。
|
||||
2. 顯示 acceptance checks 與 rejection rules。
|
||||
2. 顯示 6 個 intake preflight checks、acceptance checks 與 rejection rules。
|
||||
3. 在 owner response 到來後,只更新 read-only snapshot、matrix、decision table、readiness gate 與 status rollup。
|
||||
4. 將不完整或可疑 response 放進 mirror quarantine。
|
||||
5. 持續顯示 `received_response_count=0`、`accepted_response_count=0`,直到真的收到脫敏 response。
|
||||
|
||||
@@ -35,7 +35,7 @@ S4.6 已補 `gitea_authenticated_inventory_import_acceptance_v1`,把 owner /
|
||||
|
||||
S4.7 已補 `gitea_inventory_coverage_attestation_v1`,把 public-only / local remote gap、org/user endpoint、110 internal adjacent source、canonical owner 與 legacy/inaccessible repo disposition 的 owner decision 正式文件化。attestation 只做 scope 判定,不等於 repo migration 或 primary cutover approval。
|
||||
|
||||
S4.9 已補 `gitea_inventory_owner_attestation_response_v1`,把 owner 回覆 S4.7 五個 items 時的必填欄位、驗收規則與拒收規則正式文件化。response 通過只代表可更新 read-only matrix / decision table,不等於 read-only inventory 已執行。
|
||||
S4.9 已補 `gitea_inventory_owner_attestation_response_v1`,把 owner 回覆 S4.7 五個 items 時的必填欄位、intake preflight checks、驗收規則與拒收規則正式文件化。response 通過只代表可更新 read-only matrix / decision table,不等於 read-only inventory 已執行。
|
||||
|
||||
## 1. 申請批准的動作
|
||||
|
||||
|
||||
@@ -37,7 +37,7 @@ S4.6 已補 `gitea_authenticated_inventory_import_acceptance_v1`:收到 owner
|
||||
|
||||
S4.7 已補 `gitea_inventory_coverage_attestation_v1`:owner 必須先對 public-only / local remote gap、org/user endpoint、110 internal adjacent source、canonical owner 與 legacy/inaccessible repo disposition 作 scope decision。此 attestation 仍不授權 token 收集、repo 寫入、refs sync 或 primary cutover。
|
||||
|
||||
S4.9 已補 `gitea_inventory_owner_attestation_response_v1`:owner response 必須依 5 個 template 填寫並通過基本驗收,才能把 S4.7 coverage attestation 視為可審 evidence。此 response 收件包仍不授權 read-only inventory runtime、repo migration 或 primary cutover。
|
||||
S4.9 已補 `gitea_inventory_owner_attestation_response_v1`:owner response 必須依 5 個 template 填寫,並先通過 6 個 intake preflight checks 與基本驗收,才能把 S4.7 coverage attestation 視為可審 evidence。此 response 收件包仍不授權 read-only inventory runtime、repo migration 或 primary cutover。
|
||||
|
||||
## 1. Public-only 快照指令
|
||||
|
||||
|
||||
@@ -73,4 +73,4 @@ S3.0 只讓人工批准有一致語言與可稽核格式。
|
||||
|
||||
2026-05-17 S4.8 追加:Gitea gate 的批准範圍已改為 owner attestation 先行。`approve_scope` 最多允許補 S4.7 owner coverage attestation、更新 matrix / decision table,並在後續 runtime gate 準備妥當後才可做一次 read-only inventory;仍不得保存 token value、寫 Gitea、建立 GitHub repo、sync refs 或切 primary。
|
||||
|
||||
2026-05-17 S4.9 追加:Gitea gate 現在要求 owner response 依 S4.9 收件包通過基本驗收後,才可把 S4.7 coverage attestation 視為可審 evidence。此驗收仍只更新 read-only matrix / decision table / readiness gate,不授權 inventory runtime、repo migration 或 GitHub primary。
|
||||
2026-05-17 S4.9 追加:Gitea gate 現在要求 owner response 依 S4.9 收件包通過 intake preflight checks 與基本驗收後,才可把 S4.7 coverage attestation 視為可審 evidence。此驗收仍只更新 read-only matrix / decision table / readiness gate,不授權 inventory runtime、repo migration 或 GitHub primary。
|
||||
|
||||
@@ -71,4 +71,4 @@ S3.0 開始,人工批准範圍由 `security_approval_gate_v1` 承接。S3.1
|
||||
|
||||
2026-05-17 S4.8 追加:Gitea queue item 不新增第 9 筆,而是把既有 `gitea-private-internal-server-side-inventory-2026-05-12` 升級為「S4.7 owner coverage attestation 先行」。AwoooP 應先要求 owner 對 5 個 coverage items 作 scope decision;未完成前不得把 inventory 標記 complete,也不得啟動 read-only token / redacted admin export runtime gate。
|
||||
|
||||
2026-05-17 S4.9 追加:Gitea queue item 仍維持同一筆,新增 owner response 收件包作為 S4.7 的填寫與驗收格式。AwoooP 可顯示 5 個 response templates、8 個 acceptance checks 與 10 個 rejection rules;未收到並驗收 response 前,不得把 owner attestation 視為完成。
|
||||
2026-05-17 S4.9 追加:Gitea queue item 仍維持同一筆,新增 owner response 收件包作為 S4.7 的填寫與驗收格式。AwoooP 可顯示 5 個 response templates、6 個 intake preflight checks、8 個 acceptance checks 與 10 個 rejection rules;未收到並驗收 response 前,不得把 owner attestation 視為完成。
|
||||
|
||||
@@ -71,4 +71,4 @@ S3.2 只補上「讓人好審」的封包,不提高資安阻力。
|
||||
|
||||
2026-05-17 S4.8 追加:Gitea review packet 會顯示 S4.7 的 5 個 owner attestation items、`received_attestation_count=0` 與 `accepted_attestation_count=0`。這讓 reviewer 先判斷 coverage gap 與 scope decision,不會把 read-only inventory approval 誤解成 repo migration 或 GitHub primary approval。
|
||||
|
||||
2026-05-17 S4.9 追加:Gitea review packet 會顯示 S4.9 的 5 個 owner response templates、`received_response_count=0`、8 個 acceptance checks 與 10 個 rejection rules。reviewer 應先看 response 是否可驗收,再看 read-only inventory gate;review packet 仍不代表批准,也不授權執行。
|
||||
2026-05-17 S4.9 追加:Gitea review packet 會顯示 S4.9 的 5 個 owner response templates、6 個 intake preflight checks、`received_response_count=0`、8 個 acceptance checks 與 10 個 rejection rules。reviewer 應先看 response 是否可收、需補證、需隔離或需拒收,再看 read-only inventory gate;review packet 仍不代表批准,也不授權執行。
|
||||
|
||||
@@ -24,7 +24,7 @@
|
||||
| `CHECK_ROUTE_COVERAGE` | 確認 route groups 覆蓋所有 contracts | 不建立 fallback execution route |
|
||||
| `CHECK_ACCEPTANCE_AND_QUARANTINE` | 確認驗收與隔離只處理 mirror payload | 不阻擋 runtime |
|
||||
| `CHECK_PROGRESS_GUARD` | 確認 58% 進度估算只作狀態顯示 | 不把進度當 approval 或 runtime authorization |
|
||||
| `CHECK_OWNER_RESPONSE_GUARD` | 確認四包 owner response 仍未收到 / 接受 | 不把 guard pass 當成 repo、refs、workflow、secret、runner、primary 或 runtime 授權 |
|
||||
| `CHECK_OWNER_RESPONSE_GUARD` | 確認四包 owner response 仍未收到 / 接受,且 S4.9 preflight 只分類可收、補證、隔離或拒收 | 不把 guard pass 當成 repo、refs、workflow、secret、runner、primary 或 runtime 授權 |
|
||||
| `CHECK_LOW_NOISE_CHANNEL` | 確認 Channel Event 低噪音 | 不對 LOW / MEDIUM 洗版 |
|
||||
| `CONFIRM_NO_RUNTIME_ACTION` | 確認 dry-run 沒有任何 runtime action | 不掃描、不 deploy、不 sync refs |
|
||||
|
||||
|
||||
@@ -35,7 +35,7 @@
|
||||
| Contract | 狀態 | 原因 | 下一步 |
|
||||
|----------|------|------|--------|
|
||||
| `security_finding_v1` | `partial_ready` | 目前只有 Kali sample snapshot,runtime ingestion 尚未啟用 | 先 review `kali-finding-runtime-ingestion-approval-20260513` |
|
||||
| `gitea_repo_inventory_v1` | `partial_ready` | 目前只有 public-only / blocked endpoint evidence;S4.5 已補認證清冊匯出請求,S4.6 已補匯入驗收契約,S4.7 已補 owner coverage attestation,S4.9 已補 owner response 收件包;未認證公開範圍 2 個、本機可見 Gitea unique 4 個、覆蓋缺口 2 個、attestation items 5 個、owner response 0 筆 | 先依 S4.9 收到並驗收 S4.7 owner response,再依 S4.5 請求取得脫敏清冊並用 S4.6 驗收 / 拒收 / 隔離;不保存 token value |
|
||||
| `gitea_repo_inventory_v1` | `partial_ready` | 目前只有 public-only / blocked endpoint evidence;S4.5 已補認證清冊匯出請求,S4.6 已補匯入驗收契約,S4.7 已補 owner coverage attestation,S4.9 已補 owner response 收件包與 6 個 intake preflight checks;未認證公開範圍 2 個、本機可見 Gitea unique 4 個、覆蓋缺口 2 個、attestation items 5 個、owner response 0 筆 | 先依 S4.9 收到並驗收 S4.7 owner response,再依 S4.5 請求取得脫敏清冊並用 S4.6 驗收 / 拒收 / 隔離;不保存 token value |
|
||||
| `coding_task_v1` | `contract_only` | 已有 schema 與 handoff prompt,尚無正式 coding task snapshot | 等 code review 產生實際 task 後再 mirror |
|
||||
|
||||
## 2. AwoooP 鏡像目的地
|
||||
@@ -82,7 +82,7 @@ AwoooP 可以將 ready / partial contracts mirror 到:
|
||||
14. 再 mirror `security_followup_runtime_gate_v1`,只顯示 runtime gate 準備模板、preflight checks 與 rollback / disable requirement。
|
||||
15. 再 mirror `source_control_primary_readiness_gate_v1`,只顯示 GitHub primary parity、owner、rollback 與人工批准缺口。
|
||||
16. 再 mirror `source_control_primary_rollback_adr_v1`,只顯示 7 個 in-scope repo 的 rollback ADR 草案、validation window 與 owner review;不執行 rollback、不切 primary。
|
||||
17. 再 mirror `gitea_repo_inventory_v1`、S4.5 認證清冊匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation 與 S4.9 owner response 收件包,只顯示未認證公開範圍 / 本機 evidence 覆蓋缺口、只讀 / 管理脫敏匯出選項、payload 驗收 / 拒收 / 隔離規則、5 個 owner scope decision items 與 response templates;不保存 token value、不寫 Gitea、不 sync refs。
|
||||
17. 再 mirror `gitea_repo_inventory_v1`、S4.5 認證清冊匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation 與 S4.9 owner response 收件包,只顯示未認證公開範圍 / 本機 evidence 覆蓋缺口、只讀 / 管理脫敏匯出選項、payload 驗收 / 拒收 / 隔離規則、5 個 owner scope decision items、response templates 與 intake preflight checks;不保存 token value、不寫 Gitea、不 sync refs。
|
||||
18. 再 mirror `source_control_workflow_secret_name_inventory_v1`、S4.2 local evidence 與 S4.3 redacted export request,只顯示 workflow / webhook / runner / deploy key / branch protection / CODEOWNERS / secret 名稱 inventory 缺口;目前 local evidence 有 4 個 repos、31 個 workflow files、43 個 referenced secret names,export request 有 7 個 repos、5 類 lanes,不保存 secret value。
|
||||
19. 再 mirror `kali_integration_status_v1` 與 `kali_scan_scope_approval_v1`。
|
||||
20. 最後再 mirror source-control 其他 contracts。
|
||||
|
||||
@@ -30,7 +30,7 @@
|
||||
| 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 ready;S4.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 筆;S4.13 已補四包 owner response validation rollup,22 個 templates、received / accepted / rejected 皆為 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 attestation;S4.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 |
|
||||
| Gitea inventory | S4.5 已補認證清冊匯出請求;S4.6 已補匯入驗收契約;S4.7 已補 owner coverage attestation;S4.8 已把既有 Gitea queue/gate/review packet/follow-up gate 對齊 attestation 先行;S4.9 已補 owner response 收件包與 6 個 intake preflight checks;目前 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 evidence;S4.3 補 7 個 repos、5 類 lanes 的 redacted export request;S4.12 補 5 個 owner response templates;0 個 inventory complete、禁止收集 secret value、禁止 write token |
|
||||
| Owner response validation | S4.13 已建立;四包 owner response 目前 received/accepted 皆為 0;4 條 missing response lanes、4 步 collection order 與 next collection candidate 可供 AwoooP 直接顯示;下一個建議收件為 S4.9 Gitea owner attestation;latest local validation 為 `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`,不代表 owner response 已收到或任何執行授權 |
|
||||
| Dry-run | `contract_defined_not_executed`;已納入 `CHECK_PROGRESS_GUARD` 與 `CHECK_OWNER_RESPONSE_GUARD`,latest local validation 為 `repo_snapshot_guard_pass`,仍不代表 production ingestion |
|
||||
|
||||
@@ -39,7 +39,7 @@
|
||||
| `security_mirror_status_rollup_v1` | mirror-only | AwoooP / Security Supply Chain 跨 Session 狀態總覽;S4.13 owner response validation rollup 與 next collection candidate | `security-mirror-status-rollup.snapshot.json` / `source-control-owner-response-validation-rollup.snapshot.json` |
|
||||
| `coding_task_v1` | suggest-only | Code Review 接 Codex patch-only | 無正式 snapshot |
|
||||
| `source_control_migration_event_v1` | mirror-only | Gitea/GitHub refs 差異 | `gitea-github-awoooi`、`clawbot-v5`、`wooo-aiops` |
|
||||
| `gitea_repo_inventory_v1` | mirror-only | Gitea repo inventory;S4.5 已補認證清冊匯出請求,S4.6 已補匯入驗收契約,S4.7 已補 owner coverage attestation,S4.9 已補 owner response 收件包 | public-only / blocked endpoint / S4.5 export request / S4.6 import acceptance / S4.7 coverage attestation / S4.9 response snapshots |
|
||||
| `gitea_repo_inventory_v1` | mirror-only | Gitea repo inventory;S4.5 已補認證清冊匯出請求,S4.6 已補匯入驗收契約,S4.7 已補 owner coverage attestation,S4.9 已補 owner response 收件包與 intake preflight checks | public-only / blocked endpoint / S4.5 export request / S4.6 import acceptance / S4.7 coverage attestation / S4.9 response snapshots |
|
||||
| `local_git_remote_inventory_v1` | mirror-only | 本機 remote coverage | `local-git-remote-inventory.snapshot.json` |
|
||||
| `github_target_probe_v1` | mirror-only | GitHub target visibility | `github-target-probe.snapshot.json` |
|
||||
| `github_target_decision_v1` | mirror-only | GitHub target 決策;S4.10 已補 owner decision response 收件包 | `github-target-decision.snapshot.json` / `github-target-owner-decision-response.snapshot.json` |
|
||||
@@ -62,7 +62,7 @@
|
||||
3. 將 snapshot mirror 成 Runtime State / Channel Event / Audit evidence。
|
||||
4. 讀到 `source-control-ref-truth-owner-response.snapshot.json` 時,只顯示 S4.11 response templates、acceptance checks 與 rejection rules;不得新增 refs action。
|
||||
5. 讀到 `source-control-owner-response-validation-rollup.snapshot.json` 時,只顯示 S4.9/S4.10/S4.11/S4.12 四個 response packets 的總覽:22 個 templates、received / accepted / rejected 皆為 0、cross-packet checks 10 個;不得把 rollup 當成 approval 或 execution authorization。
|
||||
6. 只對 `approval_required_event_v1`、repo approval package、`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` 建 approval candidate / review lane / next-state display / runtime gate preparation / primary readiness display / rollback ADR display / workflow-secret name inventory gate / redacted export request display;`github_target_decision_v1` 只能顯示 S4.10 owner decision response templates、received_response_count=0、acceptance checks 與 rejection rules,不得觸發 repo creation、visibility change、refs sync 或 primary switch;`gitea_repo_inventory_v1` 只能顯示 S4.5 認證匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation request、S4.9 owner response 收件包與覆蓋缺口,不得觸發 token collection 或 Gitea write。
|
||||
6. 只對 `approval_required_event_v1`、repo approval package、`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` 建 approval candidate / review lane / next-state display / runtime gate preparation / primary readiness display / rollback ADR display / workflow-secret name inventory gate / redacted export request display;`github_target_decision_v1` 只能顯示 S4.10 owner decision response templates、received_response_count=0、acceptance checks 與 rejection rules,不得觸發 repo creation、visibility change、refs sync 或 primary switch;`gitea_repo_inventory_v1` 只能顯示 S4.5 認證匯出請求、S4.6 匯入驗收契約、S4.7 owner coverage attestation request、S4.9 owner response 收件包、intake preflight checks 與覆蓋缺口,不得觸發 token collection 或 Gitea write。
|
||||
7. 不新增執行按鈕,不做 runtime enforcement。
|
||||
|
||||
## 3. 永久禁止
|
||||
|
||||
@@ -65,7 +65,7 @@ python3 scripts/security/security-mirror-progress-guard.py
|
||||
| S4.6 Gitea 認證清冊匯入驗收契約 | 完成草案 | 已建立匯入驗收 schema / snapshot / 人讀版;目前 received payload 0、accepted 0、rejected 0;定義 10 個驗收檢查、10 個拒收規則與 4 個 quarantine lanes | owner 提供脫敏 payload 後先驗收 / 拒收 / 隔離;仍不可把驗收當 primary approval |
|
||||
| S4.7 Gitea 清冊覆蓋 Owner Attestation | 完成草案 | 已建立 coverage attestation schema / snapshot / 人讀版;5 個 owner decision items、received attestation 0、accepted 0、execution authorized=false | owner 判定 public-only / local remote gap、org/user endpoint、110 adjacent source、canonical owner 與 legacy/inaccessible disposition;仍不可把 attestation 當 migration approval |
|
||||
| S4.8 Gitea Owner Attestation Approval Lane 對齊 | 完成草案 | 已將既有 Gitea approval queue / gate / review packet / follow-up runtime gate 對齊 S4.7 先行條件;queue items 維持 8、review packets 維持 8、active runtime gates 維持 0 | AwoooP 先顯示 5 個 attestation items,owner decision 接受前不得執行 read-only inventory 或標記 complete |
|
||||
| S4.9 Gitea Owner Attestation Response 收件包 | 完成草案 | 已建立 owner response schema / snapshot / 人讀版;5 個 response templates、8 個 acceptance checks、10 個 rejection rules、received response 0、accepted 0、execution authorized=false | owner 依模板回覆 S4.7 五個 items;response 通過只更新 read-only matrix / decision table / readiness gate,不代表 inventory 執行或 primary approval |
|
||||
| S4.9 Gitea Owner Attestation Response 收件包 | 完成草案 | 已建立 owner response schema / snapshot / 人讀版;5 個 response templates、6 個 intake preflight checks、8 個 acceptance checks、10 個 rejection rules、received response 0、accepted 0、execution authorized=false | owner 依模板回覆 S4.7 五個 items;AwoooP 先用 preflight 判斷可收、補證、隔離或拒收;response 通過只更新 read-only matrix / decision table / readiness gate,不代表 inventory 執行或 primary approval |
|
||||
| S4.10 GitHub Target Owner Decision Response 收件包 | 完成草案 | 已建立 owner decision response schema / snapshot / 人讀版;7 個 response templates、8 個 acceptance checks、10 個 rejection rules、received response 0、accepted 0、execution authorized=false | owner 依模板回覆 7 個 GitHub target 的 owner / visibility / canonical;response 通過只更新 read-only decision table / approval package / approval board / readiness gate,不代表 repo creation、visibility change、refs sync 或 primary approval |
|
||||
| S4.11 Source Control Ref Truth Owner Response 收件包 | 完成草案 | 已建立 owner response schema / snapshot / 人讀版;5 個 response templates、8 個 acceptance checks、10 個 rejection rules、total ref review items 141、received response 0、accepted 0、execution authorized=false | owner 依模板回覆 main/dev truth、deprecated drift、release tag、GitHub-only refs;response 通過只更新 read-only classification / reconcile / readiness wording,不代表 refs sync、delete、force push 或 primary approval |
|
||||
| S4 migration execution | 未開始 | GitHub primary 長期方向已確認,但 refs / tags / workflow / secret 名稱尚未全量驗證,rollback ADR 仍待 owner approval | SHA/tag/workflow parity、rollback ADR owner approval 與 runtime gate |
|
||||
|
||||
@@ -92,6 +92,8 @@ S4.13 不新增第 36 個主 contract,不新增 approval item,不啟用 runt
|
||||
|
||||
`next_collection_candidate` 只讓 AwoooP Operator Console 顯示「現在先收 S4.9」。它不是批准、不是執行排程,也不是後續 S4.10 / S4.11 / S4.12 已可接受的訊號。
|
||||
|
||||
AwoooP 顯示 S4.9 時,應同步讀取 `gitea-inventory-owner-attestation-response.snapshot.json` 的 6 個 intake preflight checks;preflight 只分類可收、補證、隔離或拒收,不代表 owner response accepted。
|
||||
|
||||
## 3. Cross-Packet 驗收規則
|
||||
|
||||
1. 四個 source response packets 都必須可解析,且 summary 欄位存在。
|
||||
|
||||
@@ -22,6 +22,7 @@
|
||||
"accepted_response_count": 0,
|
||||
"rejected_response_count": 0,
|
||||
"response_template_count": 5,
|
||||
"intake_preflight_check_count": 6,
|
||||
"acceptance_check_count": 8,
|
||||
"rejection_rule_count": 10,
|
||||
"token_value_collection_allowed": false,
|
||||
@@ -238,6 +239,68 @@
|
||||
"execution_authorized": false
|
||||
}
|
||||
],
|
||||
"intake_preflight_checks": [
|
||||
{
|
||||
"check_id": "preflight-known-attestation-item",
|
||||
"display_order": 1,
|
||||
"title": "回覆必須對應 S4.7 已知 item",
|
||||
"required": true,
|
||||
"pass_condition": "`attestation_item_id` 必須是 S4.7 五個 coverage attestation items 之一。",
|
||||
"failure_lane": "request_owner_correction",
|
||||
"awooop_display": "request_more_evidence",
|
||||
"execution_authorized": false
|
||||
},
|
||||
{
|
||||
"check_id": "preflight-required-owner-fields",
|
||||
"display_order": 2,
|
||||
"title": "必填欄位完整",
|
||||
"required": true,
|
||||
"pass_condition": "每筆 response 必須有 owner role/team、decision、decision_reason、受影響 scope、evidence_refs 與 followup_owner。",
|
||||
"failure_lane": "request_more_evidence",
|
||||
"awooop_display": "request_more_evidence",
|
||||
"execution_authorized": false
|
||||
},
|
||||
{
|
||||
"check_id": "preflight-allowed-decision",
|
||||
"display_order": 3,
|
||||
"title": "decision 在模板允許值內",
|
||||
"required": true,
|
||||
"pass_condition": "`decision` 必須落在對應 response template 的 acceptable_decisions。",
|
||||
"failure_lane": "request_owner_correction",
|
||||
"awooop_display": "request_more_evidence",
|
||||
"execution_authorized": false
|
||||
},
|
||||
{
|
||||
"check_id": "preflight-redacted-evidence-only",
|
||||
"display_order": 4,
|
||||
"title": "只接受脫敏 evidence refs",
|
||||
"required": true,
|
||||
"pass_condition": "`evidence_refs` 只能指向 repo 內文件、snapshot 或 owner 提供的脫敏 metadata,不得含 token、secret、cookie、session、private key 或私有 URL 憑證。",
|
||||
"failure_lane": "quarantine_sensitive_payload",
|
||||
"awooop_display": "quarantine_sensitive_payload",
|
||||
"execution_authorized": false
|
||||
},
|
||||
{
|
||||
"check_id": "preflight-no-execution-request",
|
||||
"display_order": 5,
|
||||
"title": "不得夾帶執行要求",
|
||||
"required": true,
|
||||
"pass_condition": "response 不得要求 Gitea/GitHub repo 寫入、repo 建立、visibility 修改、refs sync/delete/force-push、workflow/secret/runner 變更、scan 或 runtime action。",
|
||||
"failure_lane": "reject_execution_request",
|
||||
"awooop_display": "reject_execution_request",
|
||||
"execution_authorized": false
|
||||
},
|
||||
{
|
||||
"check_id": "preflight-all-five-items-before-accepted",
|
||||
"display_order": 6,
|
||||
"title": "接受前需覆蓋五個 items",
|
||||
"required": true,
|
||||
"pass_condition": "S4.9 要被標示 accepted 前,五個 response templates 都必須收到可驗收 owner response;部分回覆只能維持 waiting 或 request_more_evidence。",
|
||||
"failure_lane": "keep_waiting_owner_response",
|
||||
"awooop_display": "ready_for_owner_review",
|
||||
"execution_authorized": false
|
||||
}
|
||||
],
|
||||
"acceptance_checks": [
|
||||
{
|
||||
"check_id": "maps_to_known_s4_7_item",
|
||||
|
||||
@@ -98,7 +98,7 @@
|
||||
],
|
||||
"decision_options": ["approve_scope", "reject", "defer", "request_more_evidence"],
|
||||
"allowed_after_approval": [
|
||||
"先依 S4.9 收到並驗收 S4.7 owner coverage attestation response,保留 scope decision evidence",
|
||||
"先依 S4.9 收到並完成 preflight / 驗收 S4.7 owner coverage attestation response,保留 scope decision evidence",
|
||||
"使用 read-only token 或 redacted admin export 補齊 repo list",
|
||||
"只保存 token_present=true/false",
|
||||
"更新 migration matrix 與 repo decision table"
|
||||
|
||||
@@ -101,7 +101,7 @@
|
||||
"docs/security/GITEA-AUTHENTICATED-INVENTORY-IMPORT-ACCEPTANCE.md"
|
||||
],
|
||||
"allowed_after_approval": [
|
||||
"先依 S4.9 收到並驗收 S4.7 owner coverage attestation response,更新 migration matrix 與 decision table",
|
||||
"先依 S4.9 收到並完成 preflight / 驗收 S4.7 owner coverage attestation response,更新 migration matrix 與 decision table",
|
||||
"使用 read-only token 或 redacted admin export 執行一次 inventory",
|
||||
"只保存 token_present=true/false",
|
||||
"更新 migration matrix 與 repo decision table"
|
||||
|
||||
@@ -127,12 +127,12 @@
|
||||
"allowed_pre_decision_actions": [
|
||||
"顯示 public-only 與 blocked endpoint evidence",
|
||||
"顯示 S4.7 的 5 個 owner attestation items 與 received_attestation_count=0",
|
||||
"顯示 S4.9 的 5 個 owner response templates、received_response_count=0 與 rejection rules",
|
||||
"顯示 S4.9 的 5 個 owner response templates、6 個 intake preflight checks、received_response_count=0 與 rejection rules",
|
||||
"要求 owner 確認 read-only token 或 redacted export 來源",
|
||||
"不保存 token value"
|
||||
],
|
||||
"allowed_after_decision_actions": [
|
||||
"若 approve_scope,先依 S4.9 收到並驗收 S4.7 owner response,再更新 attestation evidence 與 scope decision",
|
||||
"若 approve_scope,先依 S4.9 收到並完成 preflight / 驗收 S4.7 owner response,再更新 attestation evidence 與 scope decision",
|
||||
"若 approve_scope,只能做一次 read-only inventory 或匯入 redacted export",
|
||||
"更新 migration matrix 與 repo decision table"
|
||||
],
|
||||
|
||||
@@ -112,7 +112,7 @@
|
||||
"gate_state": "waiting_approved_scope",
|
||||
"applies_after_decision": "approve_scope",
|
||||
"minimum_required_evidence": [
|
||||
"S4.9 owner response 已完成驗收,且 S4.7 owner coverage attestation 的 5 個 items 都有 scope decision",
|
||||
"S4.9 owner response 已完成 intake preflight 與驗收,且 S4.7 owner coverage attestation 的 5 個 items 都有 scope decision",
|
||||
"read-only token scope 或 redacted admin export 來源",
|
||||
"token_present=true/false,不保存 token value",
|
||||
"allowed export fields checklist",
|
||||
|
||||
@@ -107,7 +107,7 @@
|
||||
},
|
||||
{
|
||||
"step_id": "CHECK_OWNER_RESPONSE_GUARD",
|
||||
"expected_observation": "AwoooP dry-run 必須確認 S4.9 / S4.10 / S4.11 / S4.12 四包 owner response 仍為 waiting_owner_response,received / accepted 皆為 0,且不能解鎖 repo、refs、workflow、secret、runner、GitHub primary 或 runtime action。",
|
||||
"expected_observation": "AwoooP dry-run 必須確認 S4.9 / S4.10 / S4.11 / S4.12 四包 owner response 仍為 waiting_owner_response,received / accepted 皆為 0,且 S4.9 intake preflight 只分類可收、補證、隔離或拒收,不能解鎖 repo、refs、workflow、secret、runner、GitHub primary 或 runtime action。",
|
||||
"evidence_refs": [
|
||||
"docs/security/source-control-owner-response-validation-rollup.snapshot.json",
|
||||
"docs/security/SOURCE-CONTROL-OWNER-RESPONSE-VALIDATION-ROLLUP.md",
|
||||
|
||||
@@ -251,7 +251,7 @@
|
||||
"docs/security/GITEA-INVENTORY-COVERAGE-ATTESTATION.md",
|
||||
"docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md"
|
||||
],
|
||||
"notes": "目前仍是 public-only / blocked endpoint evidence;S4.5 已補 authenticated/admin export request,S4.6 已補 redacted import acceptance,S4.7 已補 owner coverage attestation request,S4.9 已補 owner response intake packet;private/internal 全量需 approval、脫敏 payload 驗收與 owner scope decision。"
|
||||
"notes": "目前仍是 public-only / blocked endpoint evidence;S4.5 已補 authenticated/admin export request,S4.6 已補 redacted import acceptance,S4.7 已補 owner coverage attestation request,S4.9 已補 owner response intake packet 與 6 個 intake preflight checks;private/internal 全量需 approval、脫敏 payload 驗收與 owner scope decision。"
|
||||
},
|
||||
{
|
||||
"contract": "local_git_remote_inventory_v1",
|
||||
|
||||
@@ -143,7 +143,7 @@
|
||||
{
|
||||
"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 ready;S4.1 已定義 workflow / secret 名稱 inventory 契約;S4.2 已補 local evidence;S4.3 已補 redacted export request;S4.4 已補 rollback ADR 草案;S4.5 已補 Gitea authenticated inventory export request;S4.6 已補 redacted import acceptance;S4.7 已補 owner coverage attestation request;S4.9 已補 Gitea owner response intake packet;S4.10 已補 GitHub target owner decision response intake packet;S4.11 已補 refs truth owner response intake packet;S4.12 已補 workflow / secret 名稱 owner response intake packet;S4.13 已補四包 owner response validation rollup,彙整 22 個 templates、received=0、accepted=0,並標示 next_collection_candidate=S4.9,但 inventory status 仍 partial,GitHub target / refs truth / workflow-secret response 仍 0 筆。",
|
||||
"current_result": "GitHub primary 是長期方向;source_control_primary_readiness_gate_v1 已定義 8 個 candidate repos、7 個 in-scope blocked repos、0 個 primary ready;S4.1 已定義 workflow / secret 名稱 inventory 契約;S4.2 已補 local evidence;S4.3 已補 redacted export request;S4.4 已補 rollback ADR 草案;S4.5 已補 Gitea authenticated inventory export request;S4.6 已補 redacted import acceptance;S4.7 已補 owner coverage attestation request;S4.9 已補 Gitea owner response intake packet 與 6 個 intake preflight checks;S4.10 已補 GitHub target owner decision response intake packet;S4.11 已補 refs truth owner response intake packet;S4.12 已補 workflow / secret 名稱 owner response intake packet;S4.13 已補四包 owner response validation rollup,彙整 22 個 templates、received=0、accepted=0,並標示 next_collection_candidate=S4.9,但 inventory status 仍 partial,GitHub target / refs truth / workflow-secret response 仍 0 筆。",
|
||||
"next_gate": "依 S4.13 先集中檢查四包 owner response validation 狀態,AwoooP 只顯示 next_collection_candidate=S4.9 Gitea owner attestation;再依 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 人工批准。"
|
||||
}
|
||||
],
|
||||
@@ -254,7 +254,7 @@
|
||||
"allowed_processing": [
|
||||
"顯示 S4.5 authenticated/admin export request、S4.6 redacted import acceptance、S4.7 owner coverage attestation request 與 coverage gap",
|
||||
"顯示 5 個 owner attestation items、received_attestation_count=0 與 accepted_attestation_count=0",
|
||||
"顯示 S4.9 owner response templates、received_response_count=0 與 rejection rules",
|
||||
"顯示 S4.9 owner response templates、intake preflight checks、received_response_count=0 與 rejection rules",
|
||||
"在 security_approval_queue_v1、security_approval_gate_v1、security_approval_review_packet_v1 與 security_followup_runtime_gate_v1 中顯示 S4.7 owner attestation 先行條件",
|
||||
"使用 read-only token 或 redacted admin export 補齊 repo list",
|
||||
"收到 payload 後只做 schema / redaction / coverage gap 驗收與隔離",
|
||||
|
||||
@@ -408,7 +408,7 @@
|
||||
"display_owner_attestation_response_packet"
|
||||
],
|
||||
"forbidden_actions": ["store_token_value", "write_to_gitea", "delete_or_archive_repo"],
|
||||
"notes": "目前是 partial/public_only;S4.5 已補 authenticated/admin export request,S4.6 已補 redacted import acceptance,S4.7 已補 owner coverage attestation request,S4.9 已補 owner response intake packet;private/internal 全量仍需批准後補齊。"
|
||||
"notes": "目前是 partial/public_only;S4.5 已補 authenticated/admin export request,S4.6 已補 redacted import acceptance,S4.7 已補 owner coverage attestation request,S4.9 已補 owner response intake packet 與 6 個 intake preflight checks;private/internal 全量仍需批准後補齊。"
|
||||
},
|
||||
{
|
||||
"contract": "local_git_remote_inventory_v1",
|
||||
|
||||
@@ -51,7 +51,7 @@
|
||||
"S4.5 已建立 authenticated/admin export request,但尚未取得 `gitea_repo_inventory_v1.status=ok` evidence",
|
||||
"S4.6 已建立 redacted import acceptance,但目前 received_payload_count=0、accepted_payload_count=0",
|
||||
"S4.7 已建立 owner coverage attestation request,但目前 received_attestation_count=0、accepted_attestation_count=0",
|
||||
"S4.9 已建立 owner response 收件包,但目前 received_response_count=0、accepted_response_count=0",
|
||||
"S4.9 已建立 owner response 收件包與 6 個 intake preflight checks,但目前 received_response_count=0、accepted_response_count=0",
|
||||
"S4.13 validation rollup 已將 S4.9 納入四包 owner response 驗收總覽,但目前 total_received_response_count=0、total_accepted_response_count=0",
|
||||
"public-only API 只看到 2 個 repos,本機 remote inventory 看到 4 個 unique Gitea repos,gap 仍待 owner 解釋",
|
||||
"GITEA_READONLY_TOKEN 未提供",
|
||||
@@ -62,7 +62,7 @@
|
||||
"mirror S4.5 authenticated inventory export request",
|
||||
"mirror S4.6 redacted inventory import acceptance",
|
||||
"mirror S4.7 owner coverage attestation request",
|
||||
"mirror S4.9 owner attestation response templates",
|
||||
"mirror S4.9 owner attestation response templates 與 intake preflight checks",
|
||||
"mirror S4.13 owner response validation rollup",
|
||||
"等待 read-only token 或 redacted admin export",
|
||||
"更新 approval board 與 decision table"
|
||||
|
||||
@@ -26,6 +26,14 @@ LANES = [
|
||||
"github_primary_switch_authorized",
|
||||
"action_buttons_allowed",
|
||||
],
|
||||
"expected_preflight_checks": [
|
||||
"preflight-known-attestation-item",
|
||||
"preflight-required-owner-fields",
|
||||
"preflight-allowed-decision",
|
||||
"preflight-redacted-evidence-only",
|
||||
"preflight-no-execution-request",
|
||||
"preflight-all-five-items-before-accepted",
|
||||
],
|
||||
},
|
||||
{
|
||||
"lane_id": "s4_10_github_target_owner_decision_response",
|
||||
@@ -155,6 +163,30 @@ def validate(root: Path) -> None:
|
||||
assert_equal(f"{lane['lane_id']}.rejected_response_count", summary["rejected_response_count"], 0)
|
||||
assert_equal(f"{lane['lane_id']}.acceptance_check_count", summary["acceptance_check_count"], 8)
|
||||
assert_equal(f"{lane['lane_id']}.rejection_rule_count", summary["rejection_rule_count"], 10)
|
||||
expected_preflight_checks = lane.get("expected_preflight_checks")
|
||||
if expected_preflight_checks is not None:
|
||||
intake_preflight_checks = snapshot["intake_preflight_checks"]
|
||||
assert_equal(
|
||||
f"{lane['lane_id']}.intake_preflight_check_count",
|
||||
summary["intake_preflight_check_count"],
|
||||
len(expected_preflight_checks),
|
||||
)
|
||||
assert_equal(
|
||||
f"{lane['lane_id']}.intake_preflight_check_ids",
|
||||
[item["check_id"] for item in intake_preflight_checks],
|
||||
expected_preflight_checks,
|
||||
)
|
||||
assert_equal(
|
||||
f"{lane['lane_id']}.intake_preflight_display_order",
|
||||
[item["display_order"] for item in intake_preflight_checks],
|
||||
list(range(1, len(expected_preflight_checks) + 1)),
|
||||
)
|
||||
for item in intake_preflight_checks:
|
||||
assert_true(f"{lane['lane_id']}.{item['check_id']}.required", item["required"])
|
||||
assert_false(
|
||||
f"{lane['lane_id']}.{item['check_id']}.execution_authorized",
|
||||
item["execution_authorized"],
|
||||
)
|
||||
assert_false(f"{lane['lane_id']}.runtime_execution_authorized", snapshot["runtime_execution_authorized"])
|
||||
assert_false(f"{lane['lane_id']}.rollup_execution_authorized", rollup_lane["execution_authorized"])
|
||||
assert_equal(
|
||||
|
||||
Reference in New Issue
Block a user