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

199 lines
8.0 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"schema_version": "security_rollout_policy_v1",
"status": "draft",
"default_mode": "observe",
"enforcement_level": "mirror_only",
"non_blocking_escalation_lane_count": 7,
"non_blocking_escalation_lanes": [
{
"lane_id": "lane-low-medium-observation",
"display_order": 1,
"trigger": "LOW / MEDIUM finding 且不涉及不可逆變更、secret value、repo / refs / deploy / primary control plane。",
"initial_mode": "warn",
"allowed_action": "標記風險、建立 follow-up、補 evidence_ref 或準備草案。",
"forbidden_escalation": "不得阻擋 deploy、不得自動 patch、不得自動 merge、不得建立 runtime blocker。",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-owner-response-missing",
"display_order": 2,
"trigger": "S4.9 / S4.10 / S4.11 / S4.12 owner response 尚未收到或尚未 accepted。",
"initial_mode": "observe",
"allowed_action": "顯示 missing lane、next collection candidate、template status 與 request packet。",
"forbidden_escalation": "不得把未回覆當成拒絕、不得停止產品流程、不得自動補 owner response。",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-mirror-data-incomplete",
"display_order": 3,
"trigger": "mirror snapshot、redacted payload 或 contract coverage 不完整,但未涉及 raw secret / token / exploit payload。",
"initial_mode": "warn",
"allowed_action": "顯示 partial / quarantine reason、要求補 redacted snapshot、保留 retry gate。",
"forbidden_escalation": "不得阻擋無關 runtime、不得把 partial mirror 當 production incident、不得吞入未脫敏 payload。",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-source-control-drift-draft",
"display_order": 4,
"trigger": "GitHub / Gitea refstargetvisibility canonical decision owner approved",
"initial_mode": "warn",
"allowed_action": " draft reconcile planADRread-only diff owner review lane",
"forbidden_escalation": " sync refsdelete refsforce push repo visibility GitHub primary",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-kali-observe-finding",
"display_order": 5,
"trigger": "Kali finding scan scope observe / approval package ",
"initial_mode": "warn",
"allowed_action": " redacted finding summaryevidence_refscan scope approval candidate block reason",
"forbidden_escalation": " active scan /execute finding deploy blocker",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-workflow-secret-name-gap",
"display_order": 6,
"trigger": "workflowwebhookrunnerdeploy keybranch protectionCODEOWNERS secret parity redacted evidence",
"initial_mode": "warn",
"allowed_action": " redacted export owner response template readiness blocker wording",
"forbidden_escalation": " secret value GitHub hosted runner workflow / webhook / repository secret",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
},
{
"lane_id": "lane-progress-display-holding",
"display_order": 7,
"trigger": "headline progress 58% framework detail ledger ",
"initial_mode": "observe",
"allowed_action": " micro progresslatest deltanot_authorization gate",
"forbidden_escalation": " progress holding micro progress runtime approval",
"owner_review_required_before_blocking": true,
"runtime_blocking_allowed": false,
"awooop_display_mode": "display_low_friction_non_blocking_lane_only",
"not_authorization": true
}
],
"allowed_awooop_outputs": [
"display_non_blocking_escalation_lanes",
"create_followup_without_blocking",
"show_owner_review_required_before_blocking",
"keep_runtime_blocking_false"
],
"policy_items": [
{
"condition": "read_only_inventory_or_evidence_mirror",
"mode": "observe",
"allowed": [
"collect_metadata",
"write_redacted_snapshot",
"update_docs",
"mirror_to_awooop_runtime_state"
],
"forbidden": [
"change_runtime",
"write_to_remote_system",
"delete_or_archive_repo",
"sync_refs"
],
"reason": ""
},
{
"condition": "low_or_medium_observation_without_irreversible_change",
"mode": "warn",
"allowed": [
"label_risk",
"create_followup_item",
"add_evidence_ref",
"prepare_draft_plan"
],
"forbidden": [
"block_deploy",
"force_owner_decision",
"auto_patch",
"auto_merge"
],
"reason": "LOW / MEDIUM observation evidence"
},
{
"condition": "uses_readonly_token_or_admin_export",
"mode": "approve_required",
"allowed": [
"request_human_approval",
"run_once_after_approval",
"store_token_present_boolean_only",
"write_redacted_inventory"
],
"forbidden": [
"store_token_value",
"reuse_write_token",
"write_to_gitea",
"create_repo"
],
"reason": " token approval"
},
{
"condition": "repo_creation_visibility_change_or_refs_sync",
"mode": "approve_required",
"allowed": [
"create_approval_candidate",
"prepare_migration_plan",
"prepare_rollback_plan"
],
"forbidden": [
"execute_without_owner_approval",
"push_refs",
"change_visibility",
"switch_primary"
],
"reason": " repo "
},
{
"condition": "secret_rbac_network_firewall_deploy_or_primary_switch",
"mode": "approve_required",
"allowed": [
"create_approval_required_event",
"prepare_dry_run_plan",
"define_rollback"
],
"forbidden": [
"auto_execute",
"store_secret_value",
"skip_human_review"
],
"reason": " blast radius"
},
{
"condition": "destructive_action_without_rollback_or_secret_value_storage",
"mode": "block_candidate",
"allowed": [
"record_block_reason",
"request_manual_exception"
],
"forbidden": [
"force_push",
"delete_repo",
"store_raw_secret",
"disable_audit"
],
"reason": " rollback "
}
]
}