feat(awooop): 預填 owner release 草案
This commit is contained in:
@@ -4445,6 +4445,60 @@ def _apply_gate_execution_release_contract(
|
||||
|
||||
route_id = f"ansible-allowlisted-apply:{catalog_id}"
|
||||
mcp_evidence_ready = _safe_int(facts.get("mcp_gateway_total")) > 0
|
||||
owner_release_draft = {
|
||||
"schema_version": "awooop_owner_release_draft_v1",
|
||||
"status": "ai_prefilled_needs_owner_decision",
|
||||
"source_id": source_ref,
|
||||
"work_item_id": f"owner-release-draft:awoooi:{safe_source_ref}",
|
||||
"ai_prefilled_count": 6,
|
||||
"human_decision_count": 3,
|
||||
"runtime_execution_authorized": False,
|
||||
"runtime_write_allowed": False,
|
||||
"human_only_fields": [
|
||||
"owner_approval_receipt",
|
||||
"maintenance_window_final_approval",
|
||||
"rollback_owner_confirmation",
|
||||
],
|
||||
"draft_fields": [
|
||||
{
|
||||
"key": "maintenance_window",
|
||||
"status": "ai_suggested_owner_review_required",
|
||||
"value": f"maintenance-window-review:awoooi:{safe_source_ref}",
|
||||
"reason": "AI can prepare the maintenance packet, but final timing still needs owner approval.",
|
||||
},
|
||||
{
|
||||
"key": "rollback_owner",
|
||||
"status": "ai_suggested_owner_review_required",
|
||||
"value": "sre_oncall_or_service_owner_required",
|
||||
"reason": "AI can nominate the required role; owner must confirm the named responder.",
|
||||
},
|
||||
{
|
||||
"key": "blast_radius",
|
||||
"status": "ai_prefilled_owner_review_required",
|
||||
"value": f"target={safe_source_ref}; route={route_id}; write_scope=single_allowlisted_apply",
|
||||
"reason": "Blast radius is limited to the selected allowlisted route until owner release.",
|
||||
},
|
||||
{
|
||||
"key": "post_apply_verifier",
|
||||
"status": "ai_prefilled_owner_review_required",
|
||||
"value": f"verifier-plan:{safe_source_ref}",
|
||||
"reason": "Verifier plan is prepared from the same source evidence and still needs owner review.",
|
||||
},
|
||||
{
|
||||
"key": "km_writeback_owner",
|
||||
"status": "ai_prefilled_after_verified_execution",
|
||||
"value": "hermes",
|
||||
"reason": "Hermes prepares KM writeback only after verified execution.",
|
||||
},
|
||||
{
|
||||
"key": "playbook_trust_owner",
|
||||
"status": "ai_prefilled_after_verified_execution",
|
||||
"value": "openclaw_nemotron_review",
|
||||
"reason": "Trust writeback waits for verifier output and reviewer scoring.",
|
||||
},
|
||||
],
|
||||
"next_action": "owner_reviews_ai_prefill_then_release_or_reject",
|
||||
}
|
||||
field_rows = [
|
||||
{
|
||||
"key": "incident_ref",
|
||||
@@ -4483,48 +4537,55 @@ def _apply_gate_execution_release_contract(
|
||||
},
|
||||
{
|
||||
"key": "maintenance_window",
|
||||
"status": "blocked_missing_maintenance_window",
|
||||
"value": "--",
|
||||
"status": "ai_suggested_owner_review_required",
|
||||
"value": f"maintenance-window-review:awoooi:{safe_source_ref}",
|
||||
"required": True,
|
||||
"next_step": "collect_maintenance_window",
|
||||
"next_step": "owner_review_ai_suggested_maintenance_window",
|
||||
},
|
||||
{
|
||||
"key": "rollback_owner",
|
||||
"status": "blocked_missing_rollback_owner",
|
||||
"value": "--",
|
||||
"status": "ai_suggested_owner_review_required",
|
||||
"value": "sre_oncall_or_service_owner_required",
|
||||
"required": True,
|
||||
"next_step": "confirm_rollback_owner_and_disable_plan",
|
||||
"next_step": "owner_confirm_rollback_owner",
|
||||
},
|
||||
{
|
||||
"key": "blast_radius",
|
||||
"status": "blocked_missing_blast_radius",
|
||||
"value": "--",
|
||||
"status": "ai_prefilled_owner_review_required",
|
||||
"value": f"target={safe_source_ref}; route={route_id}; write_scope=single_allowlisted_apply",
|
||||
"required": True,
|
||||
"next_step": "define_blast_radius_before_apply",
|
||||
"next_step": "owner_review_ai_prefilled_blast_radius",
|
||||
},
|
||||
{
|
||||
"key": "post_apply_verifier",
|
||||
"status": "blocked_missing_post_apply_verifier",
|
||||
"status": "ai_prefilled_owner_review_required",
|
||||
"value": f"verifier-plan:{safe_source_ref}",
|
||||
"required": True,
|
||||
"next_step": "approve_post_apply_verifier_plan",
|
||||
"next_step": "owner_review_post_apply_verifier_plan",
|
||||
},
|
||||
{
|
||||
"key": "km_writeback_owner",
|
||||
"status": "blocked_until_verified_execution",
|
||||
"value": "--",
|
||||
"status": "ai_prefilled_after_verified_execution",
|
||||
"value": "hermes",
|
||||
"required": True,
|
||||
"next_step": "assign_km_writeback_owner_after_verified_execution",
|
||||
},
|
||||
{
|
||||
"key": "playbook_trust_owner",
|
||||
"status": "blocked_until_verified_execution",
|
||||
"value": "--",
|
||||
"status": "ai_prefilled_after_verified_execution",
|
||||
"value": "openclaw_nemotron_review",
|
||||
"required": True,
|
||||
"next_step": "assign_playbook_trust_owner_after_verified_execution",
|
||||
},
|
||||
]
|
||||
ready_statuses = {"prefilled", "passed", "candidate_ready_no_runtime_authority"}
|
||||
ready_statuses = {
|
||||
"prefilled",
|
||||
"passed",
|
||||
"candidate_ready_no_runtime_authority",
|
||||
"ai_suggested_owner_review_required",
|
||||
"ai_prefilled_owner_review_required",
|
||||
"ai_prefilled_after_verified_execution",
|
||||
}
|
||||
ready_count = sum(1 for row in field_rows if row["status"] in ready_statuses)
|
||||
blocked_count = len(field_rows) - ready_count
|
||||
return {
|
||||
@@ -4545,12 +4606,13 @@ def _apply_gate_execution_release_contract(
|
||||
"work_item_id"
|
||||
),
|
||||
"fields": field_rows,
|
||||
"owner_release_draft": owner_release_draft,
|
||||
"next_steps": [
|
||||
{
|
||||
"key": "owner_release",
|
||||
"owner_agent": "openclaw",
|
||||
"work_item_id": f"owner-release-review:awoooi:{safe_source_ref}",
|
||||
"summary": "collect owner approval receipt and redacted evidence refs",
|
||||
"summary": "review AI prefilled owner release draft and record approval or rejection",
|
||||
"runtime_write_allowed": False,
|
||||
},
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user