From a957adde4b2a63658855d24cfafecb0f3e662a68 Mon Sep 17 00:00:00 2001 From: Your Name Date: Wed, 20 May 2026 14:19:16 +0800 Subject: [PATCH] feat(web): add IwoooS AwoooP landing readiness --- apps/web/messages/en.json | 45 +++++++ apps/web/messages/zh-TW.json | 45 +++++++ apps/web/src/app/[locale]/iwooos/page.tsx | 69 ++++++++++ docs/LOGBOOK.md | 14 ++ .../iwooos_posture_projection_v1.schema.json | 92 ++++++++++++++ docs/security/IWOOOS-POSTURE-PROJECTION.md | 27 +++- .../security/SECURITY-MIRROR-STATUS-ROLLUP.md | 3 +- .../SECURITY-SUPPLY-CHAIN-PROGRESS.md | 6 +- .../iwooos-posture-projection.snapshot.json | 120 +++++++++++++++++- ...ecurity-mirror-status-rollup.snapshot.json | 15 ++- .../security-mirror-progress-guard.py | 91 +++++++++++++ 11 files changed, 518 insertions(+), 9 deletions(-) diff --git a/apps/web/messages/en.json b/apps/web/messages/en.json index 92d04c80c..5ec5ad333 100644 --- a/apps/web/messages/en.json +++ b/apps/web/messages/en.json @@ -2748,6 +2748,51 @@ } } }, + "awooopReadOnlyLandingReadiness": { + "title": "AwoooP Read-Only Landing Readiness", + "subtitle": "S2.51 turns the AwoooP main-line read-only consumption path for IwoooS / security mirror state into an intake readiness board. This is landing readiness, not production_landing_enabled, and it does not connect an execution router.", + "readinessLabel": "Read-only intake", + "requirementLabel": "Intake requirement", + "guardLabel": "Still locked", + "items": { + "rollupSnapshotReadable": { + "title": "Rollup snapshots are readable", + "body": "`security-mirror-status-rollup.snapshot.json` and `iwooos-posture-projection.snapshot.json` can serve as the main read-only sources for AwoooP.", + "requirement": "AwoooP consumes committed snapshots and guard output only, without calling Kali, Gitea, GitHub, or runtime APIs directly.", + "guard": "production_landing_enabled=false; execution router linked=false" + }, + "evidenceRefsReadable": { + "title": "Evidence refs are traceable", + "body": "IwoooS already lists evidence refs for security rollout, owner response validation, Kali status, rollup, and projection state.", + "requirement": "AwoooP landing may show evidence refs and status summaries only; it must not store raw payloads, credential plaintext, or token values.", + "guard": "payloads_ingested=false; secret value collection=false" + }, + "guardChecksKnown": { + "title": "Guard checks are known", + "body": "`security-mirror-progress-guard.py` and `source-control-owner-response-guard.py` are the required read-only preflight checks.", + "requirement": "AwoooP main-line intake must preserve progress, owner response, runtime flag, action button, and forbidden output checks.", + "guard": "Do not skip guards; do not treat guard pass as runtime approval." + }, + "routeGroupsKnown": { + "title": "Mirror route groups are known", + "body": "`security_mirror_route_v1` already defines read-only destinations for Operator Console, runtime state, channel event, audit evidence, and approval queue.", + "requirement": "AwoooP may display and classify by route group only; it must not add scan, execute, repair, repo, refs, or deploy actions.", + "guard": "action_buttons_allowed=false; runtime_execution_authorized=false" + }, + "forbiddenOutputsLocked": { + "title": "Forbidden outputs stay locked", + "body": "IwoooS / rollup explicitly forbids action buttons, runtime gates, GitHub primary switching, or production execution from landing readiness.", + "requirement": "AwoooP intake must preserve the forbidden output list and keep write, execution, switch, and secret-value collection paths closed.", + "guard": "Do not treat landing readiness as production consumption." + }, + "productionHandoffPending": { + "title": "Production handoff is still pending", + "body": "This is only the AwoooP read-only landing intake preparation; it does not prove the AwoooP production main line consumes the state yet.", + "requirement": "A later PR / deployment evidence must prove AwoooP displays rollup, evidence refs, and guard results read-only.", + "guard": "progress_change_applied=false; headline percent delta=0" + } + } + }, "progressAcceleration": { "title": "Progress Acceleration And Real Unlock Points", "subtitle": "Progress is moving, but the 58% headline only gets reassessed when owner responses, runtime gates, GitHub primary readiness, or AwoooP production landing produce real evidence. This board makes the next visible unlock points explicit.", diff --git a/apps/web/messages/zh-TW.json b/apps/web/messages/zh-TW.json index ff027376e..1afda0c7c 100644 --- a/apps/web/messages/zh-TW.json +++ b/apps/web/messages/zh-TW.json @@ -2749,6 +2749,51 @@ } } }, + "awooopReadOnlyLandingReadiness": { + "title": "AwoooP 只讀 Landing Readiness", + "subtitle": "S2.51 把 AwoooP 主線要如何只讀消費 IwoooS / security mirror 狀態整理成接入準備面板。這是 landing readiness,不是 production landing enabled,也不接 execution router。", + "readinessLabel": "只讀接入", + "requirementLabel": "接入要求", + "guardLabel": "仍鎖住", + "items": { + "rollupSnapshotReadable": { + "title": "Rollup snapshot 可讀", + "body": "`security-mirror-status-rollup.snapshot.json` 與 `iwooos-posture-projection.snapshot.json` 已可作為 AwoooP 只讀入口的主要來源。", + "requirement": "AwoooP 只讀消費 committed snapshot 與 guard output,不直接呼叫 Kali、Gitea、GitHub 或 runtime API。", + "guard": "production_landing_enabled=false;execution router linked=false" + }, + "evidenceRefsReadable": { + "title": "Evidence refs 可追溯", + "body": "IwoooS 已列出 security rollout、owner response validation、Kali status、rollup 與 projection 的 evidence refs。", + "requirement": "AwoooP landing 只能顯示 evidence refs 與狀態摘要,不保存 raw payload、credential plaintext 或 token value。", + "guard": "payloads_ingested=false;secret value collection=false" + }, + "guardChecksKnown": { + "title": "Guard checks 已知", + "body": "`security-mirror-progress-guard.py` 與 `source-control-owner-response-guard.py` 是接入前必跑的只讀檢查。", + "requirement": "AwoooP 主線接入前必須保留 progress、owner response、runtime flags、action button 與 forbidden output 檢查。", + "guard": "不跳過 guard;不把 guard pass 當 runtime approval" + }, + "routeGroupsKnown": { + "title": "Mirror route groups 已知", + "body": "`security_mirror_route_v1` 已定義 Operator Console、runtime state、channel event、audit evidence、approval queue 的只讀目的地。", + "requirement": "AwoooP 只能依 route group 顯示與分類,不新增 scan、execute、repair、repo、refs 或 deploy action。", + "guard": "action_buttons_allowed=false;runtime_execution_authorized=false" + }, + "forbiddenOutputsLocked": { + "title": "Forbidden outputs 鎖住", + "body": "IwoooS / rollup 已明確列出不得從 landing readiness 產生 action button、runtime gate、GitHub primary 或 production execution。", + "requirement": "AwoooP 接入時必須保留禁止輸出清單,並把所有寫入、執行、切換與收 secret value 的入口維持關閉。", + "guard": "不把 landing readiness 當 production consumption" + }, + "productionHandoffPending": { + "title": "Production handoff 仍待接入", + "body": "目前只是 AwoooP 只讀 landing 的接入準備,尚未證明 AwoooP production 主線已消費這組狀態。", + "requirement": "需要後續 PR / deployment evidence 證明 AwoooP 主線只讀顯示 rollup、evidence refs 與 guard result。", + "guard": "progress_change_applied=false;headline percent delta=0" + } + } + }, "progressAcceleration": { "title": "進度加速與真正解鎖點", "subtitle": "目前不是沒有推進,而是 58% headline 只在 owner response、runtime gate、GitHub primary readiness 或 AwoooP production landing 有實質 evidence 時才會重估。這裡把下一批有感推進點集中顯示。", diff --git a/apps/web/src/app/[locale]/iwooos/page.tsx b/apps/web/src/app/[locale]/iwooos/page.tsx index d32e50657..429b40bbf 100644 --- a/apps/web/src/app/[locale]/iwooos/page.tsx +++ b/apps/web/src/app/[locale]/iwooos/page.tsx @@ -45,6 +45,13 @@ type ProgressHoldMovementGate = { tone: 'steady' | 'warn' | 'locked' } +type AwoooPReadOnlyLandingReadinessItem = { + key: string + item: string + icon: typeof ShieldCheck + tone: 'steady' | 'warn' | 'locked' +} + type OwnerResponseNextActionFocusItem = { key: string focus: string @@ -359,6 +366,15 @@ const progressHoldMovementGates: ProgressHoldMovementGate[] = [ { key: 'awooopReadOnlyLanding', gate: 'G5', icon: Radar, tone: 'steady' }, ] +const awooopReadOnlyLandingReadinessItems: AwoooPReadOnlyLandingReadinessItem[] = [ + { key: 'rollupSnapshotReadable', item: 'L1', icon: FileText, tone: 'steady' }, + { key: 'evidenceRefsReadable', item: 'L2', icon: SearchCheck, tone: 'steady' }, + { key: 'guardChecksKnown', item: 'L3', icon: ShieldCheck, tone: 'steady' }, + { key: 'routeGroupsKnown', item: 'L4', icon: Radar, tone: 'warn' }, + { key: 'forbiddenOutputsLocked', item: 'L5', icon: Lock, tone: 'locked' }, + { key: 'productionHandoffPending', item: 'L6', icon: Clock3, tone: 'locked' }, +] + const ownerResponseNextActionFocusItems: OwnerResponseNextActionFocusItem[] = [ { key: 'giteaOwnerAttestation', focus: 'S4.9', icon: ClipboardCheck, tone: 'warn' }, { key: 'githubTargetOwnerDecision', focus: 'S4.10', icon: GitBranch, tone: 'warn' }, @@ -924,6 +940,39 @@ function ProgressHoldMovementGateCard({ item }: { item: ProgressHoldMovementGate ) } +function AwoooPReadOnlyLandingReadinessCard({ item }: { item: AwoooPReadOnlyLandingReadinessItem }) { + const t = useTranslations('iwooos.awooopReadOnlyLandingReadiness') + const Icon = item.icon + const textWrap = { overflowWrap: 'anywhere' as const, wordBreak: 'break-word' as const } + return ( +
+
+
+ + {t('readinessLabel')} +
+ {item.item} +
+

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

+

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

+
+
{t('requirementLabel')}
+
+ {t(`items.${item.key}.requirement` as never)} +
+
{t('guardLabel')}
+
+ {t(`items.${item.key}.guard` as never)} +
+
+
+ ) +} + function OwnerResponseNextActionFocusCard({ item }: { item: OwnerResponseNextActionFocusItem }) { const t = useTranslations('iwooos.ownerResponseNextActionFocus') const Icon = item.icon @@ -2227,6 +2276,26 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) { +
+
+

{t('awooopReadOnlyLandingReadiness.title')}

+

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

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

{t('progressAcceleration.title')}

diff --git a/docs/LOGBOOK.md b/docs/LOGBOOK.md index ad2961321..29d09d0af 100644 --- a/docs/LOGBOOK.md +++ b/docs/LOGBOOK.md @@ -1,3 +1,17 @@ +## 2026-05-20 | 資安供應鏈 S2.51:IwoooS AwoooP Read-Only Landing Readiness + +**背景**:S2.50 已把 58% 維持的五個真實 movement gates 顯示出來;其中 AwoooP read-only landing 仍未進 production 消費。本輪先把 AwoooP 主線只讀接入前需要消費的 snapshot、evidence refs、guard checks、route groups 與 forbidden outputs 做成 readiness 面板,讓另一個 AwoooP Session 可直接接手,但不把 readiness 誤判成 production landing enabled。 + +**完成**: +- `/iwooos` 新增「AwoooP 只讀 Landing Readiness」六個接入條件:rollup snapshot 可讀、evidence refs 可追溯、guard checks 已知、mirror route groups 已知、forbidden outputs 鎖住、production handoff 仍待接入。 +- `iwooos_posture_projection_v1` schema / snapshot 新增 `awooop_read_only_landing_readiness_items` 與 `awooop_read_only_landing_readiness_item_count=6`,每個 item 固定 `headline_percent_delta=0`、`production_landing_enabled=false`、`execution_router_linked=false`、`progress_change_applied=false`、`runtime_execution_authorized=false`、`action_buttons_allowed=false`、`not_authorization=true`。 +- `security_mirror_status_rollup_v1` micro progress ledger 新增 `s2_51_iwooos_awooop_read_only_landing_readiness`,headline progress 仍維持 58%。 +- `security-mirror-progress-guard.py` 開始驗證六個 AwoooP read-only landing readiness items、landing dependencies、current states、zero / false 邊界、allowed frontend output 與 forbidden output。 + +**仍禁止**: +- AwoooP read-only landing readiness 不代表 production landing enabled、production consumption、progress increase、execution router linked、guard skip、runtime gate、GitHub primary ready、approval record、action button、Kali `/execute`、SSH 登入、主機變更、Kali 更新或 blocking control。 +- 整體資安網 headline 仍是 58%;框架 / 治理 / 文件 / schema / read-only evidence 仍約 80-85%;真正落地執行 / runtime ingestion / GitHub primary / AwoooP production landing 仍約 35-40%。 + ## 2026-05-20 | 資安供應鏈 S2.50:IwoooS Progress Hold Movement Gates **背景**:統帥指出整體進度長時間停在 58% 看起來像卡住。本輪不灌水提高 headline,而是把 58% 不動的真實原因直接顯示在 IwoooS:框架、文件、前端可見性確實累積在 80-85% 框架進度,但 headline 只在 owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready 或 AwoooP read-only landing 有 evidence 時才進入重估。 diff --git a/docs/schemas/iwooos_posture_projection_v1.schema.json b/docs/schemas/iwooos_posture_projection_v1.schema.json index e5eef66fc..798f899f9 100644 --- a/docs/schemas/iwooos_posture_projection_v1.schema.json +++ b/docs/schemas/iwooos_posture_projection_v1.schema.json @@ -14,6 +14,7 @@ "source_paths", "summary", "progress", + "awooop_read_only_landing_readiness_items", "progress_hold_movement_gates", "progress_acceleration_lanes", "owner_response_next_action_focus_items", @@ -148,6 +149,7 @@ "host_owner_decision_record_human_record_owner_review_candidate_outcome_lane_count", "host_owner_decision_record_human_record_owner_review_preparation_packet_count", "host_owner_decision_record_human_record_owner_review_preparation_checklist_item_count", + "awooop_read_only_landing_readiness_item_count", "progress_hold_movement_gate_count", "progress_acceleration_lane_count", "action_buttons_allowed", @@ -351,6 +353,10 @@ "type": "integer", "const": 9 }, + "awooop_read_only_landing_readiness_item_count": { + "type": "integer", + "const": 6 + }, "progress_hold_movement_gate_count": { "type": "integer", "const": 5 @@ -3838,6 +3844,92 @@ "additionalProperties": false } }, + "awooop_read_only_landing_readiness_items": { + "type": "array", + "minItems": 6, + "maxItems": 6, + "items": { + "type": "object", + "required": [ + "item_id", + "display_order", + "landing_dependency", + "current_state", + "required_evidence", + "guardrail", + "source_snapshot_count", + "required_guard_check_count", + "display_mode", + "headline_percent_delta", + "production_landing_enabled", + "execution_router_linked", + "progress_change_applied", + "runtime_execution_authorized", + "action_buttons_allowed", + "not_authorization" + ], + "properties": { + "item_id": { + "type": "string" + }, + "display_order": { + "type": "integer", + "minimum": 1 + }, + "landing_dependency": { + "type": "string" + }, + "current_state": { + "type": "string" + }, + "required_evidence": { + "type": "string" + }, + "guardrail": { + "type": "string" + }, + "source_snapshot_count": { + "type": "integer", + "minimum": 0 + }, + "required_guard_check_count": { + "type": "integer", + "minimum": 0 + }, + "display_mode": { + "const": "awooop_read_only_landing_readiness_only" + }, + "headline_percent_delta": { + "type": "integer", + "const": 0 + }, + "production_landing_enabled": { + "type": "boolean", + "const": false + }, + "execution_router_linked": { + "type": "boolean", + "const": false + }, + "progress_change_applied": { + "type": "boolean", + "const": false + }, + "runtime_execution_authorized": { + "type": "boolean", + "const": false + }, + "action_buttons_allowed": { + "type": "boolean", + "const": false + }, + "not_authorization": { + "type": "boolean", + "const": true + } + } + } + }, "progress_hold_movement_gates": { "type": "array", "minItems": 5, diff --git a/docs/security/IWOOOS-POSTURE-PROJECTION.md b/docs/security/IWOOOS-POSTURE-PROJECTION.md index cfbe2dccf..672dec5c9 100644 --- a/docs/security/IWOOOS-POSTURE-PROJECTION.md +++ b/docs/security/IWOOOS-POSTURE-PROJECTION.md @@ -78,6 +78,7 @@ IwoooS 首版只讀取或對齊以下已提交 evidence: 46. 6 個 S4.9 owner response preflight checks,直接顯示第一個 P0 owner response 在收件前要確認的已知 item、必填欄位、allowed decision、脫敏 evidence、無 execution request 與五項到齊規則,但不寄送 request、不標記 received / accepted、不建立 audit event、不寫 Gitea、不 sync refs、不開 runtime gate。 47. 5 個 S4.9 owner response request templates,直接顯示 owner 要逐項回覆的 public-only / local gap、org/user endpoint、110 adjacent source、repo owner / canonical scope、legacy / inaccessible disposition,但不送出 request、不催收、不代填、不標記 received / accepted、不完成 Gitea inventory、不寫 Gitea、不 sync refs、不切 GitHub primary。 48. 5 個 progress hold movement gates,直接顯示 58% 仍維持的五個實質門檻:owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing,但不把 gate 顯示當成進度加分、授權或 runtime execution。 +49. 6 個 AwoooP read-only landing readiness items,整理 AwoooP 主線只讀接入前要消費的 snapshot、evidence refs、guard checks、route groups、forbidden outputs 與 production handoff pending,但不標記 production landing enabled、不接 execution router。 ## 3.1 既有前端資安頁面整合 @@ -812,6 +813,23 @@ S2.50 回應「為什麼進度仍停在 58%」:這不是沒有推進,而是 這個 movement gate board 不代表進度已加分、owner response 已收到或接受、payload ingestion 已啟用、runtime gate 已開啟、GitHub primary 已 ready 或 AwoooP 已進 production execution。它只把 58% 維持的理由轉成使用者可理解、也可被 guard 驗證的五個門檻。 +## 3.42 AwoooP Read-Only Landing Readiness + +S2.51 將 AwoooP 主線只讀接入前的準備條件拉到 IwoooS 可見面板。這一層只回答「AwoooP 要如何安全消費 IwoooS / security mirror 狀態」,不代表 AwoooP production 已接入、不啟用 production landing、不接 execution router、不新增 action button。 + +| 順序 | Readiness item | 目前狀態 | 接入要求 | +|------|----------------|----------|----------| +| 1 | Rollup snapshot readable | ready for read-only intake | AwoooP 只讀消費 committed `security-mirror-status-rollup` 與 `iwooos-posture-projection` snapshot | +| 2 | Evidence refs readable | ready for read-only intake | 顯示 security rollout、owner response validation、Kali status、rollup 與 projection evidence refs | +| 3 | Guard checks known | ready for read-only intake | 接入前保留 `security-mirror-progress-guard.py` 與 `source-control-owner-response-guard.py` | +| 4 | Mirror route groups known | ready for read-only intake | 依 `security_mirror_route_v1` 的 Operator Console、runtime state、channel event、audit evidence、approval queue 只讀目的地顯示 | +| 5 | Forbidden outputs locked | ready for read-only intake | 保留 IwoooS / rollup forbidden outputs,不從 readiness 產生 action button、runtime gate 或 GitHub primary | +| 6 | Production handoff pending | pending production consumption | 後續 PR / deployment evidence 證明 AwoooP production 主線只讀顯示 rollup、evidence refs 與 guard result | + +每個 AwoooP read-only landing readiness item 都固定 `display_mode=awooop_read_only_landing_readiness_only`、`headline_percent_delta=0`、`production_landing_enabled=false`、`execution_router_linked=false`、`progress_change_applied=false`、`runtime_execution_authorized=false`、`action_buttons_allowed=false`、`not_authorization=true`。 + +這個 readiness board 不代表 production landing 已完成、AwoooP 已消費 production 狀態、guard 已可跳過、execution router 已接上或 progress 已加分。它只把下一個 AwoooP 主線接入需要保留的只讀邊界整理清楚。 + ## 4. 仍禁止 IwoooS 不得提供下列輸出: @@ -856,10 +874,11 @@ IwoooS 不得提供下列輸出: 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. 把 progress hold movement gate 當成進度加分、owner response received / accepted、payload ingestion、runtime gate、GitHub primary ready、AwoooP production landing 或 action button。 -41. 把 owner response next-action focus 當成催收、代填、received、accepted、approval record、runtime gate、repo / refs mutation、secret value collection 或 GitHub primary switch。 -42. 把 S4.9 owner response preflight 當成 request sent、owner response received / accepted、preflight passed、audit emitted、approval record、Gitea write、repo / refs mutation、runtime gate 或 GitHub primary switch。 -43. 把 S4.9 owner response request template 當成 request sent、owner response received / accepted、audit emitted、Gitea inventory completed、Gitea write、repo / refs mutation、token collection、runtime gate 或 GitHub primary switch。 -44. 把 58% progress、contract count、mirror readiness 或前端可見狀態當成授權。 +41. 把 AwoooP read-only landing readiness 當成 production consumption、progress increase、execution router、action button、guard skip、runtime gate 或 GitHub primary readiness。 +42. 把 owner response next-action focus 當成催收、代填、received、accepted、approval record、runtime gate、repo / refs mutation、secret value collection 或 GitHub primary switch。 +43. 把 S4.9 owner response preflight 當成 request sent、owner response received / accepted、preflight passed、audit emitted、approval record、Gitea write、repo / refs mutation、runtime gate 或 GitHub primary switch。 +44. 把 S4.9 owner response request template 當成 request sent、owner response received / accepted、audit emitted、Gitea inventory completed、Gitea write、repo / refs mutation、token collection、runtime gate 或 GitHub primary switch。 +45. 把 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 91417b758..c2ec35bc5 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;S2.47 已補 4 個 owner response next-action focus items,顯示 S4.9 為下一個收件焦點且 S4.10-S4.12 依序排隊;S2.48 已補 6 個 S4.9 owner response preflight checks,讓下一個 P0 owner response 的可收件條件可見;S2.49 已補 5 個 S4.9 owner response request templates,讓 owner 要逐項回覆的五題可見;S2.50 已補 5 個 progress hold movement gates,解釋為什麼 58% 仍維持且五個真實 movement signal 都是 0 / false;仍不新增 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 依序排隊;S2.48 已補 6 個 S4.9 owner response preflight checks,讓下一個 P0 owner response 的可收件條件可見;S2.49 已補 5 個 S4.9 owner response request templates,讓 owner 要逐項回覆的五題可見;S2.50 已補 5 個 progress hold movement gates,解釋為什麼 58% 仍維持且五個真實 movement signal 都是 0 / false;S2.51 已補 6 個 AwoooP read-only landing readiness items,讓另一個 AwoooP Session 可照 snapshot / evidence / guard / route / forbidden outputs 接入;仍不新增 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` | @@ -134,6 +134,7 @@ | S2.48 IwoooS S4.9 owner response preflight | framework detail | 0 | 只顯示 S4.9 六個收件前檢查與 failure lanes;request sent、received、accepted、rejected、preflight passed、audit emitted、Gitea write、repo / refs mutation、runtime gate、GitHub primary 與 action button 仍全部鎖住 | | S2.49 IwoooS S4.9 owner response request templates | framework detail | 0 | 只顯示 S4.9 五個 request-ready-not-sent templates;request sent、received、accepted、rejected、audit emitted、Gitea inventory completed、Gitea write、repo / refs mutation、token collection、runtime gate、GitHub primary 與 action button 仍全部鎖住 | | S2.50 IwoooS progress hold movement gates | framework detail | 0 | 只顯示 58% 維持的五個實質門檻;owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing 仍全部為 0 / false,不把 gate 顯示當授權、進度加分或 action button | +| S2.51 IwoooS AwoooP read-only landing readiness | framework detail | 0 | 只顯示 AwoooP 只讀接入前的六個條件;production_landing_enabled=false、execution_router_linked=false、progress_change_applied=false,不把 readiness 當 production consumption、guard skip、runtime gate 或 action button | headline 進度要再往上,至少需要下列任一高層 gate 有實質 evidence: diff --git a/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md b/docs/security/SECURITY-SUPPLY-CHAIN-PROGRESS.md index 8a505e3af..513f190ad 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 + IwoooS owner response next-action focus + IwoooS S4.9 owner response preflight + IwoooS S4.9 owner response request templates + IwoooS progress hold movement gates | +| 本階段完成 | 資安供應鏈 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 + IwoooS S4.9 owner response preflight + IwoooS S4.9 owner response request templates + IwoooS progress hold movement gates + IwoooS AwoooP read-only landing readiness | | 原則 | 低摩擦分階段;文件、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.50 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.51 IwoooS posture projection contract 都是有效進展,但它們是 framework detail,不是 owner response、runtime gate、production ingestion 或 GitHub primary readiness。因此 headline 仍維持 58%,避免把只讀框架誤算成已落地執行。 S2.50 也把「為什麼 58% 還不動」拆成五個可見 gate:owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing。這五個 gate 目前仍全部是 0 / false,所以 headline 不應被灌水提高。 @@ -112,6 +112,7 @@ S2.50 也把「為什麼 58% 還不動」拆成五個可見 gate:owner respons | S2.48 IwoooS S4.9 owner response preflight | 已完成草案,將 S4.9 六個收件前檢查顯示在 IwoooS;request sent、received / accepted / rejected、preflight passed、audit emitted 仍為 0 | 0 | | S2.49 IwoooS S4.9 owner response request templates | 已完成草案,將 S4.9 五個 request-ready-not-sent templates 顯示在 IwoooS;request sent、received / accepted / rejected、audit emitted 仍為 0 | 0 | | S2.50 IwoooS progress hold movement gates | 已完成草案,將 58% 維持原因拆成 owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing 五個 gate;全部仍為 0 / false | 0 | +| S2.51 IwoooS AwoooP read-only landing readiness | 已完成草案,將 AwoooP 只讀接入前的 rollup snapshot、evidence refs、guard checks、route groups、forbidden outputs 與 production handoff pending 顯示在 IwoooS;production_landing_enabled 仍為 false | 0 | headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner response 收到並通過脫敏驗收,或人工批准後出現 active runtime gate、redacted payload ingestion、GitHub primary readiness 這類落地 evidence。 @@ -181,6 +182,7 @@ headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner respons | S2.48 IwoooS S4.9 Owner Response Preflight | 完成草案 | `/iwooos` 新增 S4.9 owner response 收件前 preflight,顯示 known attestation item、required owner fields、allowed decision、redacted evidence only、no execution request、all five items before accepted 六個檢查 | 使用者能理解下一步不是再拆 checklist,而是把第一個 P0 owner response 的可收件條件說清楚;preflight 仍不是 request sent、received、accepted、audit emitted、Gitea write、refs sync、runtime gate 或 GitHub primary | | S2.49 IwoooS S4.9 Owner Response Request Templates | 完成草案 | `/iwooos` 新增 S4.9 owner response 五個回覆 template,顯示 public-only / local gap、org/user endpoint、110 adjacent source scope、repo owner / canonical scope、legacy / inaccessible disposition | 使用者能理解第一個 owner response 要回哪五題;templates 仍不是 request sent、received、accepted、audit emitted、Gitea inventory completed、Gitea write、refs sync、token collection、runtime gate 或 GitHub primary | | S2.50 IwoooS Progress Hold Movement Gates | 完成草案 | `/iwooos` 新增「為什麼 58% 還不動」五個 movement gates,顯示 owner response accepted、redacted payload ingestion、active runtime gate、GitHub primary ready、AwoooP read-only landing 仍全部未滿足 | 使用者能理解 58% 維持不是卡死,而是不灌水;gate 顯示仍不是進度加分、授權、payload ingestion、runtime gate、GitHub primary 或 production landing | +| S2.51 IwoooS AwoooP Read-Only Landing Readiness | 完成草案 | `/iwooos` 新增 AwoooP 只讀 landing readiness,顯示 snapshot、evidence refs、guard checks、route groups、forbidden outputs 與 production handoff pending 六個接入條件 | 使用者與另一個 AwoooP Session 能看懂主線接入要消費什麼;readiness 仍不是 production landing enabled、execution router、action button、guard skip 或 headline 加分 | | 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 4411ed4c6..042f103c9 100644 --- a/docs/security/iwooos-posture-projection.snapshot.json +++ b/docs/security/iwooos-posture-projection.snapshot.json @@ -72,6 +72,7 @@ "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, + "awooop_read_only_landing_readiness_item_count": 6, "progress_hold_movement_gate_count": 5, "progress_acceleration_lane_count": 6, "owner_response_next_action_focus_item_count": 4, @@ -144,6 +145,7 @@ "allowed_frontend_outputs": [ "display_security_posture", "display_progress_estimate", + "display_awooop_read_only_landing_readiness", "display_progress_hold_movement_gates", "display_progress_acceleration_lanes", "display_non_blocking_lanes", @@ -386,7 +388,13 @@ "mark_payload_ingested_from_hold_gate", "open_runtime_gate_from_hold_gate", "mark_github_primary_ready_from_hold_gate", - "enable_production_landing_from_hold_gate" + "enable_production_landing_from_hold_gate", + "treat_awooop_landing_readiness_as_production_consumption", + "enable_awooop_execution_router_from_landing_readiness", + "mark_production_landing_enabled_from_readiness", + "create_action_button_from_awooop_landing_readiness", + "skip_guard_from_awooop_landing_readiness", + "mark_progress_changed_from_awooop_landing_readiness" ], "runtime_execution_authorized": false, "action_buttons_allowed": false, @@ -5873,6 +5881,116 @@ "not_authorization": true } ], + "awooop_read_only_landing_readiness_items": [ + { + "item_id": "awooop_landing_rollup_snapshot_readable", + "display_order": 1, + "landing_dependency": "security_mirror_status_rollup_snapshot", + "current_state": "ready_for_read_only_intake", + "required_evidence": "AwoooP 只讀消費 committed security-mirror-status-rollup 與 iwooos posture projection snapshot。", + "guardrail": "不得直接呼叫 Kali、Gitea、GitHub 或 runtime API。", + "source_snapshot_count": 2, + "required_guard_check_count": 2, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "item_id": "awooop_landing_evidence_refs_readable", + "display_order": 2, + "landing_dependency": "evidence_refs", + "current_state": "ready_for_read_only_intake", + "required_evidence": "AwoooP 顯示 security rollout、owner response validation、Kali status、rollup 與 projection evidence refs。", + "guardrail": "不得保存 raw payload、credential plaintext 或 token value。", + "source_snapshot_count": 5, + "required_guard_check_count": 2, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "item_id": "awooop_landing_guard_checks_known", + "display_order": 3, + "landing_dependency": "guard_checks", + "current_state": "ready_for_read_only_intake", + "required_evidence": "AwoooP 接入前保留 security-mirror-progress-guard.py 與 source-control-owner-response-guard.py。", + "guardrail": "不得跳過 guard,也不得把 guard pass 當 runtime approval。", + "source_snapshot_count": 2, + "required_guard_check_count": 2, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "item_id": "awooop_landing_route_groups_known", + "display_order": 4, + "landing_dependency": "security_mirror_route_groups", + "current_state": "ready_for_read_only_intake", + "required_evidence": "AwoooP 依 security_mirror_route_v1 的 Operator Console、runtime state、channel event、audit evidence、approval queue 只讀目的地顯示。", + "guardrail": "不得新增 scan、execute、repair、repo、refs 或 deploy action。", + "source_snapshot_count": 1, + "required_guard_check_count": 1, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "item_id": "awooop_landing_forbidden_outputs_locked", + "display_order": 5, + "landing_dependency": "forbidden_outputs", + "current_state": "ready_for_read_only_intake", + "required_evidence": "AwoooP 接入時保留 IwoooS / rollup forbidden frontend outputs 與 forbidden runtime outputs。", + "guardrail": "不得從 landing readiness 產生 action button、runtime gate、GitHub primary 或 production execution。", + "source_snapshot_count": 2, + "required_guard_check_count": 2, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + }, + { + "item_id": "awooop_landing_production_handoff_pending", + "display_order": 6, + "landing_dependency": "awooop_mainline_consumption", + "current_state": "pending_production_consumption", + "required_evidence": "後續 PR / deployment evidence 證明 AwoooP production 主線只讀顯示 rollup、evidence refs 與 guard result。", + "guardrail": "不得把 readiness 當成 production_landing_enabled 或 headline progress increase。", + "source_snapshot_count": 0, + "required_guard_check_count": 0, + "display_mode": "awooop_read_only_landing_readiness_only", + "headline_percent_delta": 0, + "production_landing_enabled": false, + "execution_router_linked": false, + "progress_change_applied": false, + "runtime_execution_authorized": false, + "action_buttons_allowed": false, + "not_authorization": true + } + ], "progress_hold_movement_gates": [ { "gate_id": "progress_hold_owner_response_accepted", diff --git a/docs/security/security-mirror-status-rollup.snapshot.json b/docs/security/security-mirror-status-rollup.snapshot.json index 9845e4afc..2b7bad92e 100644 --- a/docs/security/security-mirror-status-rollup.snapshot.json +++ b/docs/security/security-mirror-status-rollup.snapshot.json @@ -1070,6 +1070,18 @@ "runtime_delta": false, "execution_authorized": false, "not_authorization": true + }, + { + "delta_id": "s2_51_iwooos_awooop_read_only_landing_readiness", + "display_order": 80, + "completed_stage": "S2.51 IwoooS AwoooP read-only landing readiness", + "progress_axis": "framework_detail", + "headline_percent_delta": 0, + "framework_delta_visible": true, + "why_headline_unchanged": "AwoooP read-only landing readiness 只整理 production 主線接入前要消費的 snapshots、evidence refs、guard checks、route groups 與 forbidden outputs;production_landing_enabled 仍為 false。", + "runtime_delta": false, + "execution_authorized": false, + "not_authorization": true } ], "next_safe_actions": [ @@ -1469,7 +1481,8 @@ "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。", "S2.48 新增 IwoooS S4.9 owner response preflight;s4_9_owner_response_preflight_check_count=6,顯示 known item、required owner fields、allowed decision、redacted evidence only、no execution request、all five items before accepted 六個收件前檢查;request sent、owner response received/accepted/rejected、preflight passed 與 audit events emitted 仍為 0,不標記 sent/received/accepted、不建立 approval record、不寫 Gitea、不 sync refs、不開 runtime gate 或切 GitHub primary。", "S2.49 新增 IwoooS S4.9 owner response request templates;s4_9_owner_response_request_template_count=5,顯示 public-only/local gap、org/user endpoint、110 adjacent scope、repo owner/canonical scope、legacy/inaccessible disposition 五個 request-ready-not-sent templates;request sent、owner response received/accepted/rejected 與 audit events emitted 仍為 0,不自動催收、代填、送出 request、標記 received/accepted、完成 Gitea inventory、寫 Gitea、sync refs 或切 GitHub primary。", - "S2.50 新增 IwoooS progress hold movement gates;progress_hold_movement_gate_count=5,顯示 owner_response_accepted、redacted_payload_ingested、active_runtime_gate、github_primary_ready、awooop_read_only_landing 五個真正會讓 58% 進入下一輪重估的 gate;owner response received/accepted、payloads_ingested、active_runtime_gate_count、github_primary_ready_count、production_landing_enabled 仍全部為 0/false,不把 gate 顯示當進度加分、授權或 runtime execution。" + "S2.50 新增 IwoooS progress hold movement gates;progress_hold_movement_gate_count=5,顯示 owner_response_accepted、redacted_payload_ingested、active_runtime_gate、github_primary_ready、awooop_read_only_landing 五個真正會讓 58% 進入下一輪重估的 gate;owner response received/accepted、payloads_ingested、active_runtime_gate_count、github_primary_ready_count、production_landing_enabled 仍全部為 0/false,不把 gate 顯示當進度加分、授權或 runtime execution。", + "S2.51 新增 IwoooS AwoooP read-only landing readiness;awooop_read_only_landing_readiness_item_count=6,顯示 rollup snapshot、evidence refs、guard checks、route groups、forbidden outputs 與 production handoff pending;production_landing_enabled=false、execution_router_linked=false、progress_change_applied=false,不把 readiness 當 production consumption、runtime authorization 或 action button。" ], "forbidden_actions": [ "start_kali_scan", diff --git a/scripts/security/security-mirror-progress-guard.py b/scripts/security/security-mirror-progress-guard.py index d781328e3..79466def4 100755 --- a/scripts/security/security-mirror-progress-guard.py +++ b/scripts/security/security-mirror-progress-guard.py @@ -202,6 +202,7 @@ def validate(root: Path) -> None: "s2_48_iwooos_s4_9_owner_response_preflight", "s2_49_iwooos_s4_9_owner_response_request_templates", "s2_50_iwooos_progress_hold_movement_gates", + "s2_51_iwooos_awooop_read_only_landing_readiness", ] assert_equal( "progress_delta_ledger.delta_ids", @@ -885,6 +886,89 @@ def validate(root: Path) -> None: progress_display_policy["headline_status"], ) assert_true("iwooos_projection.progress.not_authorization", iwooos_progress["not_authorization"]) + expected_awooop_read_only_landing_item_ids = [ + "awooop_landing_rollup_snapshot_readable", + "awooop_landing_evidence_refs_readable", + "awooop_landing_guard_checks_known", + "awooop_landing_route_groups_known", + "awooop_landing_forbidden_outputs_locked", + "awooop_landing_production_handoff_pending", + ] + assert_equal( + "iwooos_projection.summary.awooop_read_only_landing_readiness_item_count", + iwooos_projection["summary"]["awooop_read_only_landing_readiness_item_count"], + len(expected_awooop_read_only_landing_item_ids), + ) + awooop_read_only_landing_items = iwooos_projection["awooop_read_only_landing_readiness_items"] + assert_equal( + "iwooos_projection.awooop_read_only_landing_readiness_items.item_ids", + [item["item_id"] for item in awooop_read_only_landing_items], + expected_awooop_read_only_landing_item_ids, + ) + assert_equal( + "iwooos_projection.awooop_read_only_landing_readiness_items.display_order", + [item["display_order"] for item in awooop_read_only_landing_items], + list(range(1, len(expected_awooop_read_only_landing_item_ids) + 1)), + ) + assert_equal( + "iwooos_projection.awooop_read_only_landing_readiness_items.current_states", + [item["current_state"] for item in awooop_read_only_landing_items], + [ + "ready_for_read_only_intake", + "ready_for_read_only_intake", + "ready_for_read_only_intake", + "ready_for_read_only_intake", + "ready_for_read_only_intake", + "pending_production_consumption", + ], + ) + assert_equal( + "iwooos_projection.awooop_read_only_landing_readiness_items.landing_dependencies", + [item["landing_dependency"] for item in awooop_read_only_landing_items], + [ + "security_mirror_status_rollup_snapshot", + "evidence_refs", + "guard_checks", + "security_mirror_route_groups", + "forbidden_outputs", + "awooop_mainline_consumption", + ], + ) + for item in awooop_read_only_landing_items: + assert_equal( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.display_mode", + item["display_mode"], + "awooop_read_only_landing_readiness_only", + ) + assert_equal( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.headline_percent_delta", + item["headline_percent_delta"], + 0, + ) + assert_false( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.production_landing_enabled", + item["production_landing_enabled"], + ) + assert_false( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.execution_router_linked", + item["execution_router_linked"], + ) + assert_false( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.progress_change_applied", + item["progress_change_applied"], + ) + assert_false( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.runtime_execution_authorized", + item["runtime_execution_authorized"], + ) + assert_false( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.action_buttons_allowed", + item["action_buttons_allowed"], + ) + assert_true( + f"iwooos_projection.awooop_read_only_landing_readiness_items.{item['item_id']}.not_authorization", + item["not_authorization"], + ) expected_progress_hold_movement_gate_ids = [ "progress_hold_owner_response_accepted", "progress_hold_redacted_payload_ingested", @@ -4332,6 +4416,7 @@ def validate(root: Path) -> None: for output in [ "display_security_posture", "display_progress_estimate", + "display_awooop_read_only_landing_readiness", "display_progress_hold_movement_gates", "display_progress_acceleration_lanes", "display_owner_response_next_action_focus", @@ -4530,6 +4615,12 @@ def validate(root: Path) -> None: "collect_owner_decision_from_human_record_owner_review_preparation_checklist", "create_host_owner_decision_record_from_human_record_owner_review_preparation_checklist", "open_runtime_gate_from_human_record_owner_review_preparation_checklist", + "treat_awooop_landing_readiness_as_production_consumption", + "enable_awooop_execution_router_from_landing_readiness", + "mark_production_landing_enabled_from_readiness", + "create_action_button_from_awooop_landing_readiness", + "skip_guard_from_awooop_landing_readiness", + "mark_progress_changed_from_awooop_landing_readiness", "treat_progress_hold_gate_as_percent_increase", "increase_headline_without_gate_evidence", "mark_owner_response_received_from_hold_gate",