feat(governance): 新增 owner-approved fixture promotion gate
This commit is contained in:
@@ -0,0 +1,458 @@
|
||||
{
|
||||
"schema_version": "ai_agent_owner_approved_fixture_promotion_gate_v1",
|
||||
"generated_at": "2026-06-13T18:45:00+08:00",
|
||||
"program_status": {
|
||||
"overall_completion_percent": 100,
|
||||
"current_priority": "P2",
|
||||
"current_task_id": "P2-114",
|
||||
"next_task_id": "P2-115",
|
||||
"read_only_mode": true,
|
||||
"runtime_authority": "owner_approved_fixture_promotion_gate_only_no_live_read_or_write",
|
||||
"status_note": "P2-114 只把 P2-113 promotion gate 整理成 owner-approved fixture promotion package;不得 live read、不得寫 reviewer queue / result capture / Gateway / Telegram / production。"
|
||||
},
|
||||
"source_refs": [
|
||||
"docs/evaluations/ai_agent_runtime_readback_promotion_gate_2026-06-13.json",
|
||||
"docs/evaluations/ai_agent_runtime_readback_fixture_approval_2026-06-13.json",
|
||||
"docs/evaluations/ai_agent_owner_approved_result_capture_readback_2026-06-13.json",
|
||||
"docs/superpowers/specs/2026-04-15-MASTER-ai-autonomous-flywheel-v2.md#34-建立-runtime-readback-promotion-gate"
|
||||
],
|
||||
"prior_promotion_gate": {
|
||||
"schema_version": "ai_agent_runtime_readback_promotion_gate_v1",
|
||||
"promotion_lane_count": 5,
|
||||
"receipt_contract_count": 4,
|
||||
"reviewer_queue_preview_count": 4,
|
||||
"result_capture_preview_count": 4,
|
||||
"no_write_verifier_check_count": 5,
|
||||
"blocker_mapping_count": 5,
|
||||
"operator_action_count": 5,
|
||||
"owner_approval_received_count": 0,
|
||||
"promotion_execution_count": 0,
|
||||
"canonical_runtime_target_read_count": 0,
|
||||
"live_query_count": 0,
|
||||
"production_write_count": 0,
|
||||
"readiness_note": "P2-113 已正式驗證 no-write promotion gate;P2-114 只整理 owner approval packet、acceptance record template、rollback owner 與 verifier plan。"
|
||||
},
|
||||
"owner_gate_truth": {
|
||||
"p2_113_promotion_gate_loaded": true,
|
||||
"owner_promotion_package_ready": true,
|
||||
"acceptance_record_template_ready": true,
|
||||
"reviewer_queue_fixture_ready": true,
|
||||
"result_capture_fixture_ready": true,
|
||||
"rollback_owner_required": true,
|
||||
"verifier_plan_required": true,
|
||||
"owner_approval_received": false,
|
||||
"canonical_runtime_target_read_enabled": false,
|
||||
"live_query_enabled": false,
|
||||
"failure_receipt_send_enabled": false,
|
||||
"reviewer_queue_write_enabled": false,
|
||||
"gateway_queue_write_enabled": false,
|
||||
"telegram_send_enabled": false,
|
||||
"bot_api_call_enabled": false,
|
||||
"report_receipt_write_enabled": false,
|
||||
"result_capture_write_enabled": false,
|
||||
"learning_write_enabled": false,
|
||||
"playbook_trust_write_enabled": false,
|
||||
"production_write_enabled": false,
|
||||
"secret_read_enabled": false,
|
||||
"destructive_operation_enabled": false,
|
||||
"owner_approval_received_count": 0,
|
||||
"owner_acceptance_record_write_count": 0,
|
||||
"promotion_execution_count": 0,
|
||||
"canonical_runtime_target_read_count": 0,
|
||||
"live_query_count": 0,
|
||||
"failure_receipt_send_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"bot_api_call_count": 0,
|
||||
"report_receipt_write_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"production_write_count": 0,
|
||||
"truth_note": "owner-approved fixture promotion package 已可審查;真正 owner acceptance、live read、queue write、Telegram send、result capture 與 production write 仍全部為 0。"
|
||||
},
|
||||
"owner_approval_packets": [
|
||||
{
|
||||
"packet_id": "failure_receipt_owner_packet",
|
||||
"display_name": "Failure receipt owner approval packet",
|
||||
"owner_agent": "hermes",
|
||||
"source_lane_id": "telegram_failure_receipt_promotion",
|
||||
"status": "ready_for_owner_review",
|
||||
"risk_tier": "high",
|
||||
"required_owner_fields": [
|
||||
"owner_role",
|
||||
"decision",
|
||||
"decision_reason",
|
||||
"sre_route_lock"
|
||||
],
|
||||
"allowed_fixture": "no_send_failure_receipt_fixture",
|
||||
"blocked_runtime_actions": [
|
||||
"telegram_send",
|
||||
"bot_api_call",
|
||||
"report_receipt_write"
|
||||
],
|
||||
"owner_acceptance_required": true,
|
||||
"evidence_hash": "sha256:2424242424242424242424242424242424242424242424242424242424242424"
|
||||
},
|
||||
{
|
||||
"packet_id": "reviewer_queue_owner_packet",
|
||||
"display_name": "Reviewer queue owner approval packet",
|
||||
"owner_agent": "openclaw",
|
||||
"source_lane_id": "reviewer_queue_preview_promotion",
|
||||
"status": "approval_required",
|
||||
"risk_tier": "high",
|
||||
"required_owner_fields": [
|
||||
"reviewer_owner",
|
||||
"queue_scope",
|
||||
"decision_template",
|
||||
"audit_boundary"
|
||||
],
|
||||
"allowed_fixture": "reviewer_queue_preview_digest",
|
||||
"blocked_runtime_actions": [
|
||||
"reviewer_queue_write",
|
||||
"timeline_write",
|
||||
"audit_db_write"
|
||||
],
|
||||
"owner_acceptance_required": true,
|
||||
"evidence_hash": "sha256:2525252525252525252525252525252525252525252525252525252525252525"
|
||||
},
|
||||
{
|
||||
"packet_id": "result_capture_owner_packet",
|
||||
"display_name": "Result capture owner approval packet",
|
||||
"owner_agent": "nemotron",
|
||||
"source_lane_id": "result_capture_no_write_promotion",
|
||||
"status": "blocked_by_policy",
|
||||
"risk_tier": "critical",
|
||||
"required_owner_fields": [
|
||||
"score_owner",
|
||||
"capture_scope",
|
||||
"playbook_trust_owner",
|
||||
"rollback_owner"
|
||||
],
|
||||
"allowed_fixture": "result_capture_preview_digest",
|
||||
"blocked_runtime_actions": [
|
||||
"score_write",
|
||||
"result_capture_write",
|
||||
"playbook_trust_write"
|
||||
],
|
||||
"owner_acceptance_required": true,
|
||||
"evidence_hash": "sha256:2626262626262626262626262626262626262626262626262626262626262626"
|
||||
},
|
||||
{
|
||||
"packet_id": "report_receipt_owner_packet",
|
||||
"display_name": "Report receipt owner approval packet",
|
||||
"owner_agent": "hermes",
|
||||
"source_lane_id": "report_delivery_receipt_link",
|
||||
"status": "approval_required",
|
||||
"risk_tier": "high",
|
||||
"required_owner_fields": [
|
||||
"report_owner",
|
||||
"receipt_scope",
|
||||
"ai_analysis_boundary",
|
||||
"maintenance_window"
|
||||
],
|
||||
"allowed_fixture": "report_delivery_receipt_preview",
|
||||
"blocked_runtime_actions": [
|
||||
"gateway_queue_write",
|
||||
"report_receipt_write",
|
||||
"ai_analysis_run"
|
||||
],
|
||||
"owner_acceptance_required": true,
|
||||
"evidence_hash": "sha256:2727272727272727272727272727272727272727272727272727272727272727"
|
||||
},
|
||||
{
|
||||
"packet_id": "p2_115_scope_owner_packet",
|
||||
"display_name": "P2-115 canonical readback scope packet",
|
||||
"owner_agent": "openclaw",
|
||||
"source_lane_id": "p2_114_handoff_scope",
|
||||
"status": "blocked_by_policy",
|
||||
"risk_tier": "critical",
|
||||
"required_owner_fields": [
|
||||
"canonical_target_scope",
|
||||
"readback_owner",
|
||||
"rollback_owner",
|
||||
"verifier_owner"
|
||||
],
|
||||
"allowed_fixture": "canonical_readback_scope_preview",
|
||||
"blocked_runtime_actions": [
|
||||
"canonical_runtime_target_read",
|
||||
"live_query",
|
||||
"production_write"
|
||||
],
|
||||
"owner_acceptance_required": true,
|
||||
"evidence_hash": "sha256:2828282828282828282828282828282828282828282828282828282828282828"
|
||||
}
|
||||
],
|
||||
"acceptance_record_templates": [
|
||||
{
|
||||
"template_id": "owner_role_decision_record",
|
||||
"display_name": "Owner role and decision record",
|
||||
"status": "ready",
|
||||
"required_fields": [
|
||||
"owner_role",
|
||||
"decision",
|
||||
"decision_reason"
|
||||
],
|
||||
"accepted": false,
|
||||
"record_write_enabled": false,
|
||||
"evidence_hash": "sha256:2929292929292929292929292929292929292929292929292929292929292929"
|
||||
},
|
||||
{
|
||||
"template_id": "affected_scope_record",
|
||||
"display_name": "Affected scope record",
|
||||
"status": "ready",
|
||||
"required_fields": [
|
||||
"affected_scope",
|
||||
"redacted_evidence_refs",
|
||||
"followup_owner"
|
||||
],
|
||||
"accepted": false,
|
||||
"record_write_enabled": false,
|
||||
"evidence_hash": "sha256:3030303030303030303030303030303030303030303030303030303030303030"
|
||||
},
|
||||
{
|
||||
"template_id": "rollback_owner_record",
|
||||
"display_name": "Rollback owner record",
|
||||
"status": "approval_required",
|
||||
"required_fields": [
|
||||
"rollback_owner",
|
||||
"rollback_plan",
|
||||
"stop_condition"
|
||||
],
|
||||
"accepted": false,
|
||||
"record_write_enabled": false,
|
||||
"evidence_hash": "sha256:3131313131313131313131313131313131313131313131313131313131313131"
|
||||
},
|
||||
{
|
||||
"template_id": "maintenance_window_record",
|
||||
"display_name": "Maintenance window record",
|
||||
"status": "blocked_by_policy",
|
||||
"required_fields": [
|
||||
"maintenance_window",
|
||||
"validation_plan",
|
||||
"post_action_verifier"
|
||||
],
|
||||
"accepted": false,
|
||||
"record_write_enabled": false,
|
||||
"evidence_hash": "sha256:3232323232323232323232323232323232323232323232323232323232323232"
|
||||
}
|
||||
],
|
||||
"fixture_promotion_reviews": [
|
||||
{
|
||||
"review_id": "no_send_receipt_review",
|
||||
"display_name": "No-send receipt fixture review",
|
||||
"status": "ready",
|
||||
"source_packet_id": "failure_receipt_owner_packet",
|
||||
"review_outcome": "fixture_ready_no_send",
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:3333333333333333333333333333333333333333333333333333333333333333"
|
||||
},
|
||||
{
|
||||
"review_id": "no_write_queue_review",
|
||||
"display_name": "No-write queue fixture review",
|
||||
"status": "approval_required",
|
||||
"source_packet_id": "reviewer_queue_owner_packet",
|
||||
"review_outcome": "queue_preview_ready_no_write",
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:3434343434343434343434343434343434343434343434343434343434343434"
|
||||
},
|
||||
{
|
||||
"review_id": "no_write_result_review",
|
||||
"display_name": "No-write result fixture review",
|
||||
"status": "blocked_by_policy",
|
||||
"source_packet_id": "result_capture_owner_packet",
|
||||
"review_outcome": "result_preview_blocked_until_owner_acceptance",
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:3535353535353535353535353535353535353535353535353535353535353535"
|
||||
},
|
||||
{
|
||||
"review_id": "no_live_readback_review",
|
||||
"display_name": "No-live readback fixture review",
|
||||
"status": "blocked_by_policy",
|
||||
"source_packet_id": "p2_115_scope_owner_packet",
|
||||
"review_outcome": "canonical_readback_blocked",
|
||||
"runtime_write_enabled": false,
|
||||
"evidence_hash": "sha256:3636363636363636363636363636363636363636363636363636363636363636"
|
||||
}
|
||||
],
|
||||
"no_write_verifier_plans": [
|
||||
{
|
||||
"plan_id": "no_telegram_send_verifier",
|
||||
"display_name": "No Telegram send verifier",
|
||||
"status": "ready",
|
||||
"required_fixture": "telegram_send_count remains 0",
|
||||
"failure_if_missing": "任何 Telegram send 或 Bot API call 非 0 都不得 promotion。",
|
||||
"live_verifier_enabled": false,
|
||||
"evidence_hash": "sha256:3737373737373737373737373737373737373737373737373737373737373737"
|
||||
},
|
||||
{
|
||||
"plan_id": "no_reviewer_queue_write_verifier",
|
||||
"display_name": "No reviewer queue write verifier",
|
||||
"status": "approval_required",
|
||||
"required_fixture": "reviewer queue write count remains 0",
|
||||
"failure_if_missing": "缺 no-write queue fixture 時不得建立 reviewer queue item。",
|
||||
"live_verifier_enabled": false,
|
||||
"evidence_hash": "sha256:3838383838383838383838383838383838383838383838383838383838383838"
|
||||
},
|
||||
{
|
||||
"plan_id": "no_result_capture_write_verifier",
|
||||
"display_name": "No result capture write verifier",
|
||||
"status": "blocked_by_policy",
|
||||
"required_fixture": "result capture write count remains 0",
|
||||
"failure_if_missing": "result capture / learning / trust 任何寫入非 0 都必須退回。",
|
||||
"live_verifier_enabled": false,
|
||||
"evidence_hash": "sha256:3939393939393939393939393939393939393939393939393939393939393939"
|
||||
},
|
||||
{
|
||||
"plan_id": "no_live_readback_verifier",
|
||||
"display_name": "No live readback verifier",
|
||||
"status": "blocked_by_policy",
|
||||
"required_fixture": "canonical runtime target read count remains 0",
|
||||
"failure_if_missing": "未完成 P2-115 前不得讀 canonical runtime target。",
|
||||
"live_verifier_enabled": false,
|
||||
"evidence_hash": "sha256:4040404040404040404040404040404040404040404040404040404040404040"
|
||||
},
|
||||
{
|
||||
"plan_id": "no_secret_payload_verifier",
|
||||
"display_name": "No secret payload verifier",
|
||||
"status": "ready",
|
||||
"required_fixture": "secret read count remains 0",
|
||||
"failure_if_missing": "任何 secret payload 讀取都違反 P2-114。",
|
||||
"live_verifier_enabled": false,
|
||||
"evidence_hash": "sha256:4141414141414141414141414141414141414141414141414141414141414141"
|
||||
}
|
||||
],
|
||||
"blocked_promotions": [
|
||||
{
|
||||
"blocker_id": "owner_acceptance_not_received",
|
||||
"display_name": "Owner acceptance not received",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "execute_owner_promotion",
|
||||
"blocked_until": "owner_acceptance_record_accepted",
|
||||
"evidence_hash": "sha256:4242424242424242424242424242424242424242424242424242424242424242"
|
||||
},
|
||||
{
|
||||
"blocker_id": "rollback_owner_missing",
|
||||
"display_name": "Rollback owner missing",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "result_capture_write",
|
||||
"blocked_until": "rollback_owner_record_accepted",
|
||||
"evidence_hash": "sha256:4343434343434343434343434343434343434343434343434343434343434343"
|
||||
},
|
||||
{
|
||||
"blocker_id": "maintenance_window_missing",
|
||||
"display_name": "Maintenance window missing",
|
||||
"severity": "high",
|
||||
"status": "approval_required",
|
||||
"blocked_action": "telegram_send_or_live_query",
|
||||
"blocked_until": "maintenance_window_accepted",
|
||||
"evidence_hash": "sha256:4444444444444444444444444444444444444444444444444444444444444444"
|
||||
},
|
||||
{
|
||||
"blocker_id": "canonical_readback_scope_missing",
|
||||
"display_name": "Canonical readback scope missing",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "canonical_runtime_target_read",
|
||||
"blocked_until": "p2_115_owner_scope_accepted",
|
||||
"evidence_hash": "sha256:4545454545454545454545454545454545454545454545454545454545454545"
|
||||
},
|
||||
{
|
||||
"blocker_id": "secret_boundary_not_verified",
|
||||
"display_name": "Secret boundary not verified",
|
||||
"severity": "critical",
|
||||
"status": "blocked_by_policy",
|
||||
"blocked_action": "read_secret_or_raw_payload",
|
||||
"blocked_until": "redaction_and_secret_boundary_verified",
|
||||
"evidence_hash": "sha256:4646464646464646464646464646464646464646464646464646464646464646"
|
||||
}
|
||||
],
|
||||
"operator_actions": [
|
||||
{
|
||||
"action_id": "review_owner_packets",
|
||||
"display_name": "審查 owner approval packets",
|
||||
"owner_agent": "openclaw",
|
||||
"action_type": "review_owner_packet",
|
||||
"operator_instruction": "確認每個 packet 都有 owner、decision、reason、scope 與 blocked runtime action;缺一項即退回。",
|
||||
"runtime_promotion_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "verify_acceptance_templates",
|
||||
"display_name": "驗證 acceptance templates",
|
||||
"owner_agent": "hermes",
|
||||
"action_type": "verify_acceptance_template",
|
||||
"operator_instruction": "只驗證 acceptance record 欄位,不寫入 record、不建立 queue、不送 Telegram。",
|
||||
"runtime_promotion_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "confirm_verifier_plans",
|
||||
"display_name": "確認 no-write verifier plans",
|
||||
"owner_agent": "nemotron",
|
||||
"action_type": "confirm_verifier_plan",
|
||||
"operator_instruction": "確認 no-send、no-write、no-live-read、no-secret 五項 verifier 都有 fixture;不得執行 live verifier。",
|
||||
"runtime_promotion_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "lock_blocked_promotions",
|
||||
"display_name": "鎖定 blocked promotions",
|
||||
"owner_agent": "openclaw",
|
||||
"action_type": "lock_blocked_promotion",
|
||||
"operator_instruction": "把 owner、rollback、maintenance、canonical scope、secret boundary 缺口全部列為 blocked,避免誤按批准。",
|
||||
"runtime_promotion_allowed": false
|
||||
},
|
||||
{
|
||||
"action_id": "promote_to_p2_115",
|
||||
"display_name": "推進 P2-115",
|
||||
"owner_agent": "openclaw",
|
||||
"action_type": "promote_to_p2_115",
|
||||
"operator_instruction": "只有在 owner acceptance package 完整後,才能進 P2-115 評估 canonical runtime readback;不是 live approval。",
|
||||
"runtime_promotion_allowed": false
|
||||
}
|
||||
],
|
||||
"display_redaction_contract": {
|
||||
"redaction_required": true,
|
||||
"raw_prompt_display_allowed": false,
|
||||
"private_reasoning_display_allowed": false,
|
||||
"secret_value_display_allowed": false,
|
||||
"raw_runtime_payload_display_allowed": false,
|
||||
"internal_collaboration_content_display_allowed": false,
|
||||
"frontend_display_policy": "只顯示 owner packet、acceptance template、fixture review、blocked promotion 與 no-write verifier;不顯示內部協作逐字稿、提示詞、私密推理內容、secret 或原始 runtime payload。"
|
||||
},
|
||||
"rollups": {
|
||||
"owner_approval_packet_count": 5,
|
||||
"acceptance_record_template_count": 4,
|
||||
"fixture_promotion_review_count": 4,
|
||||
"no_write_verifier_plan_count": 5,
|
||||
"blocked_promotion_count": 5,
|
||||
"operator_action_count": 5,
|
||||
"approval_required_packet_count": 2,
|
||||
"blocked_packet_count": 2,
|
||||
"approval_required_template_count": 1,
|
||||
"blocked_template_count": 1,
|
||||
"approval_required_review_count": 1,
|
||||
"blocked_review_count": 2,
|
||||
"approval_required_verifier_count": 1,
|
||||
"blocked_verifier_count": 2,
|
||||
"critical_blocker_count": 3,
|
||||
"owner_approval_received_count": 0,
|
||||
"owner_acceptance_record_write_count": 0,
|
||||
"promotion_execution_count": 0,
|
||||
"canonical_runtime_target_read_count": 0,
|
||||
"live_query_count": 0,
|
||||
"failure_receipt_send_count": 0,
|
||||
"reviewer_queue_write_count": 0,
|
||||
"gateway_queue_write_count": 0,
|
||||
"telegram_send_count": 0,
|
||||
"bot_api_call_count": 0,
|
||||
"report_receipt_write_count": 0,
|
||||
"result_capture_write_count": 0,
|
||||
"learning_write_count": 0,
|
||||
"playbook_trust_write_count": 0,
|
||||
"production_write_count": 0,
|
||||
"secret_read_count": 0,
|
||||
"destructive_operation_count": 0
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,392 @@
|
||||
{
|
||||
"$schema": "https://json-schema.org/draft/2020-12/schema",
|
||||
"$id": "https://awoooi.wooo.work/schemas/ai_agent_owner_approved_fixture_promotion_gate_v1.schema.json",
|
||||
"title": "AI Agent Owner Approved Fixture Promotion Gate v1",
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"schema_version",
|
||||
"generated_at",
|
||||
"program_status",
|
||||
"source_refs",
|
||||
"prior_promotion_gate",
|
||||
"owner_gate_truth",
|
||||
"owner_approval_packets",
|
||||
"acceptance_record_templates",
|
||||
"fixture_promotion_reviews",
|
||||
"no_write_verifier_plans",
|
||||
"blocked_promotions",
|
||||
"operator_actions",
|
||||
"display_redaction_contract",
|
||||
"rollups"
|
||||
],
|
||||
"properties": {
|
||||
"schema_version": {
|
||||
"const": "ai_agent_owner_approved_fixture_promotion_gate_v1"
|
||||
},
|
||||
"generated_at": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
},
|
||||
"program_status": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"overall_completion_percent",
|
||||
"current_priority",
|
||||
"current_task_id",
|
||||
"next_task_id",
|
||||
"read_only_mode",
|
||||
"runtime_authority",
|
||||
"status_note"
|
||||
],
|
||||
"properties": {
|
||||
"overall_completion_percent": {
|
||||
"const": 100
|
||||
},
|
||||
"current_priority": {
|
||||
"const": "P2"
|
||||
},
|
||||
"current_task_id": {
|
||||
"const": "P2-114"
|
||||
},
|
||||
"next_task_id": {
|
||||
"const": "P2-115"
|
||||
},
|
||||
"read_only_mode": {
|
||||
"const": true
|
||||
},
|
||||
"runtime_authority": {
|
||||
"const": "owner_approved_fixture_promotion_gate_only_no_live_read_or_write"
|
||||
},
|
||||
"status_note": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
}
|
||||
}
|
||||
},
|
||||
"source_refs": {
|
||||
"$ref": "#/$defs/string_array"
|
||||
},
|
||||
"prior_promotion_gate": {
|
||||
"type": "object"
|
||||
},
|
||||
"owner_gate_truth": {
|
||||
"type": "object"
|
||||
},
|
||||
"owner_approval_packets": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"items": {
|
||||
"$ref": "#/$defs/owner_packet"
|
||||
}
|
||||
},
|
||||
"acceptance_record_templates": {
|
||||
"type": "array",
|
||||
"minItems": 4,
|
||||
"items": {
|
||||
"$ref": "#/$defs/acceptance_template"
|
||||
}
|
||||
},
|
||||
"fixture_promotion_reviews": {
|
||||
"type": "array",
|
||||
"minItems": 4,
|
||||
"items": {
|
||||
"$ref": "#/$defs/fixture_review"
|
||||
}
|
||||
},
|
||||
"no_write_verifier_plans": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"items": {
|
||||
"$ref": "#/$defs/verifier_plan"
|
||||
}
|
||||
},
|
||||
"blocked_promotions": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"items": {
|
||||
"$ref": "#/$defs/blocked_promotion"
|
||||
}
|
||||
},
|
||||
"operator_actions": {
|
||||
"type": "array",
|
||||
"minItems": 5,
|
||||
"items": {
|
||||
"$ref": "#/$defs/operator_action"
|
||||
}
|
||||
},
|
||||
"display_redaction_contract": {
|
||||
"type": "object"
|
||||
},
|
||||
"rollups": {
|
||||
"type": "object"
|
||||
}
|
||||
},
|
||||
"$defs": {
|
||||
"string_array": {
|
||||
"type": "array",
|
||||
"minItems": 1,
|
||||
"items": {
|
||||
"type": "string",
|
||||
"minLength": 1
|
||||
}
|
||||
},
|
||||
"hash": {
|
||||
"type": "string",
|
||||
"pattern": "^sha256:[0-9a-f]{64}$"
|
||||
},
|
||||
"owner_agent": {
|
||||
"enum": [
|
||||
"openclaw",
|
||||
"hermes",
|
||||
"nemotron"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"enum": [
|
||||
"ready",
|
||||
"ready_for_owner_review",
|
||||
"approval_required",
|
||||
"blocked_by_policy"
|
||||
]
|
||||
},
|
||||
"risk_tier": {
|
||||
"enum": [
|
||||
"high",
|
||||
"critical"
|
||||
]
|
||||
},
|
||||
"owner_packet": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"packet_id",
|
||||
"display_name",
|
||||
"owner_agent",
|
||||
"source_lane_id",
|
||||
"status",
|
||||
"risk_tier",
|
||||
"required_owner_fields",
|
||||
"allowed_fixture",
|
||||
"blocked_runtime_actions",
|
||||
"owner_acceptance_required",
|
||||
"evidence_hash"
|
||||
],
|
||||
"properties": {
|
||||
"packet_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"owner_agent": {
|
||||
"$ref": "#/$defs/owner_agent"
|
||||
},
|
||||
"source_lane_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/status"
|
||||
},
|
||||
"risk_tier": {
|
||||
"$ref": "#/$defs/risk_tier"
|
||||
},
|
||||
"required_owner_fields": {
|
||||
"$ref": "#/$defs/string_array"
|
||||
},
|
||||
"allowed_fixture": {
|
||||
"type": "string"
|
||||
},
|
||||
"blocked_runtime_actions": {
|
||||
"$ref": "#/$defs/string_array"
|
||||
},
|
||||
"owner_acceptance_required": {
|
||||
"const": true
|
||||
},
|
||||
"evidence_hash": {
|
||||
"$ref": "#/$defs/hash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"acceptance_template": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"template_id",
|
||||
"display_name",
|
||||
"status",
|
||||
"required_fields",
|
||||
"accepted",
|
||||
"record_write_enabled",
|
||||
"evidence_hash"
|
||||
],
|
||||
"properties": {
|
||||
"template_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/status"
|
||||
},
|
||||
"required_fields": {
|
||||
"$ref": "#/$defs/string_array"
|
||||
},
|
||||
"accepted": {
|
||||
"const": false
|
||||
},
|
||||
"record_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"evidence_hash": {
|
||||
"$ref": "#/$defs/hash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"fixture_review": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"review_id",
|
||||
"display_name",
|
||||
"status",
|
||||
"source_packet_id",
|
||||
"review_outcome",
|
||||
"runtime_write_enabled",
|
||||
"evidence_hash"
|
||||
],
|
||||
"properties": {
|
||||
"review_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/status"
|
||||
},
|
||||
"source_packet_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"review_outcome": {
|
||||
"type": "string"
|
||||
},
|
||||
"runtime_write_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"evidence_hash": {
|
||||
"$ref": "#/$defs/hash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"verifier_plan": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"plan_id",
|
||||
"display_name",
|
||||
"status",
|
||||
"required_fixture",
|
||||
"failure_if_missing",
|
||||
"live_verifier_enabled",
|
||||
"evidence_hash"
|
||||
],
|
||||
"properties": {
|
||||
"plan_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/status"
|
||||
},
|
||||
"required_fixture": {
|
||||
"type": "string"
|
||||
},
|
||||
"failure_if_missing": {
|
||||
"type": "string"
|
||||
},
|
||||
"live_verifier_enabled": {
|
||||
"const": false
|
||||
},
|
||||
"evidence_hash": {
|
||||
"$ref": "#/$defs/hash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"blocked_promotion": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"blocker_id",
|
||||
"display_name",
|
||||
"severity",
|
||||
"status",
|
||||
"blocked_action",
|
||||
"blocked_until",
|
||||
"evidence_hash"
|
||||
],
|
||||
"properties": {
|
||||
"blocker_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"severity": {
|
||||
"enum": [
|
||||
"high",
|
||||
"critical"
|
||||
]
|
||||
},
|
||||
"status": {
|
||||
"$ref": "#/$defs/status"
|
||||
},
|
||||
"blocked_action": {
|
||||
"type": "string"
|
||||
},
|
||||
"blocked_until": {
|
||||
"type": "string"
|
||||
},
|
||||
"evidence_hash": {
|
||||
"$ref": "#/$defs/hash"
|
||||
}
|
||||
}
|
||||
},
|
||||
"operator_action": {
|
||||
"type": "object",
|
||||
"additionalProperties": false,
|
||||
"required": [
|
||||
"action_id",
|
||||
"display_name",
|
||||
"owner_agent",
|
||||
"action_type",
|
||||
"operator_instruction",
|
||||
"runtime_promotion_allowed"
|
||||
],
|
||||
"properties": {
|
||||
"action_id": {
|
||||
"type": "string"
|
||||
},
|
||||
"display_name": {
|
||||
"type": "string"
|
||||
},
|
||||
"owner_agent": {
|
||||
"$ref": "#/$defs/owner_agent"
|
||||
},
|
||||
"action_type": {
|
||||
"type": "string"
|
||||
},
|
||||
"operator_instruction": {
|
||||
"type": "string"
|
||||
},
|
||||
"runtime_promotion_allowed": {
|
||||
"const": false
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user