From 5979e3d22d0a99bd268368fb7af4b87b01e04d57 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 20 May 2026 13:06:20 +0800 Subject: [PATCH] feat(web): show IwoooS owner response focus --- apps/web/messages/en.json | 33 +++++ apps/web/messages/zh-TW.json | 33 +++++ apps/web/src/app/[locale]/iwooos/page.tsx | 79 +++++++++- docs/LOGBOOK.md | 14 ++ .../iwooos_posture_projection_v1.schema.json | 138 +++++++++++++++++- docs/security/IWOOOS-POSTURE-PROJECTION.md | 19 ++- .../security/SECURITY-MIRROR-STATUS-ROLLUP.md | 3 +- .../SECURITY-SUPPLY-CHAIN-PROGRESS.md | 6 +- .../iwooos-posture-projection.snapshot.json | 126 +++++++++++++++- ...ecurity-mirror-status-rollup.snapshot.json | 15 +- .../security-mirror-progress-guard.py | 117 +++++++++++++++ 11 files changed, 569 insertions(+), 14 deletions(-) diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 7fad94e13..8cd7f8b33 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -2753,6 +2753,39 @@ "guard": "Faster cadence does not loosen safety; runtime and source-control cutover still need human gates." } } + }, + "ownerResponseNextActionFocus": { + "title": "Owner Response Next-Action Focus", + "subtitle": "S2.47 makes the owner-response work that can actually move the 58% headline explicit: collect S4.9 Gitea owner attestation first, then GitHub targets, refs truth, and workflow / secret names. This is display-only: no chasing, autofill, or received marking.", + "focusLabel": "Next focus", + "nextLabel": "Evidence to inspect", + "guardLabel": "Still forbidden", + "items": { + "giteaOwnerAttestation": { + "title": "Collect S4.9 Gitea owner attestation first", + "body": "Confirm Gitea coverage, public-only / local gaps, org/user endpoint, 110 adjacent source, canonical owner, and legacy disposition.", + "next": "Owner must answer the 5 redacted evidence refs in GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.", + "guard": "received=0; accepted=0; no token value storage, Gitea writes, refs sync, or primary switch." + }, + "githubTargetOwnerDecision": { + "title": "Handle S4.10 GitHub target decisions next", + "body": "Confirm each GitHub target owner, visibility, canonical disposition, and not_found_or_private handling.", + "next": "After S4.9 is accepted, collect the 7 target responses from GITHUB-TARGET-OWNER-DECISION-RESPONSE.", + "guard": "No GitHub repo creation, visibility change, refs sync, or target response as primary approval." + }, + "refsTruthOwnerResponse": { + "title": "Resolve S4.11 refs truth after that", + "body": "Clarify main/dev truth, deprecated drift, release tags, and GitHub-only refs so migration does not treat stale refs as truth.", + "next": "Repo owners must decide the 141 ref review items per repo / per ref.", + "guard": "No fetch, push, refs deletion, force push, or history rewrite." + }, + "workflowSecretOwnerResponse": { + "title": "Complete S4.12 workflow / secret names last", + "body": "Fill webhook, runner, deploy key, branch protection / CODEOWNERS, and repository secret name parity gaps.", + "next": "Collect names, owners, and redacted parity evidence only so GitHub readiness has verifiable gaps.", + "guard": "No secret value collection, workflow mutation, runner enablement, or write token use." + } + } } }, "tickets": { diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index a07023d71..3077eb554 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -2754,6 +2754,39 @@ "guard": "節奏加快不等於放寬安全;runtime 與 source-control cutover 仍需人工 gate。" } } + }, + "ownerResponseNextActionFocus": { + "title": "Owner Response 下一步收件焦點", + "subtitle": "S2.47 將下一個真正能推動 58% 的 owner response 工作排清楚:先收 S4.9 Gitea owner attestation,再依序處理 GitHub target、refs truth、workflow / secret name。這裡只顯示收件焦點,不催收、不代填、不標記 received。", + "focusLabel": "下一步焦點", + "nextLabel": "要看的 evidence", + "guardLabel": "仍禁止", + "items": { + "giteaOwnerAttestation": { + "title": "S4.9 Gitea owner attestation 先收", + "body": "先確認 Gitea 覆蓋範圍、public-only / local gap、org/user endpoint、110 adjacent source、canonical owner 與 legacy disposition。", + "next": "需要 owner 依 GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE 回覆 5 個脫敏 evidence refs。", + "guard": "received=0;accepted=0;不保存 token value、不寫 Gitea、不 sync refs、不切 primary。" + }, + "githubTargetOwnerDecision": { + "title": "S4.10 GitHub target 決策接續", + "body": "確認每個 GitHub target 的 owner、visibility、canonical disposition 與 not_found_or_private 處理方式。", + "next": "S4.9 通過後,才依 GITHUB-TARGET-OWNER-DECISION-RESPONSE 收 7 個 target responses。", + "guard": "不建立 GitHub repo、不改 visibility、不同步 refs、不把 target response 當 primary approval。" + }, + "refsTruthOwnerResponse": { + "title": "S4.11 Refs truth 再判定", + "body": "釐清 main/dev truth、deprecated drift、release tag 與 GitHub-only refs,避免 migration 時把舊 refs 誤當真相。", + "next": "需要 repo owner 對 141 個 ref review items 做單 repo / 單 ref 判定。", + "guard": "不 fetch、不 push、不 delete refs、不 force push、不 rewrite history。" + }, + "workflowSecretOwnerResponse": { + "title": "S4.12 Workflow / secret 名稱最後補齊", + "body": "補 webhook、runner、deploy key、branch protection / CODEOWNERS、repository secret name parity。", + "next": "只收名稱、owner 與脫敏 parity evidence,讓 GitHub readiness 有可驗證缺口表。", + "guard": "不收 secret value、不改 workflow、不啟用 runner、不使用 write token。" + } + } } }, "tickets": { diff --git a/apps/web/src/app/[locale]/iwooos/page.tsx b/apps/web/src/app/[locale]/iwooos/page.tsx index 579d301ac..ccb7bf857 100644 --- a/apps/web/src/app/[locale]/iwooos/page.tsx +++ b/apps/web/src/app/[locale]/iwooos/page.tsx @@ -38,6 +38,13 @@ type ProgressAccelerationLane = { tone: 'steady' | 'warn' | 'locked' } +type OwnerResponseNextActionFocusItem = { + key: string + focus: string + icon: typeof ShieldCheck + tone: 'steady' | 'warn' | 'locked' +} + type Pillar = { key: string icon: typeof ShieldCheck @@ -323,6 +330,13 @@ const progressAccelerationLanes: ProgressAccelerationLane[] = [ { key: 'cadenceCompression', lane: 'PAL6', icon: CheckCircle2, tone: 'steady' }, ] +const ownerResponseNextActionFocusItems: OwnerResponseNextActionFocusItem[] = [ + { key: 'giteaOwnerAttestation', focus: 'S4.9', icon: ClipboardCheck, tone: 'warn' }, + { key: 'githubTargetOwnerDecision', focus: 'S4.10', icon: GitBranch, tone: 'warn' }, + { key: 'refsTruthOwnerResponse', focus: 'S4.11', icon: SearchCheck, tone: 'warn' }, + { key: 'workflowSecretOwnerResponse', focus: 'S4.12', icon: Lock, tone: 'locked' }, +] + const posturePillars: Pillar[] = [ { key: 'exposure', icon: Radar, tone: 'warn' }, { key: 'sourceControl', icon: GitBranch, tone: 'warn' }, @@ -832,6 +846,38 @@ function ProgressAccelerationLaneCard({ item }: { item: ProgressAccelerationLane ) } +function OwnerResponseNextActionFocusCard({ item }: { item: OwnerResponseNextActionFocusItem }) { + const t = useTranslations('iwooos.ownerResponseNextActionFocus') + const Icon = item.icon + return ( +
+
+
+ + {t('focusLabel')} +
+ {item.focus} +
+

+ {t(`items.${item.key}.title` as never)} +

+

+ {t(`items.${item.key}.body` as never)} +

+
+
{t('nextLabel')}
+
+ {t(`items.${item.key}.next` as never)} +
+
{t('guardLabel')}
+
+ {t(`items.${item.key}.guard` as never)} +
+
+
+ ) +} + function PillarCard({ item }: { item: Pillar }) { const t = useTranslations('iwooos.pillars') const Icon = item.icon @@ -895,6 +941,7 @@ function SurfaceCard({ item, locale }: { item: SecuritySurface; locale: string } style={{ ...band, minHeight: 170, + minWidth: 0, padding: 16, color: 'inherit', textDecoration: 'none', @@ -905,9 +952,9 @@ function SurfaceCard({ item, locale }: { item: SecuritySurface; locale: string } >
- {item.href} + {item.href}
-
+

{t(`items.${item.key}.title` as never)}

@@ -915,9 +962,9 @@ function SurfaceCard({ item, locale }: { item: SecuritySurface; locale: string } {t(`items.${item.key}.body` as never)}

-
+
{t('sourceLabel')}
-
+
{t(`items.${item.key}.source` as never)}
@@ -942,7 +989,9 @@ function CoverageCard({ item }: { item: CoverageGroup }) {

{t(`groups.${item.key}.body` as never)}

-
{item.surfaces}
+
+ {item.surfaces} +
) } @@ -2036,6 +2085,26 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) {
+
+
+

{t('ownerResponseNextActionFocus.title')}

+

+ {t('ownerResponseNextActionFocus.subtitle')} +

+
+
+ {ownerResponseNextActionFocusItems.map(item => ( + + ))} +
+
+

{t('journey.title')}

diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index 34996745c..de842d3d2 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,17 @@ +## 2026-05-20 | 資安供應鏈 S2.47:IwoooS Owner Response Next-Action Focus + +**背景**:S2.46 已把真正能推動 58% 的解鎖點集中顯示;本輪把第一個 P0 owner response 收件焦點固定到 IwoooS,讓下一步從 S4.9 Gitea owner attestation 開始收斂,而不是繼續新增細碎 checklist。 + +**完成**: +- `/iwooos` 新增「Owner Response 下一步收件焦點」,顯示 S4.9 Gitea owner attestation 先收,S4.10 GitHub target、S4.11 refs truth、S4.12 workflow / secret name 依序排隊。 +- `iwooos_posture_projection_v1` schema / snapshot 新增 `owner_response_next_action_focus_items` 與 `owner_response_next_action_focus_item_count=4`,每個 focus 固定 received / accepted / rejected / audit emitted = 0,auto chase / autofill / mark received / mark accepted / approval record / runtime gate / repo or refs mutation / secret value collection / runtime execution / action button = false。 +- `security_mirror_status_rollup_v1` micro progress ledger 新增 `s2_47_iwooos_owner_response_next_action_focus`,headline progress 仍維持 58%。 +- `security-mirror-progress-guard.py` 開始驗證 4 個 next-action focus items、順序、source rollup lane、blocked flags 與 zero / false 邊界。 + +**仍禁止**: +- owner response next-action focus 不代表 request sent、owner response received / accepted / rejected、audit event emitted、approval record、runtime gate、repo / refs mutation、secret value collection、GitHub primary readiness、Kali `/execute`、SSH、主機變更、Kali 更新或 blocking control。 +- S4.9 仍只是下一個建議收件焦點;真正收件與接受仍需 owner 提供脫敏 evidence,並通過 S4.9 source packet preflight 與 S4.13 rollup 檢查。 + ## 2026-05-20 | 資安供應鏈 S2.46:IwoooS Progress Acceleration Lanes **背景**:S2.38-S2.45 連續補了 host owner decision record human handoff / human record owner review 的 packets、checklists、outcomes 與 preparation guard,實際上有推進框架安全性,但 headline 58% 不會因 framework detail 自動上升,使用者會感覺進度很慢。本輪把慢的原因直接呈現在 IwoooS 首屏,並將後續同類框架細節改採 milestone batch 節奏。 diff --git a/docs/schemas/iwooos_posture_projection_v1.schema.json b/docs/schemas/iwooos_posture_projection_v1.schema.json index bde84ec5e..67c3c1073 100644 --- a/docs/schemas/iwooos_posture_projection_v1.schema.json +++ b/docs/schemas/iwooos_posture_projection_v1.schema.json @@ -15,6 +15,7 @@ "summary", "progress", "progress_acceleration_lanes", + "owner_response_next_action_focus_items", "posture_pillars", "non_blocking_lane_ids", "existing_frontend_surfaces", @@ -145,7 +146,8 @@ "host_owner_decision_record_human_record_owner_review_preparation_packet_count", "host_owner_decision_record_human_record_owner_review_preparation_checklist_item_count", "progress_acceleration_lane_count", - "action_buttons_allowed" + "action_buttons_allowed", + "owner_response_next_action_focus_item_count" ], "properties": { "route_path": { @@ -346,6 +348,10 @@ "progress_acceleration_lane_count": { "type": "integer", "const": 6 + }, + "owner_response_next_action_focus_item_count": { + "type": "integer", + "const": 4 } }, "additionalProperties": false @@ -3900,6 +3906,136 @@ }, "additionalProperties": false } + }, + "owner_response_next_action_focus_items": { + "type": "array", + "minItems": 4, + "maxItems": 4, + "items": { + "type": "object", + "required": [ + "focus_id", + "display_order", + "source_rollup_lane_id", + "required_packet", + "focus_state", + "minimum_response_count", + "blocked_until_previous_focus_accepted", + "next_action", + "redaction_boundary", + "display_mode", + "owner_response_received_count", + "owner_response_accepted_count", + "owner_response_rejected_count", + "audit_events_emitted_count", + "auto_chase_allowed", + "autofill_allowed", + "mark_received_allowed", + "mark_accepted_allowed", + "approval_record_created", + "runtime_gate_opened", + "repo_or_refs_mutation_allowed", + "secret_value_collection_allowed", + "runtime_execution_authorized", + "action_buttons_allowed", + "not_authorization" + ], + "properties": { + "focus_id": { + "type": "string" + }, + "display_order": { + "type": "integer", + "minimum": 1 + }, + "source_rollup_lane_id": { + "type": "string" + }, + "required_packet": { + "type": "string" + }, + "focus_state": { + "type": "string" + }, + "minimum_response_count": { + "type": "integer", + "minimum": 1 + }, + "blocked_until_previous_focus_accepted": { + "type": "boolean" + }, + "next_action": { + "type": "string" + }, + "redaction_boundary": { + "type": "string" + }, + "display_mode": { + "const": "owner_response_next_action_focus_only" + }, + "owner_response_received_count": { + "type": "integer", + "const": 0 + }, + "owner_response_accepted_count": { + "type": "integer", + "const": 0 + }, + "owner_response_rejected_count": { + "type": "integer", + "const": 0 + }, + "audit_events_emitted_count": { + "type": "integer", + "const": 0 + }, + "auto_chase_allowed": { + "type": "boolean", + "const": false + }, + "autofill_allowed": { + "type": "boolean", + "const": false + }, + "mark_received_allowed": { + "type": "boolean", + "const": false + }, + "mark_accepted_allowed": { + "type": "boolean", + "const": false + }, + "approval_record_created": { + "type": "boolean", + "const": false + }, + "runtime_gate_opened": { + "type": "boolean", + "const": false + }, + "repo_or_refs_mutation_allowed": { + "type": "boolean", + "const": false + }, + "secret_value_collection_allowed": { + "type": "boolean", + "const": false + }, + "runtime_execution_authorized": { + "type": "boolean", + "const": false + }, + "action_buttons_allowed": { + "type": "boolean", + "const": false + }, + "not_authorization": { + "type": "boolean", + "const": true + } + }, + "additionalProperties": false + } } }, "additionalProperties": false diff --git a/docs/security/IWOOOS-POSTURE-PROJECTION.md b/docs/security/IWOOOS-POSTURE-PROJECTION.md index 0cc47b7de..e5a352b1c 100644 --- a/docs/security/IWOOOS-POSTURE-PROJECTION.md +++ b/docs/security/IWOOOS-POSTURE-PROJECTION.md @@ -74,6 +74,7 @@ IwoooS 首版只讀取或對齊以下已提交 evidence: 42. 9 個 host owner decision record human record owner review preparation packets,顯示未來人工 record owner review 畫面準備需要看的 metadata,但不標記 preparation completed、不開始 review、不標記 ready、不收 owner decision、不建立 decision record、不開 runtime gate。 43. 9 個 host owner decision record human record owner review preparation checklist items,顯示 preparation packets 進人工 record owner review 前仍需只讀核對的條件,但不標記 preparation completed、不標記 checklist passed、不開始 review、不標記 ready、不收 owner decision、不建立 decision record、不開 runtime gate。 44. 6 條 progress acceleration lanes,直接顯示 58% 為何維持、哪些高層 gate 能解鎖下一輪進度判讀,以及後續節奏要改成 milestone batch,但不把 acceleration lane 當授權、加分、owner response、runtime gate、GitHub primary 或 production execution。 +45. 4 個 owner response next-action focus items,直接顯示 S4.9 目前是下一個收件焦點,S4.10 / S4.11 / S4.12 依序排隊,但不催收、不代填、不標記 received / accepted、不建立 approval record、不開 runtime gate。 ## 3.1 既有前端資安頁面整合 @@ -744,6 +745,21 @@ S2.46 將「為什麼進度看起來慢」改成 IwoooS 首屏可見的六條解 這個 acceleration board 不代表進度已加分、owner response 已收到、payload ingestion 已啟用、runtime gate 已開啟、GitHub primary 已 ready、AwoooP production execution 已啟用或任何資安批准已完成。它只把下一個真正能推動 headline 的槓桿顯示清楚,並把後續框架工作改成更有感的 milestone batch 節奏。 +## 3.38 Owner Response Next-Action Focus + +S2.47 將 owner response 的下一步收件焦點從 S4.13 rollup 拉到 IwoooS 可見面板。這一層只回答「現在下一個應該看哪份 owner response request packet」,不催收、不代填、不標記 received、不標記 accepted、不建立 approval record、不開 runtime gate、不切 GitHub primary。 + +| 順序 | Focus | Required packet | 目前狀態 | +|------|-------|-----------------|----------| +| 1 | S4.9 Gitea owner attestation | `docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md` | next collection candidate | +| 2 | S4.10 GitHub target owner decision | `docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md` | queued after S4.9 accepted | +| 3 | S4.11 refs truth owner response | `docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md` | queued after target decision accepted | +| 4 | S4.12 workflow / secret name owner response | `docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md` | queued after refs truth accepted | + +每個 owner response next-action focus item 都固定 `display_mode=owner_response_next_action_focus_only`、`owner_response_received_count=0`、`owner_response_accepted_count=0`、`owner_response_rejected_count=0`、`audit_events_emitted_count=0`、`auto_chase_allowed=false`、`autofill_allowed=false`、`mark_received_allowed=false`、`mark_accepted_allowed=false`、`approval_record_created=false`、`runtime_gate_opened=false`、`repo_or_refs_mutation_allowed=false`、`secret_value_collection_allowed=false`、`runtime_execution_authorized=false`、`action_buttons_allowed=false`、`not_authorization=true`。 + +這個 focus board 不代表 S4.9 request 已送出、owner response 已收到、owner response 已接受或下一步可自動推到 GitHub migration。它只把 P0 收件順序顯示清楚,讓後續工作從 S4.9 開始收斂,而不是再繼續新增細碎 checklist。 + ## 4. 仍禁止 IwoooS 不得提供下列輸出: @@ -787,7 +803,8 @@ IwoooS 不得提供下列輸出: 37. 把 owner decision record human record owner review preparation packet 當成 approval、標記 preparation completed、開始 human record owner review、標記 review ready、收 owner decision、由 preparation packet 建立 decision record,或從 preparation packet 開 runtime gate。 38. 把 owner decision record human record owner review preparation checklist 當成 approval、標記 preparation checklist passed 或 preparation completed、開始 human record owner review、標記 review ready、收 owner decision、由 preparation checklist 建立 decision record,或從 preparation checklist 開 runtime gate。 39. 把 progress acceleration lane 當成授權、進度自動加分、owner response received、runtime gate、GitHub primary readiness 或 production execution。 -40. 把 58% progress、contract count、mirror readiness 或前端可見狀態當成授權。 +40. 把 owner response next-action focus 當成催收、代填、received、accepted、approval record、runtime gate、repo / refs mutation、secret value collection 或 GitHub primary switch。 +41. 把 58% progress、contract count、mirror readiness 或前端可見狀態當成授權。 ## 5. 驗證 diff --git a/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md b/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md index 0b0ee7f4c..53851aba9 100644 --- a/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md +++ b/docs/security/SECURITY-MIRROR-STATUS-ROLLUP.md @@ -35,7 +35,7 @@ | Owner response validation | S4.13 已建立;四包 owner response 目前 received/accepted 皆為 0;4 條 missing response lanes、4 步 collection order、next collection candidate、6 條 evidence routing rules、8 個 display sections、7 條 state transition rules、9 個 reviewer checklist items、7 條 reviewer outcome lanes、4 個 reviewer audit event templates、5 個 reviewer audit display sections、6 個 reviewer audit collection checks、5 個 reviewer audit redaction examples、5 條 reviewer audit retention rules、6 個 reviewer audit retention checks、6 個 reviewer audit handoff packets、6 個 reviewer audit handoff checks、6 個 parallel session sync checks、6 條 parallel session conflict lanes、6 個 parallel session recovery checks 與 7 條 parallel session recovery outcome lanes 可供 AwoooP 直接顯示;下一個建議收件為 S4.9 Gitea owner attestation;latest local validation 為 `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`,reviewer audit emitted 仍為 0,不代表 owner response 已收到或任何執行授權 | | Low-friction rollout policy | S1.3 已補 7 條 non-blocking escalation lanes;LOW / MEDIUM、缺 owner response、partial mirror、source-control drift、Kali observe finding、workflow / secret name gap 與 headline holding 初期只能 observe / warn;`owner_review_required_before_blocking=true`、`runtime_blocking_allowed=false` | | IwoooS frontend posture | S2.8 已新增 `/iwooos` read-only Information Security 入口;顯示 Security Posture / Exposure、source-control supply chain、Kali 112 Mesh、approval boundary、non-blocking lanes 與 evidence refs;不新增執行按鈕 | -| IwoooS posture projection | S2.9 已新增 `iwooos_posture_projection_v1`;S2.10 已把 10 個既有前端資安相關頁面納入 projection;S2.11 已補 4 個 coverage groups 與 5 個 conflict controls;S2.12 已補 6 個只讀 operator journey steps;S2.13 已補 7 個 owner evidence readiness items;S2.14 已補 3 個 host coverage items:Kali 112、開發主機 168、開發主機 111;S2.15 已補 6 個 host action gate items;S2.16 已補 7 個 host evidence readiness items;S2.17 已補 7 個 host evidence collection order steps;S2.18 已補 7 個 host evidence intake preflight checks;S2.19 已補 7 個 host evidence review outcome lanes;S2.20 已補 7 個 host evidence review handoff packets;S2.21 已補 7 個 host evidence reviewer checklist items;S2.22 已補 7 個 host evidence reviewer outcome lanes;S2.23 已補 7 個 host owner decision candidate packets;S2.24 已補 7 個 host owner decision review checklist items;S2.25 已補 7 個 host owner decision review outcome lanes;S2.26 已補 7 個 host owner decision record draft packets;S2.27 已補 7 個 host owner decision record draft review checklist items;S2.28 已補 7 個 host owner decision record draft review outcome lanes;S2.29 已補 7 個 host owner decision record write-up packets;S2.30 已補 7 個 host owner decision record write-up review checklist items;S2.31 已補 7 個 host owner decision record write-up review outcome lanes;S2.32 已補 7 個 host owner decision record formal candidate packets;S2.33 已補 7 個 host owner decision record formal candidate review checklist items;S2.34 已補 8 個 host owner decision record formal candidate review outcome lanes;S2.35 已補 8 個 host owner decision record formal record queue packets;S2.36 已補 8 個 host owner decision record formal record queue review checklist items;S2.37 已補 8 個 host owner decision record formal record queue review outcome lanes;S2.38 已補 8 個 host owner decision record human handoff readiness packets;S2.39 已補 8 個 host owner decision record human handoff readiness review checklist items;S2.40 已補 9 個 host owner decision record human handoff readiness review outcome lanes;S2.41 已補 9 個 host owner decision record human record owner review candidate packets;S2.42 已補 9 個 host owner decision record human record owner review candidate checklist items;S2.43 已補 9 個 host owner decision record human record owner review candidate outcome lanes;S2.44 已補 9 個 host owner decision record human record owner review preparation packets;S2.45 已補 9 個 host owner decision record human record owner review preparation checklist items;S2.46 已補 6 條 progress acceleration lanes,顯示 58% holding 原因與下一個高層解鎖 gate;仍不新增 action button | +| IwoooS posture projection | S2.9 已新增 `iwooos_posture_projection_v1`;S2.10 已把 10 個既有前端資安相關頁面納入 projection;S2.11 已補 4 個 coverage groups 與 5 個 conflict controls;S2.12 已補 6 個只讀 operator journey steps;S2.13 已補 7 個 owner evidence readiness items;S2.14 已補 3 個 host coverage items:Kali 112、開發主機 168、開發主機 111;S2.15 已補 6 個 host action gate items;S2.16 已補 7 個 host evidence readiness items;S2.17 已補 7 個 host evidence collection order steps;S2.18 已補 7 個 host evidence intake preflight checks;S2.19 已補 7 個 host evidence review outcome lanes;S2.20 已補 7 個 host evidence review handoff packets;S2.21 已補 7 個 host evidence reviewer checklist items;S2.22 已補 7 個 host evidence reviewer outcome lanes;S2.23 已補 7 個 host owner decision candidate packets;S2.24 已補 7 個 host owner decision review checklist items;S2.25 已補 7 個 host owner decision review outcome lanes;S2.26 已補 7 個 host owner decision record draft packets;S2.27 已補 7 個 host owner decision record draft review checklist items;S2.28 已補 7 個 host owner decision record draft review outcome lanes;S2.29 已補 7 個 host owner decision record write-up packets;S2.30 已補 7 個 host owner decision record write-up review checklist items;S2.31 已補 7 個 host owner decision record write-up review outcome lanes;S2.32 已補 7 個 host owner decision record formal candidate packets;S2.33 已補 7 個 host owner decision record formal candidate review checklist items;S2.34 已補 8 個 host owner decision record formal candidate review outcome lanes;S2.35 已補 8 個 host owner decision record formal record queue packets;S2.36 已補 8 個 host owner decision record formal record queue review checklist items;S2.37 已補 8 個 host owner decision record formal record queue review outcome lanes;S2.38 已補 8 個 host owner decision record human handoff readiness packets;S2.39 已補 8 個 host owner decision record human handoff readiness review checklist items;S2.40 已補 9 個 host owner decision record human handoff readiness review outcome lanes;S2.41 已補 9 個 host owner decision record human record owner review candidate packets;S2.42 已補 9 個 host owner decision record human record owner review candidate checklist items;S2.43 已補 9 個 host owner decision record human record owner review candidate outcome lanes;S2.44 已補 9 個 host owner decision record human record owner review preparation packets;S2.45 已補 9 個 host owner decision record human record owner review preparation checklist items;S2.46 已補 6 條 progress acceleration lanes,顯示 58% holding 原因與下一個高層解鎖 gate;S2.47 已補 4 個 owner response next-action focus items,顯示 S4.9 為下一個收件焦點且 S4.10-S4.12 依序排隊;仍不新增 action button | | Dry-run | `contract_defined_not_executed`;已納入 `CHECK_PROGRESS_GUARD` 與 `CHECK_OWNER_RESPONSE_GUARD`,latest local validation 為 `repo_snapshot_guard_pass`,仍不代表 production ingestion | | Runtime actions | `false` | | Payload ingestion | `false` | @@ -130,6 +130,7 @@ | S2.44 IwoooS host owner decision record human record owner review preparation packets | framework detail | 0 | 只顯示 human record owner review preparation candidate 後的九個只讀 metadata packets;preparation completed、review started、review ready、handoff started、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 | | S2.45 IwoooS host owner decision record human record owner review preparation checklist | framework detail | 0 | 只顯示 human record owner review preparation packets 後的九個只讀核對項;preparation completed、checklist passed、review started、review ready、handoff started、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 | | S2.46 IwoooS progress acceleration lanes | framework detail | 0 | 只顯示 owner response、redacted ingestion、runtime gate、GitHub readiness、AwoooP landing 與 cadence compression 六條解鎖 lane;headline percent、owner response、payload ingestion、runtime gate、GitHub primary、production execution 與 action button 仍全部鎖住 | +| S2.47 IwoooS owner response next-action focus | framework detail | 0 | 只顯示 S4.9 為下一個 owner response 收件焦點,S4.10 / S4.11 / S4.12 依序排隊;received、accepted、rejected、audit emitted、approval record、runtime gate、repo / refs mutation、secret value collection 與 action button 仍全部鎖住 | headline 進度要再往上,至少需要下列任一高層 gate 有實質 evidence: diff --git a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md index a4acd6423..774e324a4 100644 --- a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md +++ b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md @@ -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 + Workflow / Secret Name Owner Response 收件包 + Source Control Owner Response Validation Rollup + 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 報告契約 + 鏡像狀態彙整契約 + IwoooS 前端態勢入口 + IwoooS posture projection contract + IwoooS 既有前端資安頁面整合 + IwoooS 覆蓋與邊界矩陣 + IwoooS 只讀資安處理旅程 + IwoooS owner evidence readiness board + IwoooS host coverage view + IwoooS host action gate matrix + IwoooS host evidence readiness board + IwoooS host evidence collection order + IwoooS host evidence intake preflight + IwoooS host evidence review outcome lanes + IwoooS host evidence review handoff packets + IwoooS host evidence reviewer checklist + IwoooS host evidence reviewer outcome lanes + IwoooS host owner decision candidate packets + IwoooS host owner decision review checklist + IwoooS host owner decision review outcome lanes + IwoooS host owner decision record draft packets + IwoooS host owner decision record draft review checklist + IwoooS host owner decision record draft review outcome lanes + IwoooS host owner decision record write-up packets + IwoooS host owner decision record write-up review checklist + IwoooS host owner decision record write-up review outcome lanes + IwoooS host owner decision record formal candidate packets + IwoooS host owner decision record formal candidate review checklist + IwoooS host owner decision record formal candidate review outcome lanes + IwoooS host owner decision record formal record queue packets + IwoooS host owner decision record formal record queue review checklist + IwoooS host owner decision record formal record queue review outcome lanes + IwoooS host owner decision record human handoff readiness packets + IwoooS host owner decision record human handoff readiness review checklist + IwoooS host owner decision record human handoff readiness review outcome lanes + IwoooS host owner decision record human record owner review candidate packets + IwoooS host owner decision record human record owner review candidate checklist + IwoooS host owner decision record human record owner review candidate outcome lanes + IwoooS host owner decision record human record owner review preparation packets + IwoooS host owner decision record human record owner review preparation checklist + IwoooS progress acceleration lanes | +| 本階段完成 | 資安供應鏈 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 收件包 + Source Control Owner Response Validation Rollup + 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 報告契約 + 鏡像狀態彙整契約 + IwoooS 前端態勢入口 + IwoooS posture projection contract + IwoooS 既有前端資安頁面整合 + IwoooS 覆蓋與邊界矩陣 + IwoooS 只讀資安處理旅程 + IwoooS owner evidence readiness board + IwoooS host coverage view + IwoooS host action gate matrix + IwoooS host evidence readiness board + IwoooS host evidence collection order + IwoooS host evidence intake preflight + IwoooS host evidence review outcome lanes + IwoooS host evidence review handoff packets + IwoooS host evidence reviewer checklist + IwoooS host evidence reviewer outcome lanes + IwoooS host owner decision candidate packets + IwoooS host owner decision review checklist + IwoooS host owner decision review outcome lanes + IwoooS host owner decision record draft packets + IwoooS host owner decision record draft review checklist + IwoooS host owner decision record draft review outcome lanes + IwoooS host owner decision record write-up packets + IwoooS host owner decision record write-up review checklist + IwoooS host owner decision record write-up review outcome lanes + IwoooS host owner decision record formal candidate packets + IwoooS host owner decision record formal candidate review checklist + IwoooS host owner decision record formal candidate review outcome lanes + IwoooS host owner decision record formal record queue packets + IwoooS host owner decision record formal record queue review checklist + IwoooS host owner decision record formal record queue review outcome lanes + IwoooS host owner decision record human handoff readiness packets + IwoooS host owner decision record human handoff readiness review checklist + IwoooS host owner decision record human handoff readiness review outcome lanes + IwoooS host owner decision record human record owner review candidate packets + IwoooS host owner decision record human record owner review candidate checklist + IwoooS host owner decision record human record owner review candidate outcome lanes + IwoooS host owner decision record human record owner review preparation packets + IwoooS host owner decision record human record owner review preparation checklist + IwoooS progress acceleration lanes + IwoooS owner response next-action focus | | 原則 | 低摩擦分階段;文件、schema、read-only evidence 優先;不做 runtime enforcement、不切 primary | ## 0. 本階段完成後整體進度 @@ -27,7 +27,7 @@ python3 scripts/security/security-mirror-progress-guard.py ### 0.2 Headline 58% 不代表停滯 -近期 S4.10 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks、S4.11 request packet / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks、S4.12 request packet / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks、S4.13 evidence routing rules / display sections / state transition rules / reviewer checklist / reviewer outcome lanes / reviewer audit event templates / reviewer audit display sections / reviewer audit collection checks / reviewer audit redaction examples / reviewer audit retention rules / reviewer audit retention checks / reviewer audit handoff packets / reviewer audit handoff checks / parallel session sync checks / parallel session conflict lanes / parallel session recovery checks / recovery outcome lanes、S1.3 non-blocking escalation lanes、S2.8 IwoooS frontend posture entry,以及 S2.9-S2.46 IwoooS posture projection contract 都是有效進展,但它們是 framework detail,不是 owner response、runtime gate、production ingestion 或 GitHub primary readiness。因此 headline 仍維持 58%,避免把只讀框架誤算成已落地執行。 +近期 S4.10 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks、S4.11 request packet / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks、S4.12 request packet / template status ledger / audit event templates / redaction examples / collection checks / intake preflight checks、S4.13 evidence routing rules / display sections / state transition rules / reviewer checklist / reviewer outcome lanes / reviewer audit event templates / reviewer audit display sections / reviewer audit collection checks / reviewer audit redaction examples / reviewer audit retention rules / reviewer audit retention checks / reviewer audit handoff packets / reviewer audit handoff checks / parallel session sync checks / parallel session conflict lanes / parallel session recovery checks / recovery outcome lanes、S1.3 non-blocking escalation lanes、S2.8 IwoooS frontend posture entry,以及 S2.9-S2.47 IwoooS posture projection contract 都是有效進展,但它們是 framework detail,不是 owner response、runtime gate、production ingestion 或 GitHub primary readiness。因此 headline 仍維持 58%,避免把只讀框架誤算成已落地執行。 | 最近完成 | 目前狀態 | headline delta | |----------|----------|----------------| @@ -106,6 +106,7 @@ python3 scripts/security/security-mirror-progress-guard.py | S2.44 IwoooS host owner decision record human record owner review preparation packets | 已完成草案,將 preparation identity trace、owner boundary、decision summary、scope / expiry、scan limits、credential boundary、maintenance / rollback、validation / runtime gate、no-execution attestation 顯示成九個只讀 preparation packets | 0 | | S2.45 IwoooS host owner decision record human record owner review preparation checklist | 已完成草案,將 preparation identity trace readable、owner boundary readable、decision summary readable、scope / expiry current、scan limits not authorization、credential metadata-only、maintenance / rollback traceable、validation / runtime gate separate、no-execution attestation present 顯示成九個只讀核對項 | 0 | | S2.46 IwoooS progress acceleration lanes | 已完成草案,將 owner response、redacted ingestion、runtime gate、GitHub readiness、AwoooP landing 與 cadence compression 六個真正會影響進度感的解鎖 lane 顯示在 IwoooS;headline 仍只在高層 gate 有 evidence 時 review | 0 | +| S2.47 IwoooS owner response next-action focus | 已完成草案,將 S4.9 Gitea owner attestation 固定為下一個收件焦點,S4.10 / S4.11 / S4.12 依序排隊;received / accepted 仍為 0 | 0 | headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner response 收到並通過脫敏驗收,或人工批准後出現 active runtime gate、redacted payload ingestion、GitHub primary readiness 這類落地 evidence。 @@ -171,6 +172,7 @@ headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner respons | S2.44 IwoooS Host Owner Decision Record Human Record Owner Review Preparation Packets | 完成草案 | `/iwooos` 新增主機 owner decision record human record owner review preparation packets,顯示 preparation identity trace、owner boundary、decision summary、scope / expiry、scan limits、credential boundary、maintenance / rollback、validation / runtime gate、no-execution attestation 九個準備資料包 | 使用者能理解 human record owner review preparation packet 仍不是 preparation completed、review started、review ready、owner decision 或正式紀錄;仍不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 | | S2.45 IwoooS Host Owner Decision Record Human Record Owner Review Preparation Checklist | 完成草案 | `/iwooos` 新增主機 owner decision record human record owner review preparation checklist,顯示 preparation identity trace readable、owner boundary readable、decision summary readable、scope / expiry current、scan limits not authorization、credential metadata-only、maintenance / rollback traceable、validation / runtime gate separate、no-execution attestation present 九個只讀核對項 | 使用者能理解 human record owner review preparation checklist 仍不是 preparation completed、checklist passed、review started、review ready、owner decision 或正式紀錄;仍不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 | | S2.46 IwoooS Progress Acceleration Lanes | 完成草案 | `/iwooos` 新增進度加速與 58% 解鎖面板,顯示 owner response、redacted ingestion、runtime gate、GitHub readiness、AwoooP landing 與 cadence compression 六條 acceleration lanes | 使用者能理解前面看起來慢是因為 S2.38-S2.45 都是防止誤讀的 framework detail;後續改採 milestone batch,但 acceleration lane 仍不是 owner response、進度加分、runtime gate、GitHub primary 或 production execution | +| S2.47 IwoooS Owner Response Next-Action Focus | 完成草案 | `/iwooos` 新增 owner response 下一步收件焦點,顯示 S4.9 Gitea owner attestation 先收、S4.10 GitHub target、S4.11 refs truth、S4.12 workflow / secret name 依序排隊 | 使用者能理解下一個有感工作是收斂 P0 owner response;focus 仍不是催收、代填、received、accepted、approval record、runtime gate、repo / refs mutation、secret value collection 或 GitHub primary | | S3 approval gate | 進行中 | `security_approval_gate_v1` 已建立 8 個人工 gate items:7 pending、1 block candidate、0 approved | 不得繞過人工批准;批准後仍需 follow-up runtime gate | | S3.0 人工批准 Gate 契約 | 完成草案 | 定義批准範圍、決策選項、required reviewers、still forbidden 與 follow-up runtime gate | AwoooP 可記錄決策,不可執行 gate item | | S3.1 人工決策紀錄契約 | 完成草案 | `security_approval_decision_record_v1` 已建立;目前 0 筆 decision records、0 個 runtime action 授權 | AwoooP 可稽核決策,不可把決策當執行 | diff --git a/docs/security/iwooos-posture-projection.snapshot.json b/docs/security/iwooos-posture-projection.snapshot.json index 926787342..acaf40061 100644 --- a/docs/security/iwooos-posture-projection.snapshot.json +++ b/docs/security/iwooos-posture-projection.snapshot.json @@ -72,7 +72,8 @@ "host_owner_decision_record_human_record_owner_review_candidate_outcome_lane_count": 9, "host_owner_decision_record_human_record_owner_review_preparation_packet_count": 9, "host_owner_decision_record_human_record_owner_review_preparation_checklist_item_count": 9, - "progress_acceleration_lane_count": 6 + "progress_acceleration_lane_count": 6, + "owner_response_next_action_focus_item_count": 4 }, "progress": { "overall_percent": 58, @@ -181,7 +182,8 @@ "display_host_owner_decision_record_human_record_owner_review_candidate_checklist", "display_host_owner_decision_record_human_record_owner_review_candidate_outcome_lanes", "display_host_owner_decision_record_human_record_owner_review_preparation_packets", - "display_host_owner_decision_record_human_record_owner_review_preparation_checklist" + "display_host_owner_decision_record_human_record_owner_review_preparation_checklist", + "display_owner_response_next_action_focus" ], "forbidden_frontend_outputs": [ "add_scan_button", @@ -344,7 +346,15 @@ "open_runtime_gate_from_progress_acceleration_lane", "mark_owner_response_received_from_progress_acceleration_lane", "enable_github_primary_from_progress_acceleration_lane", - "enable_production_execution_from_progress_acceleration_lane" + "enable_production_execution_from_progress_acceleration_lane", + "treat_owner_response_focus_as_received", + "collect_owner_response_from_iwooos_focus", + "autofill_owner_response_from_iwooos_focus", + "mark_owner_response_accepted_from_iwooos_focus", + "skip_s4_9_from_owner_response_focus", + "open_runtime_gate_from_owner_response_focus", + "switch_github_primary_from_owner_response_focus", + "create_repo_from_owner_response_focus" ], "runtime_execution_authorized": false, "action_buttons_allowed": false, @@ -5940,5 +5950,115 @@ "action_buttons_allowed": false, "not_authorization": true } + ], + "owner_response_next_action_focus_items": [ + { + "focus_id": "owner_response_focus_s4_9_gitea_owner_attestation", + "display_order": 1, + "source_rollup_lane_id": "s4_9_gitea_inventory_owner_attestation_response", + "required_packet": "docs/security/GITEA-INVENTORY-OWNER-ATTESTATION-RESPONSE.md", + "focus_state": "next_collection_candidate", + "minimum_response_count": 5, + "blocked_until_previous_focus_accepted": false, + "next_action": "owner_reply_with_five_redacted_gitea_coverage_attestation_items", + "redaction_boundary": "redacted_evidence_refs_only_no_token_value", + "display_mode": "owner_response_next_action_focus_only", + "owner_response_received_count": 0, + "owner_response_accepted_count": 0, + "owner_response_rejected_count": 0, + "audit_events_emitted_count": 0, + "auto_chase_allowed": false, + "autofill_allowed": false, + "mark_received_allowed": false, + "mark_accepted_allowed": false, + "approval_record_created": false, + "runtime_gate_opened": false, + "repo_or_refs_mutation_allowed": false, + "secret_value_collection_allowed": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "focus_id": "owner_response_focus_s4_10_github_target_owner_decision", + "display_order": 2, + "source_rollup_lane_id": "s4_10_github_target_owner_decision_response", + "required_packet": "docs/security/GITHUB-TARGET-OWNER-DECISION-RESPONSE.md", + "focus_state": "queued_after_s4_9_accepted", + "minimum_response_count": 7, + "blocked_until_previous_focus_accepted": true, + "next_action": "owner_reply_with_github_target_owner_visibility_canonical_disposition", + "redaction_boundary": "redacted_target_decision_metadata_only_no_repo_creation", + "display_mode": "owner_response_next_action_focus_only", + "owner_response_received_count": 0, + "owner_response_accepted_count": 0, + "owner_response_rejected_count": 0, + "audit_events_emitted_count": 0, + "auto_chase_allowed": false, + "autofill_allowed": false, + "mark_received_allowed": false, + "mark_accepted_allowed": false, + "approval_record_created": false, + "runtime_gate_opened": false, + "repo_or_refs_mutation_allowed": false, + "secret_value_collection_allowed": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "focus_id": "owner_response_focus_s4_11_refs_truth_owner_response", + "display_order": 3, + "source_rollup_lane_id": "s4_11_ref_truth_owner_response", + "required_packet": "docs/security/SOURCE-CONTROL-REF-TRUTH-OWNER-RESPONSE.md", + "focus_state": "queued_after_target_decision_accepted", + "minimum_response_count": 5, + "blocked_until_previous_focus_accepted": true, + "next_action": "owner_reply_with_refs_truth_disposition_for_review_items", + "redaction_boundary": "redacted_refs_truth_metadata_only_no_refs_mutation", + "display_mode": "owner_response_next_action_focus_only", + "owner_response_received_count": 0, + "owner_response_accepted_count": 0, + "owner_response_rejected_count": 0, + "audit_events_emitted_count": 0, + "auto_chase_allowed": false, + "autofill_allowed": false, + "mark_received_allowed": false, + "mark_accepted_allowed": false, + "approval_record_created": false, + "runtime_gate_opened": false, + "repo_or_refs_mutation_allowed": false, + "secret_value_collection_allowed": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "focus_id": "owner_response_focus_s4_12_workflow_secret_name_owner_response", + "display_order": 4, + "source_rollup_lane_id": "s4_12_workflow_secret_name_owner_response", + "required_packet": "docs/security/SOURCE-CONTROL-WORKFLOW-SECRET-NAME-OWNER-RESPONSE.md", + "focus_state": "queued_after_refs_truth_accepted", + "minimum_response_count": 5, + "blocked_until_previous_focus_accepted": true, + "next_action": "owner_reply_with_workflow_secret_name_parity_metadata", + "redaction_boundary": "secret_names_and_owner_metadata_only_no_secret_value", + "display_mode": "owner_response_next_action_focus_only", + "owner_response_received_count": 0, + "owner_response_accepted_count": 0, + "owner_response_rejected_count": 0, + "audit_events_emitted_count": 0, + "auto_chase_allowed": false, + "autofill_allowed": false, + "mark_received_allowed": false, + "mark_accepted_allowed": false, + "approval_record_created": false, + "runtime_gate_opened": false, + "repo_or_refs_mutation_allowed": false, + "secret_value_collection_allowed": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + } ] } diff --git a/docs/security/security-mirror-status-rollup.snapshot.json b/docs/security/security-mirror-status-rollup.snapshot.json index 87b89228d..2a1d33665 100644 --- a/docs/security/security-mirror-status-rollup.snapshot.json +++ b/docs/security/security-mirror-status-rollup.snapshot.json @@ -1022,6 +1022,18 @@ "runtime_delta": false, "execution_authorized": false, "not_authorization": true + }, + { + "delta_id": "s2_47_iwooos_owner_response_next_action_focus", + "display_order": 76, + "completed_stage": "S2.47 IwoooS owner response next-action focus", + "progress_axis": "framework_detail", + "headline_percent_delta": 0, + "framework_delta_visible": true, + "why_headline_unchanged": "owner response next-action focus 只顯示 S4.9-S4.12 收件順序與下一個 S4.9 焦點;owner response received/accepted 仍為 0,runtime gate、GitHub primary readiness 與 production landing 仍未改變。", + "runtime_delta": false, + "execution_authorized": false, + "not_authorization": true } ], "next_safe_actions": [ @@ -1417,7 +1429,8 @@ "S2.43 只新增 IwoooS host owner decision record human record owner review candidate outcome lanes;host_owner_decision_record_human_record_owner_review_candidate_outcome_lane_count=9、human_record_owner_review_check_passed_count=0、human_record_owner_review_started_count=0、human_record_owner_review_ready_count=0、human_record_owner_handoff_review_passed_count=0、human_record_owner_handoff_started_count=0、human_record_owner_handoff_ready_count=0、formal_record_queue_review_passed_count=0、formal_record_queue_enqueued_count=0、decision_record_created=false、owner_decision_received_count=0、owner_decision_accepted_count=0、owner_approval_record_created=false、runtime_gate_opened=false,不把 review candidate outcome 當 checklist passed、review started、review ready、owner decision、正式 decision record、批准或 runtime gate。", "S2.44 只新增 IwoooS host owner decision record human record owner review preparation packets;host_owner_decision_record_human_record_owner_review_preparation_packet_count=9、human_record_owner_review_prepared_count=0、human_record_owner_review_check_passed_count=0、human_record_owner_review_started_count=0、human_record_owner_review_ready_count=0、human_record_owner_handoff_review_passed_count=0、human_record_owner_handoff_started_count=0、human_record_owner_handoff_ready_count=0、formal_record_queue_review_passed_count=0、formal_record_queue_enqueued_count=0、decision_record_created=false、owner_decision_received_count=0、owner_decision_accepted_count=0、owner_approval_record_created=false、runtime_gate_opened=false,不把 review preparation packet 當 preparation completed、review started、review ready、owner decision、正式 decision record、批准或 runtime gate。", "S2.45 只新增 IwoooS host owner decision record human record owner review preparation checklist;host_owner_decision_record_human_record_owner_review_preparation_checklist_item_count=9、human_record_owner_review_prepared_count=0、human_record_owner_review_check_passed_count=0、human_record_owner_review_started_count=0、human_record_owner_review_ready_count=0、human_record_owner_handoff_review_passed_count=0、human_record_owner_handoff_started_count=0、human_record_owner_handoff_ready_count=0、formal_record_queue_review_passed_count=0、formal_record_queue_enqueued_count=0、decision_record_created=false、owner_decision_received_count=0、owner_decision_accepted_count=0、owner_approval_record_created=false、runtime_gate_opened=false,不把 review preparation checklist 當 preparation completed、checklist passed、review started、review ready、owner decision、正式 decision record、批准或 runtime gate。", - "S2.46 新增 IwoooS progress acceleration lanes;progress_acceleration_lane_count=6、headline_percent_after_this_stage=58、owner_response_received_count=0、owner_response_accepted_count=0、payloads_ingested=false、active_runtime_gate_count=0、github_primary_ready_count=0、production_landing_enabled=false,不把 acceleration lane 當授權、進度加分、runtime gate、owner response received、GitHub primary 或 production execution。" + "S2.46 新增 IwoooS progress acceleration lanes;progress_acceleration_lane_count=6、headline_percent_after_this_stage=58、owner_response_received_count=0、owner_response_accepted_count=0、payloads_ingested=false、active_runtime_gate_count=0、github_primary_ready_count=0、production_landing_enabled=false,不把 acceleration lane 當授權、進度加分、runtime gate、owner response received、GitHub primary 或 production execution。", + "S2.47 新增 IwoooS owner response next-action focus;owner_response_next_action_focus_item_count=4,顯示 S4.9 Gitea owner attestation 為下一個收件焦點,S4.10/S4.11/S4.12 依序排隊;owner response received/accepted/rejected 與 audit events emitted 仍為 0,不自動催收、代填、標記 received/accepted、建立 approval record、開 runtime gate 或切 GitHub primary。" ], "forbidden_actions": [ "start_kali_scan", diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py index db3927e4b..4bc41686c 100755 --- a/scripts/security/security-mirror-progress-guard.py +++ b/scripts/security/security-mirror-progress-guard.py @@ -198,6 +198,7 @@ def validate(root: Path) -> None: "s2_44_iwooos_host_owner_decision_record_human_record_owner_review_preparation_packets", "s2_45_iwooos_host_owner_decision_record_human_record_owner_review_preparation_checklist", "s2_46_iwooos_progress_acceleration_lanes", + "s2_47_iwooos_owner_response_next_action_focus", ] assert_equal( "progress_delta_ledger.delta_ids", @@ -951,6 +952,113 @@ def validate(root: Path) -> None: f"iwooos_projection.progress_acceleration_lanes.{item['lane_id']}.not_authorization", item["not_authorization"], ) + expected_owner_response_next_action_focus_ids = [ + "owner_response_focus_s4_9_gitea_owner_attestation", + "owner_response_focus_s4_10_github_target_owner_decision", + "owner_response_focus_s4_11_refs_truth_owner_response", + "owner_response_focus_s4_12_workflow_secret_name_owner_response", + ] + assert_equal( + "iwooos_projection.summary.owner_response_next_action_focus_item_count", + iwooos_projection["summary"]["owner_response_next_action_focus_item_count"], + len(expected_owner_response_next_action_focus_ids), + ) + owner_response_focus_items = iwooos_projection["owner_response_next_action_focus_items"] + assert_equal( + "iwooos_projection.owner_response_next_action_focus_items.ids", + [item["focus_id"] for item in owner_response_focus_items], + expected_owner_response_next_action_focus_ids, + ) + assert_equal( + "iwooos_projection.owner_response_next_action_focus_items.display_order", + [item["display_order"] for item in owner_response_focus_items], + list(range(1, len(expected_owner_response_next_action_focus_ids) + 1)), + ) + assert_equal( + "iwooos_projection.owner_response_next_action_focus_items.source_rollup_lane_ids", + [item["source_rollup_lane_id"] for item in owner_response_focus_items], + [ + "s4_9_gitea_inventory_owner_attestation_response", + "s4_10_github_target_owner_decision_response", + "s4_11_ref_truth_owner_response", + "s4_12_workflow_secret_name_owner_response", + ], + ) + assert_equal( + "iwooos_projection.owner_response_next_action_focus_items.blocked_until_previous_focus_accepted", + [item["blocked_until_previous_focus_accepted"] for item in owner_response_focus_items], + [False, True, True, True], + ) + for item in owner_response_focus_items: + assert_equal( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.display_mode", + item["display_mode"], + "owner_response_next_action_focus_only", + ) + assert_equal( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.owner_response_received_count", + item["owner_response_received_count"], + 0, + ) + assert_equal( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.owner_response_accepted_count", + item["owner_response_accepted_count"], + 0, + ) + assert_equal( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.owner_response_rejected_count", + item["owner_response_rejected_count"], + 0, + ) + assert_equal( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.audit_events_emitted_count", + item["audit_events_emitted_count"], + 0, + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.auto_chase_allowed", + item["auto_chase_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.autofill_allowed", + item["autofill_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.mark_received_allowed", + item["mark_received_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.mark_accepted_allowed", + item["mark_accepted_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.approval_record_created", + item["approval_record_created"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.runtime_gate_opened", + item["runtime_gate_opened"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.repo_or_refs_mutation_allowed", + item["repo_or_refs_mutation_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.secret_value_collection_allowed", + item["secret_value_collection_allowed"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.runtime_execution_authorized", + item["runtime_execution_authorized"], + ) + assert_false( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.action_buttons_allowed", + item["action_buttons_allowed"], + ) + assert_true( + f"iwooos_projection.owner_response_next_action_focus_items.{item['focus_id']}.not_authorization", + item["not_authorization"], + ) assert_equal( "iwooos_projection.posture_pillars.ids", [item["pillar_id"] for item in iwooos_projection["posture_pillars"]], @@ -3901,6 +4009,7 @@ def validate(root: Path) -> None: "display_security_posture", "display_progress_estimate", "display_progress_acceleration_lanes", + "display_owner_response_next_action_focus", "display_non_blocking_lanes", "display_existing_frontend_security_surfaces", "display_frontend_surface_coverage_matrix", @@ -4100,6 +4209,14 @@ def validate(root: Path) -> None: "mark_owner_response_received_from_progress_acceleration_lane", "enable_github_primary_from_progress_acceleration_lane", "enable_production_execution_from_progress_acceleration_lane", + "treat_owner_response_focus_as_received", + "collect_owner_response_from_iwooos_focus", + "autofill_owner_response_from_iwooos_focus", + "mark_owner_response_accepted_from_iwooos_focus", + "skip_s4_9_from_owner_response_focus", + "open_runtime_gate_from_owner_response_focus", + "switch_github_primary_from_owner_response_focus", + "create_repo_from_owner_response_focus", "apply_runtime_blocking_control", "switch_github_primary", "production_deploy",