docs(security): add IwoooS posture projection contract
This commit is contained in:
248
docs/schemas/iwooos_posture_projection_v1.schema.json
Normal file
248
docs/schemas/iwooos_posture_projection_v1.schema.json
Normal file
@@ -0,0 +1,248 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "urn:awoooi:iwooos-posture-projection-v1",
|
||||
"title": "IwoooS 前端資安態勢投影契約 v1",
|
||||
"description": "定義 IwoooS 如何以 read-only / mirror-only 方式呈現資安網態勢、進度、證據與禁止動作。此契約不授權 scan、execute、repo、refs、workflow、secret、runner、deploy 或 primary switch。",
|
||||
"type": "object",
|
||||
"required": [
|
||||
"schema_version",
|
||||
"status",
|
||||
"date",
|
||||
"product_id",
|
||||
"display_name",
|
||||
"mode",
|
||||
"source_paths",
|
||||
"summary",
|
||||
"progress",
|
||||
"posture_pillars",
|
||||
"non_blocking_lane_ids",
|
||||
"evidence_refs",
|
||||
"allowed_frontend_outputs",
|
||||
"forbidden_frontend_outputs",
|
||||
"runtime_execution_authorized",
|
||||
"action_buttons_allowed",
|
||||
"not_authorization"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"const": "iwooos_posture_projection_v1"
|
||||
},
|
||||
"status": {
|
||||
"type": "string",
|
||||
"enum": ["draft"]
|
||||
},
|
||||
"date": {
|
||||
"type": "string"
|
||||
},
|
||||
"product_id": {
|
||||
"const": "iwooos"
|
||||
},
|
||||
"display_name": {
|
||||
"const": "IwoooS"
|
||||
},
|
||||
"mode": {
|
||||
"type": "string",
|
||||
"enum": ["mirror_only"]
|
||||
},
|
||||
"source_paths": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"summary": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"route_path",
|
||||
"nav_entry_added",
|
||||
"command_palette_entry_added",
|
||||
"contract_count",
|
||||
"active_runtime_gate_count",
|
||||
"approval_queue_total",
|
||||
"pending_approval_count",
|
||||
"block_candidate_count",
|
||||
"owner_response_validation_received_count",
|
||||
"owner_response_validation_accepted_count",
|
||||
"github_primary_ready_count",
|
||||
"action_buttons_allowed"
|
||||
],
|
||||
"properties": {
|
||||
"route_path": {
|
||||
"const": "/iwooos"
|
||||
},
|
||||
"nav_entry_added": {
|
||||
"type": "boolean",
|
||||
"const": true
|
||||
},
|
||||
"command_palette_entry_added": {
|
||||
"type": "boolean",
|
||||
"const": true
|
||||
},
|
||||
"contract_count": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"active_runtime_gate_count": {
|
||||
"type": "integer",
|
||||
"const": 0
|
||||
},
|
||||
"approval_queue_total": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"pending_approval_count": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"block_candidate_count": {
|
||||
"type": "integer",
|
||||
"minimum": 0
|
||||
},
|
||||
"owner_response_validation_received_count": {
|
||||
"type": "integer",
|
||||
"const": 0
|
||||
},
|
||||
"owner_response_validation_accepted_count": {
|
||||
"type": "integer",
|
||||
"const": 0
|
||||
},
|
||||
"github_primary_ready_count": {
|
||||
"type": "integer",
|
||||
"const": 0
|
||||
},
|
||||
"action_buttons_allowed": {
|
||||
"type": "boolean",
|
||||
"const": false
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"progress": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"overall_percent",
|
||||
"framework_percent_min",
|
||||
"framework_percent_max",
|
||||
"runtime_landing_percent_min",
|
||||
"runtime_landing_percent_max",
|
||||
"headline_status",
|
||||
"not_authorization"
|
||||
],
|
||||
"properties": {
|
||||
"overall_percent": {
|
||||
"type": "integer",
|
||||
"const": 58
|
||||
},
|
||||
"framework_percent_min": {
|
||||
"type": "integer",
|
||||
"const": 80
|
||||
},
|
||||
"framework_percent_max": {
|
||||
"type": "integer",
|
||||
"const": 85
|
||||
},
|
||||
"runtime_landing_percent_min": {
|
||||
"type": "integer",
|
||||
"const": 35
|
||||
},
|
||||
"runtime_landing_percent_max": {
|
||||
"type": "integer",
|
||||
"const": 40
|
||||
},
|
||||
"headline_status": {
|
||||
"const": "holding_until_owner_response_or_runtime_gate"
|
||||
},
|
||||
"not_authorization": {
|
||||
"type": "boolean",
|
||||
"const": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
},
|
||||
"posture_pillars": {
|
||||
"type": "array",
|
||||
"minItems": 4,
|
||||
"items": {
|
||||
"type": "object",
|
||||
"required": [
|
||||
"pillar_id",
|
||||
"display_order",
|
||||
"display_state",
|
||||
"source_contract",
|
||||
"display_mode",
|
||||
"runtime_execution_authorized",
|
||||
"not_authorization"
|
||||
],
|
||||
"properties": {
|
||||
"pillar_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_order": {
|
||||
"type": "integer",
|
||||
"minimum": 1
|
||||
},
|
||||
"display_state": {
|
||||
"type": "string"
|
||||
},
|
||||
"source_contract": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_mode": {
|
||||
"const": "posture_only"
|
||||
},
|
||||
"runtime_execution_authorized": {
|
||||
"type": "boolean",
|
||||
"const": false
|
||||
},
|
||||
"not_authorization": {
|
||||
"type": "boolean",
|
||||
"const": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
},
|
||||
"non_blocking_lane_ids": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"evidence_refs": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"allowed_frontend_outputs": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"forbidden_frontend_outputs": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string"
|
||||
}
|
||||
},
|
||||
"runtime_execution_authorized": {
|
||||
"type": "boolean",
|
||||
"const": false
|
||||
},
|
||||
"action_buttons_allowed": {
|
||||
"type": "boolean",
|
||||
"const": false
|
||||
},
|
||||
"not_authorization": {
|
||||
"type": "boolean",
|
||||
"const": true
|
||||
}
|
||||
},
|
||||
"additionalProperties": false
|
||||
}
|
||||
Reference in New Issue
Block a user