feat(web): add IwoooS writeup review

This commit is contained in:
Your Name
2026-05-20 00:45:16 +08:00
parent 466c4ecd31
commit 35d72a8a68
11 changed files with 553 additions and 7 deletions

View File

@@ -1930,6 +1930,49 @@
"field": "runtime gate pointer; active gates=0"
}
}
},
"hostOwnerDecisionRecordWriteupReview": {
"title": "Host Owner Decision Record Write-Up Review Checklist",
"subtitle": "Write-up packets still require read-only review. This only shows whether formal decision record write-up fields are readable and does not mark write-up completed, create or accept decision records, or open runtime gates.",
"checkLabel": "Write-up review",
"guardLabel": "No upgrade",
"items": {
"decisionSummaryReadable": {
"title": "Decision summary readable",
"body": "Confirm the write-up only organizes the human owner decision, risk acceptance boundary, and no-execution statement without adding approval semantics.",
"guard": "write-up review only; completed=0"
},
"scopeExpiryComplete": {
"title": "Scope and expiry complete",
"body": "Confirm scope, exclusions, observation intent, and expiry are readable so the formal record scope is not ambiguous.",
"guard": "record created=false"
},
"scanModeLimitsExplicit": {
"title": "Scan mode limits explicit",
"body": "Confirm observe-only, future active scan, and credentialed scan limits are explicit while not becoming scan authorization.",
"guard": "scan authorized=false"
},
"credentialBoundaryMetadataOnly": {
"title": "Credential boundary metadata only",
"body": "Confirm credential handling still keeps only metadata, owner, and retention boundary without requesting or storing sensitive material.",
"guard": "secret collection=false"
},
"maintenanceRollbackLinked": {
"title": "Maintenance and rollback linked",
"body": "Confirm maintenance window candidates, constraints, rollback owner, recovery path, and human contact remain traceable.",
"guard": "host update=false"
},
"validationEvidenceLinked": {
"title": "Validation evidence linked",
"body": "Confirm post-check metrics, baseline, evidence pointer, and human acceptance condition are linked to the write-up.",
"guard": "accepted=0"
},
"runtimeGateStillSeparate": {
"title": "Runtime gate still separate",
"body": "Confirm the runtime gate pointer still points to a separate follow-up gate and write-up review does not open gates.",
"guard": "active runtime gates=0; action buttons=false"
}
}
}
},
"tickets": {

View File

@@ -1931,6 +1931,49 @@
"field": "runtime gate pointeractive gates=0"
}
}
},
"hostOwnerDecisionRecordWriteupReview": {
"title": "主機 Owner Decision Record Write-Up Review Checklist",
"subtitle": "Write-up packets 後仍需要只讀核對。這裡只顯示正式 decision record 撰寫欄位是否可讀,不會標記 write-up completed、不會建立或接受 decision record、不會開 runtime gate。",
"checkLabel": "Write-up review",
"guardLabel": "不可升級",
"items": {
"decisionSummaryReadable": {
"title": "Decision summary readable",
"body": "確認 write-up 只整理 owner 人工判斷、風險接受邊界與不執行聲明,不新增批准語義。",
"guard": "write-up review onlycompleted=0"
},
"scopeExpiryComplete": {
"title": "Scope and expiry complete",
"body": "確認 scope、排除範圍、觀察目的與到期時間可讀避免正式紀錄範圍不清。",
"guard": "record created=false"
},
"scanModeLimitsExplicit": {
"title": "Scan mode limits explicit",
"body": "確認 observe-only、future active scan 與 credentialed scan 的限制條件明確,且不代表掃描授權。",
"guard": "scan authorized=false"
},
"credentialBoundaryMetadataOnly": {
"title": "Credential boundary metadata only",
"body": "確認 credential handling 仍只保留 metadata、owner 與保存邊界,不要求或保存敏感素材。",
"guard": "secret collection=false"
},
"maintenanceRollbackLinked": {
"title": "Maintenance and rollback linked",
"body": "確認維護窗口候選、限制條件、rollback owner、復原路徑與人工聯絡點都可追。",
"guard": "host update=false"
},
"validationEvidenceLinked": {
"title": "Validation evidence linked",
"body": "確認 post-check metrics、baseline、evidence pointer 與人工驗收條件已連到 write-up。",
"guard": "accepted=0"
},
"runtimeGateStillSeparate": {
"title": "Runtime gate still separate",
"body": "確認 runtime gate pointer 仍指向獨立 follow-up gatewrite-up review 不會開 gate。",
"guard": "active runtime gates=0action buttons=false"
}
}
}
},
"tickets": {

View File

@@ -186,6 +186,13 @@ type HostOwnerDecisionRecordWriteupPacket = {
tone: 'steady' | 'warn' | 'locked'
}
type HostOwnerDecisionRecordWriteupReviewItem = {
key: string
check: string
icon: typeof ShieldCheck
tone: 'steady' | 'warn' | 'locked'
}
const postureMetrics: PostureMetric[] = [
{ key: 'overall', value: '58%', tone: 'warn' },
{ key: 'framework', value: '80-85%', tone: 'steady' },
@@ -437,6 +444,16 @@ const hostOwnerDecisionRecordWriteupPackets: HostOwnerDecisionRecordWriteupPacke
{ key: 'runtimeGatePointerWriteup', packet: 'WU7', icon: ShieldCheck, tone: 'locked' },
]
const hostOwnerDecisionRecordWriteupReviewItems: HostOwnerDecisionRecordWriteupReviewItem[] = [
{ key: 'decisionSummaryReadable', check: 'WR1', icon: ClipboardCheck, tone: 'warn' },
{ key: 'scopeExpiryComplete', check: 'WR2', icon: Radar, tone: 'warn' },
{ key: 'scanModeLimitsExplicit', check: 'WR3', icon: Activity, tone: 'locked' },
{ key: 'credentialBoundaryMetadataOnly', check: 'WR4', icon: Lock, tone: 'locked' },
{ key: 'maintenanceRollbackLinked', check: 'WR5', icon: Clock3, tone: 'warn' },
{ key: 'validationEvidenceLinked', check: 'WR6', icon: CheckCircle2, tone: 'warn' },
{ key: 'runtimeGateStillSeparate', check: 'WR7', icon: ShieldCheck, tone: 'locked' },
]
const evidenceItems = [
'iwooos-posture-projection.snapshot.json',
'security-rollout-policy.snapshot.json',
@@ -1135,6 +1152,34 @@ function HostOwnerDecisionRecordWriteupCard({ item }: { item: HostOwnerDecisionR
)
}
function HostOwnerDecisionRecordWriteupReviewCard({ item }: { item: HostOwnerDecisionRecordWriteupReviewItem }) {
const t = useTranslations('iwooos.hostOwnerDecisionRecordWriteupReview')
const Icon = item.icon
return (
<div style={{ ...band, minHeight: 190, padding: 16 }}>
<div style={{ display: 'flex', alignItems: 'center', justifyContent: 'space-between', gap: 12 }}>
<div style={{ display: 'flex', alignItems: 'center', gap: 9 }}>
<Icon size={18} color={toneColors[item.tone]} />
<span style={{ fontSize: 11, color: '#87867f' }}>{t('checkLabel')}</span>
</div>
<span style={{ fontSize: 11, color: '#9b978b' }}>{item.check}</span>
</div>
<h2 style={{ fontSize: 14, margin: '12px 0 6px', color: '#141413' }}>
{t(`items.${item.key}.title` as never)}
</h2>
<p style={{ fontSize: 12, lineHeight: 1.55, color: '#6f6d66', margin: 0 }}>
{t(`items.${item.key}.body` as never)}
</p>
<div style={{ marginTop: 10, display: 'grid', gap: 5 }}>
<div style={{ fontSize: 11, color: '#87867f' }}>{t('guardLabel')}</div>
<div style={{ fontSize: 11, color: toneColors[item.tone], lineHeight: 1.45 }}>
{t(`items.${item.key}.guard` as never)}
</div>
</div>
</div>
)
}
export default function IwoooSPage({ params }: { params: { locale: string } }) {
const t = useTranslations('iwooos')
@@ -1527,6 +1572,26 @@ export default function IwoooSPage({ params }: { params: { locale: string } }) {
</div>
</section>
<section style={{ marginBottom: 14 }}>
<div style={{ marginBottom: 14 }}>
<h2 style={{ fontSize: 16, margin: 0 }}>{t('hostOwnerDecisionRecordWriteupReview.title')}</h2>
<p style={{ fontSize: 12, color: '#6f6d66', margin: '6px 0 0', lineHeight: 1.55 }}>
{t('hostOwnerDecisionRecordWriteupReview.subtitle')}
</p>
</div>
<div
style={{
display: 'grid',
gridTemplateColumns: 'repeat(auto-fit, minmax(210px, 1fr))',
gap: 12,
}}
>
{hostOwnerDecisionRecordWriteupReviewItems.map(item => (
<HostOwnerDecisionRecordWriteupReviewCard key={item.key} item={item} />
))}
</div>
</section>
<section
style={{
display: 'grid',

View File

@@ -1,3 +1,17 @@
## 2026-05-20 | 資安供應鏈 S2.30IwoooS Host Owner Decision Record Write-Up Review Checklist
**背景**S2.29 已把正式 decision record 撰寫欄位顯示出來;本輪補上 write-up packets 後的只讀核對項,避免使用者把欄位可見誤讀成 write-up 已完成、正式 decision record 已建立或已接受。
**完成**
- `/iwooos` 新增「主機 Owner Decision Record Write-Up Review Checklist」顯示 decision summary readable、scope and expiry complete、scan mode limits explicit、credential boundary metadata only、maintenance and rollback linked、validation evidence linked、runtime gate still separate 七個只讀核對項。
- `iwooos_posture_projection_v1` schema / snapshot 新增 `host_owner_decision_record_writeup_review_checklist_items``host_owner_decision_record_writeup_review_checklist_item_count=7`,每個 check 固定 `display_mode=owner_decision_record_writeup_review_checklist_only``decision_record_writeup_review_passed_count=0``decision_record_writeup_completed_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``raw_payload_allowed=false``secret_value_collection_allowed=false``runtime_execution_authorized=false``action_buttons_allowed=false``not_authorization=true`
- `security-mirror-progress-guard.py` 開始驗證七個 host owner decision record write-up review checklist items、順序、review conditions以及 review passed / write-up completed / decision record / owner decision / approval record / runtime gate / raw payload / secret value / runtime / action button 仍全部鎖住。
- `security_mirror_status_rollup_v1` micro progress ledger 新增 `s2_30_iwooos_host_owner_decision_record_writeup_review_checklist`headline progress 仍維持 58%。
**仍禁止**
- host owner decision record write-up review checklist 不代表 review passed、write-up completed、decision record created、owner decision received / accepted、approved、approval record created、runtime gate opened、raw payload ingestion、secret value collection、active scan、credentialed scan、Kali `/execute`、SSH 登入、主機變更、Kali 更新或 blocking control。
- 真正人工 owner decision、正式決策紀錄、批准與後續 runtime gate 仍需脫敏 evidence、人工簽核與獨立 runtime gate。
## 2026-05-20 | 資安供應鏈 S2.29IwoooS Host Owner Decision Record Write-Up Packets
**背景**S2.28 已把 decision record draft review 後的只讀 outcome lanes 顯示出來;本輪補上 ready for write-up 後的正式 decision record 撰寫欄位,避免使用者把 write-up candidate 誤讀成正式紀錄已完成、已接受或已批准。

View File

@@ -36,6 +36,7 @@
"host_owner_decision_record_draft_review_checklist_items",
"host_owner_decision_record_draft_review_outcome_lanes",
"host_owner_decision_record_writeup_packets",
"host_owner_decision_record_writeup_review_checklist_items",
"frontend_surface_coverage_groups",
"evidence_refs",
"allowed_frontend_outputs",
@@ -111,6 +112,7 @@
"host_owner_decision_record_draft_review_checklist_item_count",
"host_owner_decision_record_draft_review_outcome_lane_count",
"host_owner_decision_record_writeup_packet_count",
"host_owner_decision_record_writeup_review_checklist_item_count",
"action_buttons_allowed"
],
"properties": {
@@ -244,6 +246,10 @@
"host_owner_decision_record_writeup_packet_count": {
"type": "integer",
"const": 7
},
"host_owner_decision_record_writeup_review_checklist_item_count": {
"type": "integer",
"const": 7
}
},
"additionalProperties": false
@@ -1979,6 +1985,99 @@
},
"additionalProperties": false
}
},
"host_owner_decision_record_writeup_review_checklist_items": {
"type": "array",
"minItems": 7,
"items": {
"type": "object",
"required": [
"check_id",
"display_order",
"source_packet_id",
"review_condition",
"display_mode",
"decision_record_writeup_review_passed_count",
"decision_record_writeup_completed_count",
"decision_record_created",
"owner_decision_received_count",
"owner_decision_accepted_count",
"owner_approval_record_created",
"runtime_gate_opened",
"raw_payload_allowed",
"secret_value_collection_allowed",
"runtime_execution_authorized",
"action_buttons_allowed",
"not_authorization"
],
"properties": {
"check_id": {
"type": "string"
},
"display_order": {
"type": "integer",
"minimum": 1
},
"source_packet_id": {
"type": "string"
},
"review_condition": {
"type": "string"
},
"display_mode": {
"const": "owner_decision_record_writeup_review_checklist_only"
},
"decision_record_writeup_review_passed_count": {
"type": "integer",
"const": 0
},
"decision_record_writeup_completed_count": {
"type": "integer",
"const": 0
},
"decision_record_created": {
"type": "boolean",
"const": false
},
"owner_decision_received_count": {
"type": "integer",
"const": 0
},
"owner_decision_accepted_count": {
"type": "integer",
"const": 0
},
"owner_approval_record_created": {
"type": "boolean",
"const": false
},
"runtime_gate_opened": {
"type": "boolean",
"const": false
},
"raw_payload_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

View File

@@ -57,6 +57,7 @@ IwoooS 首版只讀取或對齊以下已提交 evidence
25. 7 個 host owner decision record draft review checklist items顯示草稿欄位進入正式決策紀錄前仍需只讀核對的條件。
26. 7 個 host owner decision record draft review outcome lanes顯示草稿核對後的只讀結果分流。
27. 7 個 host owner decision record write-up packets顯示正式 decision record 撰寫欄位,但不建立 record、不標記 completed / accepted、不開 runtime gate。
28. 7 個 host owner decision record write-up review checklist items顯示正式撰寫欄位進入決策紀錄前仍需只讀核對的條件。
## 3.1 既有前端資安頁面整合
@@ -404,6 +405,24 @@ S2.29 將 ready for decision record write-up 後需要整理的正式撰寫欄
這個 write-up board 不代表 formal decision record 已完成、decision record 已建立、owner decision 已接受、資安批准已完成或 runtime gate 已開啟。它只讓 IwoooS 把正式撰寫欄位先說清楚,並保留後續人工批准與 runtime gate 的分離。
## 3.21 Host Owner Decision Record Write-Up Review Checklist
S2.30 將 write-up packets 後的核對條件拆成七個只讀 checklist items。這一層只回答「正式撰寫欄位是否可讀、可追、仍未升級成批准語義」不標記 review passed、不標記 write-up completed、不建立 decision record、不標記 accepted、不建立 approval record、不開 runtime gate。
| 順序 | Write-up review | 來源 packet | 核對條件 |
|------|-----------------|-------------|----------|
| 1 | Decision summary readable | decision summary write-up | decision summary、risk acceptance、no-execution statement readable |
| 2 | Scope and expiry complete | approved scope write-up | scope、exclusion、observation intent、expiry complete |
| 3 | Scan mode limits explicit | scan mode limits write-up | scan mode limits explicit and not authorization |
| 4 | Credential boundary metadata only | credential boundary write-up | metadata-only boundary and no secret collection |
| 5 | Maintenance and rollback linked | maintenance / rollback write-up | maintenance window、constraints、rollback、human contact linked |
| 6 | Validation evidence linked | validation evidence write-up | metrics、baseline、evidence、acceptance condition linked |
| 7 | Runtime gate still separate | runtime gate pointer write-up | runtime gate pointer separate and closed |
每個 review check 都固定 `display_mode=owner_decision_record_writeup_review_checklist_only``decision_record_writeup_review_passed_count=0``decision_record_writeup_completed_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``raw_payload_allowed=false``secret_value_collection_allowed=false``runtime_execution_authorized=false``action_buttons_allowed=false``not_authorization=true`
這個 checklist 不代表 write-up review 已通過、formal decision record 已完成、decision record 已建立、owner decision 已接受或 runtime gate 已開啟。它只讓 IwoooS 把正式 decision record 進入後續人審前的核對條件說清楚。
## 4. 仍禁止
IwoooS 不得提供下列輸出:
@@ -430,7 +449,8 @@ IwoooS 不得提供下列輸出:
20. 把 owner decision record draft review 當成 approval、標記 draft review passed、從 draft review 建立 decision record或從 draft review 開 runtime gate。
21. 把 owner decision record draft review outcome 當成 approval、標記 draft review outcome passed、從 draft review outcome 建立 decision record或從 draft review outcome 開 runtime gate。
22. 從 owner decision record write-up 建立 decision record、標記 write-up completed、標記 decision record accepted或從 write-up 開 runtime gate。
23.58% progress、contract count、mirror readiness 或前端可見狀態當成授權
23.owner decision record write-up review 當成 approval、標記 write-up review passed / completed、從 write-up review 建立 decision record或從 write-up review 開 runtime gate
24. 把 58% progress、contract count、mirror readiness 或前端可見狀態當成授權。
## 5. 驗證

View File

@@ -35,7 +35,7 @@
| Owner response validation | S4.13 已建立;四包 owner response 目前 received/accepted 皆為 04 條 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 attestationlatest local validation 為 `SOURCE_CONTROL_OWNER_RESPONSE_GUARD_OK`reviewer audit emitted 仍為 0不代表 owner response 已收到或任何執行授權 |
| Low-friction rollout policy | S1.3 已補 7 條 non-blocking escalation lanesLOW / 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 個既有前端資安相關頁面納入 projectionS2.11 已補 4 個 coverage groups 與 5 個 conflict controlsS2.12 已補 6 個只讀 operator journey stepsS2.13 已補 7 個 owner evidence readiness itemsS2.14 已補 3 個 host coverage itemsKali 112、開發主機 168、開發主機 111S2.15 已補 6 個 host action gate itemsS2.16 已補 7 個 host evidence readiness itemsS2.17 已補 7 個 host evidence collection order stepsS2.18 已補 7 個 host evidence intake preflight checksS2.19 已補 7 個 host evidence review outcome lanesS2.20 已補 7 個 host evidence review handoff packetsS2.21 已補 7 個 host evidence reviewer checklist itemsS2.22 已補 7 個 host evidence reviewer outcome lanesS2.23 已補 7 個 host owner decision candidate packetsS2.24 已補 7 個 host owner decision review checklist itemsS2.25 已補 7 個 host owner decision review outcome lanesS2.26 已補 7 個 host owner decision record draft packetsS2.27 已補 7 個 host owner decision record draft review checklist itemsS2.28 已補 7 個 host owner decision record draft review outcome lanesS2.29 已補 7 個 host owner decision record write-up packets仍不新增 action button |
| IwoooS posture projection | S2.9 已新增 `iwooos_posture_projection_v1`S2.10 已把 10 個既有前端資安相關頁面納入 projectionS2.11 已補 4 個 coverage groups 與 5 個 conflict controlsS2.12 已補 6 個只讀 operator journey stepsS2.13 已補 7 個 owner evidence readiness itemsS2.14 已補 3 個 host coverage itemsKali 112、開發主機 168、開發主機 111S2.15 已補 6 個 host action gate itemsS2.16 已補 7 個 host evidence readiness itemsS2.17 已補 7 個 host evidence collection order stepsS2.18 已補 7 個 host evidence intake preflight checksS2.19 已補 7 個 host evidence review outcome lanesS2.20 已補 7 個 host evidence review handoff packetsS2.21 已補 7 個 host evidence reviewer checklist itemsS2.22 已補 7 個 host evidence reviewer outcome lanesS2.23 已補 7 個 host owner decision candidate packetsS2.24 已補 7 個 host owner decision review checklist itemsS2.25 已補 7 個 host owner decision review outcome lanesS2.26 已補 7 個 host owner decision record draft packetsS2.27 已補 7 個 host owner decision record draft review checklist itemsS2.28 已補 7 個 host owner decision record draft review outcome lanesS2.29 已補 7 個 host owner decision record write-up packetsS2.30 已補 7 個 host owner decision record write-up review checklist items仍不新增 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` |
@@ -113,6 +113,7 @@
| S2.27 IwoooS host owner decision record draft review checklist | framework detail | 0 | 只顯示 decision record 草稿進人審前的七個核對項review passed、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 |
| S2.28 IwoooS host owner decision record draft review outcome lanes | framework detail | 0 | 只顯示 decision record 草稿核對後的七個只讀結果分流review passed、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 |
| S2.29 IwoooS host owner decision record write-up packets | framework detail | 0 | 只顯示 formal decision record 需要的七個撰寫欄位write-up completed、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 |
| S2.30 IwoooS host owner decision record write-up review checklist | framework detail | 0 | 只顯示 formal decision record 撰寫欄位進人審前的七個只讀核對項review passed、write-up completed、decision record created、accepted count、approval record、runtime gate、raw payload、secret value、runtime execution 與 action button 仍全部鎖住 |
headline 進度要再往上,至少需要下列任一高層 gate 有實質 evidence

View File

@@ -4,7 +4,7 @@
|------|------|
| 日期 | 2026-05-17 |
| 狀態 | S0/S1 read-only evidence 建置中 |
| 本階段完成 | 資安供應鏈 contract manifest + Source Control Approval Board + Draft Reconcile Plan + Ref Detail Diff + Ref Truth Classification + Source Control Ref Truth Owner Response 收件包 + GitHub Primary Readiness Gate + GitHub Primary Rollback ADR + GitHub Target Owner Decision Response 收件包 + Gitea 認證清冊匯出請求 + Gitea 認證清冊匯入驗收契約 + Gitea 清冊覆蓋 Owner Attestation + Gitea Owner Attestation Approval Lane 對齊 + Gitea Owner Attestation Response 收件包 + Workflow / Secret Name Inventory + Workflow / Secret Name Local Evidence + Workflow / Secret Name Redacted Export Request + 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 |
| 本階段完成 | 資安供應鏈 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 |
| 原則 | 低摩擦分階段文件、schema、read-only evidence 優先;不做 runtime enforcement、不切 primary |
## 0. 本階段完成後整體進度
@@ -89,6 +89,7 @@ python3 scripts/security/security-mirror-progress-guard.py
| S2.27 IwoooS host owner decision record draft review checklist | 已完成草案,將 scope statement complete、scan mode still not approval、credential boundary metadata only、maintenance constraints readable、rollback owner readable、validation metrics linked 與 runtime gate still closed 顯示成七個只讀草稿核對項 | 0 |
| S2.28 IwoooS host owner decision record draft review outcome lanes | 已完成草案,將 ready for write-up、scope draft incomplete、scan mode ambiguous、credential boundary incomplete、maintenance constraints incomplete、rollback owner incomplete 與 runtime gate still required 顯示成七個只讀草稿核對結果分流 | 0 |
| S2.29 IwoooS host owner decision record write-up packets | 已完成草案,將 decision summary、approved scope、scan mode limits、credential boundary、maintenance / rollback、validation evidence 與 runtime gate pointer 顯示成七個只讀正式撰寫欄位 | 0 |
| S2.30 IwoooS host owner decision record write-up review checklist | 已完成草案,將 decision summary readable、scope / expiry complete、scan mode limits explicit、credential metadata-only、maintenance / rollback linked、validation evidence linked 與 runtime gate separate 顯示成七個只讀核對項 | 0 |
headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner response 收到並通過脫敏驗收,或人工批准後出現 active runtime gate、redacted payload ingestion、GitHub primary readiness 這類落地 evidence。
@@ -137,6 +138,7 @@ headline 要再往上,需要 S4.9 / S4.10 / S4.11 / S4.12 任一 owner respons
| S2.27 IwoooS Host Owner Decision Record Draft Review Checklist | 完成草案 | `/iwooos` 新增主機 owner decision record draft review checklist顯示 scope statement complete、scan mode still not approval、credential boundary metadata only、maintenance constraints readable、rollback owner readable、validation metrics linked、runtime gate still closed 七個核對項 | 使用者能理解 formal decision record 草稿進人審前仍需核對哪些條件;仍不標記 review passed、不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 |
| S2.28 IwoooS Host Owner Decision Record Draft Review Outcome Lanes | 完成草案 | `/iwooos` 新增主機 owner decision record draft review outcome lanes顯示 ready for decision record write-up、scope draft incomplete、scan mode ambiguous、credential boundary incomplete、maintenance constraints incomplete、rollback owner incomplete、runtime gate still required 七個分流 | 使用者能理解 draft review 後下一步;仍不標記 review passed、不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 |
| S2.29 IwoooS Host Owner Decision Record Write-Up Packets | 完成草案 | `/iwooos` 新增主機 owner decision record write-up packets顯示 decision summary、approved scope、scan mode limits、credential boundary、maintenance / rollback、validation evidence、runtime gate pointer 七個正式撰寫欄位 | 使用者能理解 ready for write-up 仍只是欄位整理;仍不標記 write-up completed、不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 |
| S2.30 IwoooS Host Owner Decision Record Write-Up Review Checklist | 完成草案 | `/iwooos` 新增主機 owner decision record write-up review checklist顯示 decision summary readable、scope / expiry complete、scan mode limits explicit、credential metadata-only、maintenance / rollback linked、validation evidence linked、runtime gate separate 七個核對項 | 使用者能理解 write-up packets 後仍需只讀核對;仍不標記 review passed、不標記 write-up completed、不建立 decision record、不標記 accepted、不開 runtime gate、不執行主機動作 |
| S3 approval gate | 進行中 | `security_approval_gate_v1` 已建立 8 個人工 gate items7 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 可稽核決策,不可把決策當執行 |

View File

@@ -55,7 +55,8 @@
"host_owner_decision_record_draft_packet_count": 7,
"host_owner_decision_record_draft_review_checklist_item_count": 7,
"host_owner_decision_record_draft_review_outcome_lane_count": 7,
"host_owner_decision_record_writeup_packet_count": 7
"host_owner_decision_record_writeup_packet_count": 7,
"host_owner_decision_record_writeup_review_checklist_item_count": 7
},
"progress": {
"overall_percent": 58,
@@ -147,7 +148,8 @@
"display_host_owner_decision_record_draft_packets",
"display_host_owner_decision_record_draft_review_checklist",
"display_host_owner_decision_record_draft_review_outcome_lanes",
"display_host_owner_decision_record_writeup_packets"
"display_host_owner_decision_record_writeup_packets",
"display_host_owner_decision_record_writeup_review_checklist"
],
"forbidden_frontend_outputs": [
"add_scan_button",
@@ -214,7 +216,12 @@
"create_host_owner_decision_record_from_writeup",
"mark_host_owner_decision_record_writeup_completed",
"mark_host_owner_decision_record_accepted_from_writeup",
"open_runtime_gate_from_owner_decision_record_writeup"
"open_runtime_gate_from_owner_decision_record_writeup",
"treat_host_owner_decision_record_writeup_review_as_approval",
"mark_host_owner_decision_record_writeup_review_passed",
"mark_host_owner_decision_record_writeup_review_completed",
"create_host_owner_decision_record_from_writeup_review",
"open_runtime_gate_from_owner_decision_record_writeup_review"
],
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
@@ -2721,5 +2728,140 @@
"action_buttons_allowed": false,
"not_authorization": true
}
],
"host_owner_decision_record_writeup_review_checklist_items": [
{
"check_id": "host_decision_record_summary_writeup_review_check",
"display_order": 1,
"source_packet_id": "host_decision_record_summary_writeup_packet",
"review_condition": "decision_summary_risk_acceptance_and_no_execution_statement_readable",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_scope_writeup_review_check",
"display_order": 2,
"source_packet_id": "host_decision_record_scope_writeup_packet",
"review_condition": "scope_exclusion_observation_intent_and_expiry_complete",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_scan_mode_limits_writeup_review_check",
"display_order": 3,
"source_packet_id": "host_decision_record_scan_mode_limits_writeup_packet",
"review_condition": "scan_mode_limits_explicit_and_not_authorization",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_credential_boundary_writeup_review_check",
"display_order": 4,
"source_packet_id": "host_decision_record_credential_boundary_writeup_packet",
"review_condition": "credential_boundary_metadata_only_and_no_secret_collection",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_maintenance_rollback_writeup_review_check",
"display_order": 5,
"source_packet_id": "host_decision_record_maintenance_rollback_writeup_packet",
"review_condition": "maintenance_window_constraints_rollback_and_human_contact_linked",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_validation_evidence_writeup_review_check",
"display_order": 6,
"source_packet_id": "host_decision_record_validation_evidence_writeup_packet",
"review_condition": "validation_metrics_baseline_evidence_and_acceptance_condition_linked",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
},
{
"check_id": "host_decision_record_runtime_gate_writeup_review_check",
"display_order": 7,
"source_packet_id": "host_decision_record_runtime_gate_pointer_writeup_packet",
"review_condition": "runtime_gate_pointer_separate_and_closed",
"display_mode": "owner_decision_record_writeup_review_checklist_only",
"decision_record_writeup_review_passed_count": 0,
"decision_record_writeup_completed_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,
"raw_payload_allowed": false,
"secret_value_collection_allowed": false,
"runtime_execution_authorized": false,
"action_buttons_allowed": false,
"not_authorization": true
}
]
}

View File

@@ -850,6 +850,16 @@
"runtime_delta": false,
"execution_authorized": false,
"not_authorization": true
},
{
"delta_id": "s2_30_iwooos_host_owner_decision_record_writeup_review_checklist",
"display_order": 59,
"progress_axis": "framework_detail",
"headline_percent_delta": 0,
"framework_delta_visible": true,
"runtime_delta": false,
"execution_authorized": false,
"not_authorization": true
}
],
"next_safe_actions": [
@@ -1228,7 +1238,8 @@
"S4.12 只新增 workflow / secret 名稱 owner response request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks 與收件包owner_response_audit_event_template_count=3、owner_response_redaction_example_count=5、owner_response_collection_check_count=6、intake_preflight_check_count=6、audit_events_emitted=0、response_template_count=5、received_response_count=0、accepted_response_count=0不把 request packet、template status ledger、audit event templates、redaction examples、collection checks、intake preflight checks 或 response packet 當 secret value collection、workflow modification、GitHub hosted runner enablement 或 GitHub primary approval。",
"S4.13 只新增 owner response validation rollup、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 與 parallel session recovery outcome lanesresponse_packet_count=4、template_count=22、received_response_count=0、accepted_response_count=0、cross_packet_check_count=10、owner_response_evidence_routing_rule_count=6、owner_response_validation_display_section_count=8、owner_response_validation_state_transition_rule_count=7、owner_response_validation_reviewer_checklist_count=9、owner_response_validation_reviewer_outcome_lane_count=7、owner_response_validation_reviewer_audit_event_template_count=4、owner_response_validation_reviewer_audit_display_section_count=5、owner_response_validation_reviewer_audit_collection_check_count=6、owner_response_validation_reviewer_audit_redaction_example_count=5、owner_response_validation_reviewer_audit_retention_rule_count=5、owner_response_validation_reviewer_audit_retention_check_count=6、owner_response_validation_reviewer_audit_handoff_packet_count=6、owner_response_validation_reviewer_audit_handoff_check_count=6、owner_response_validation_parallel_session_sync_check_count=6、owner_response_validation_parallel_session_conflict_lane_count=6、owner_response_validation_parallel_session_recovery_check_count=6、owner_response_validation_parallel_session_recovery_outcome_lane_count=7、reviewer_audit_events_emitted=0、next_collection_candidate=S4.9,不把 rollup、routing、display sections、state transition rules、reviewer checklist、reviewer outcome lanes、reviewer audit 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 / checks、parallel session sync checks、parallel session conflict lanes、parallel session recovery checks 或 parallel session recovery outcome lanes 當 approval、runtime gate、production ingestion 或 execution authorization。",
"S1.3 只新增 7 條 low-friction non-blocking escalation lanesnon_blocking_escalation_lane_count=7、owner_review_required_before_blocking=true、runtime_blocking_allowed=false不把 LOW / MEDIUM、缺 owner response、partial mirror、source-control drift、Kali observe finding、workflow / secret name gap 或 headline holding 直接變 blocking gate、runtime enforcement 或 action button。",
"S2.29 只新增 IwoooS host owner decision record write-up packetshost_owner_decision_record_writeup_packet_count=7、decision_record_writeup_completed_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不把 write-up packet 當正式決策紀錄、完成、接受、批准或 runtime gate。"
"S2.29 只新增 IwoooS host owner decision record write-up packetshost_owner_decision_record_writeup_packet_count=7、decision_record_writeup_completed_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不把 write-up packet 當正式決策紀錄、完成、接受、批准或 runtime gate。",
"S2.30 只新增 IwoooS host owner decision record write-up review checklisthost_owner_decision_record_writeup_review_checklist_item_count=7、decision_record_writeup_review_passed_count=0、decision_record_writeup_completed_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不把 write-up review 當正式決策紀錄、完成、接受、批准或 runtime gate。"
],
"forbidden_actions": [
"start_kali_scan",

View File

@@ -181,6 +181,7 @@ def validate(root: Path) -> None:
"s2_27_iwooos_host_owner_decision_record_draft_review_checklist",
"s2_28_iwooos_host_owner_decision_record_draft_review_outcome_lanes",
"s2_29_iwooos_host_owner_decision_record_writeup_packets",
"s2_30_iwooos_host_owner_decision_record_writeup_review_checklist",
]
assert_equal(
"progress_delta_ledger.delta_ids",
@@ -488,6 +489,15 @@ def validate(root: Path) -> None:
"host_decision_record_validation_evidence_writeup_packet",
"host_decision_record_runtime_gate_pointer_writeup_packet",
]
expected_iwooos_host_owner_decision_record_writeup_review_checklist_item_ids = [
"host_decision_record_summary_writeup_review_check",
"host_decision_record_scope_writeup_review_check",
"host_decision_record_scan_mode_limits_writeup_review_check",
"host_decision_record_credential_boundary_writeup_review_check",
"host_decision_record_maintenance_rollback_writeup_review_check",
"host_decision_record_validation_evidence_writeup_review_check",
"host_decision_record_runtime_gate_writeup_review_check",
]
assert_equal(
"iwooos_projection.summary.frontend_surface_coverage_group_count",
iwooos_projection["summary"]["frontend_surface_coverage_group_count"],
@@ -588,6 +598,11 @@ def validate(root: Path) -> None:
iwooos_projection["summary"]["host_owner_decision_record_writeup_packet_count"],
len(expected_iwooos_host_owner_decision_record_writeup_packet_ids),
)
assert_equal(
"iwooos_projection.summary.host_owner_decision_record_writeup_review_checklist_item_count",
iwooos_projection["summary"]["host_owner_decision_record_writeup_review_checklist_item_count"],
len(expected_iwooos_host_owner_decision_record_writeup_review_checklist_item_ids),
)
iwooos_progress = iwooos_projection["progress"]
assert_equal("iwooos_projection.progress.overall_percent", iwooos_progress["overall_percent"], progress["overall_percent"])
assert_equal(
@@ -1847,6 +1862,91 @@ def validate(root: Path) -> None:
f"iwooos_projection.host_owner_decision_record_writeup_packets.{item['packet_id']}.not_authorization",
item["not_authorization"],
)
iwooos_host_owner_decision_record_writeup_review_checklist_items = iwooos_projection[
"host_owner_decision_record_writeup_review_checklist_items"
]
assert_equal(
"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.ids",
[item["check_id"] for item in iwooos_host_owner_decision_record_writeup_review_checklist_items],
expected_iwooos_host_owner_decision_record_writeup_review_checklist_item_ids,
)
assert_equal(
"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.display_order",
[item["display_order"] for item in iwooos_host_owner_decision_record_writeup_review_checklist_items],
list(range(1, len(expected_iwooos_host_owner_decision_record_writeup_review_checklist_item_ids) + 1)),
)
expected_iwooos_host_owner_decision_record_writeup_review_conditions = [
"decision_summary_risk_acceptance_and_no_execution_statement_readable",
"scope_exclusion_observation_intent_and_expiry_complete",
"scan_mode_limits_explicit_and_not_authorization",
"credential_boundary_metadata_only_and_no_secret_collection",
"maintenance_window_constraints_rollback_and_human_contact_linked",
"validation_metrics_baseline_evidence_and_acceptance_condition_linked",
"runtime_gate_pointer_separate_and_closed",
]
assert_equal(
"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.review_conditions",
[item["review_condition"] for item in iwooos_host_owner_decision_record_writeup_review_checklist_items],
expected_iwooos_host_owner_decision_record_writeup_review_conditions,
)
for item in iwooos_host_owner_decision_record_writeup_review_checklist_items:
assert_equal(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.display_mode",
item["display_mode"],
"owner_decision_record_writeup_review_checklist_only",
)
assert_equal(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.decision_record_writeup_review_passed_count",
item["decision_record_writeup_review_passed_count"],
0,
)
assert_equal(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.decision_record_writeup_completed_count",
item["decision_record_writeup_completed_count"],
0,
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.decision_record_created",
item["decision_record_created"],
)
assert_equal(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.owner_decision_received_count",
item["owner_decision_received_count"],
0,
)
assert_equal(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.owner_decision_accepted_count",
item["owner_decision_accepted_count"],
0,
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.owner_approval_record_created",
item["owner_approval_record_created"],
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.runtime_gate_opened",
item["runtime_gate_opened"],
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.raw_payload_allowed",
item["raw_payload_allowed"],
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.secret_value_collection_allowed",
item["secret_value_collection_allowed"],
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.runtime_execution_authorized",
item["runtime_execution_authorized"],
)
assert_false(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.action_buttons_allowed",
item["action_buttons_allowed"],
)
assert_true(
f"iwooos_projection.host_owner_decision_record_writeup_review_checklist_items.{item['check_id']}.not_authorization",
item["not_authorization"],
)
assert_equal(
"iwooos_projection.non_blocking_lane_ids",
iwooos_projection["non_blocking_lane_ids"],
@@ -1885,6 +1985,7 @@ def validate(root: Path) -> None:
"display_host_owner_decision_record_draft_review_checklist",
"display_host_owner_decision_record_draft_review_outcome_lanes",
"display_host_owner_decision_record_writeup_packets",
"display_host_owner_decision_record_writeup_review_checklist",
"display_evidence_refs",
"display_forbidden_actions",
]:
@@ -1950,6 +2051,11 @@ def validate(root: Path) -> None:
"mark_host_owner_decision_record_writeup_completed",
"mark_host_owner_decision_record_accepted_from_writeup",
"open_runtime_gate_from_owner_decision_record_writeup",
"treat_host_owner_decision_record_writeup_review_as_approval",
"mark_host_owner_decision_record_writeup_review_passed",
"mark_host_owner_decision_record_writeup_review_completed",
"create_host_owner_decision_record_from_writeup_review",
"open_runtime_gate_from_owner_decision_record_writeup_review",
"apply_runtime_blocking_control",
"switch_github_primary",
"production_deploy",