[{"name":"refund","version":"1.2.0","action":"refund","postconditions":["refund_exists","amount_matches","currency_matches","customer_matches","status_succeeded","not_duplicate"],"required_postconditions":["amount_matches","currency_matches","not_duplicate","refund_exists","status_succeeded"],"final_states":["canceled","failed","succeeded"],"reversible_final_states":["succeeded"],"pending_states":["pending","requires_action"],"observed_states":[],"correlation":"provider_object_id","duplicate_strategy":"operation_ref_same_charge_plus_cross_charge_index","reverify_after":[["finalized",86400],["indeterminate",21600],["pending_finality",3600],["unreachable",1800]],"notes":["An unrecognized provider status derives lifecycle=indeterminate, never finalized.","currency_matches and not_duplicate are required. When the system of record cannot supply a comparable currency, or cannot be checked for duplicates, the check skips and safe_to_claim_complete stays false rather than overclaiming.","customer_matches is optional corroboration. It skips without blocking when the source of truth exposes no customer identity.","Duplicates correlate on the operation reference the agent stamps into refund metadata, plus Postcept's own cross-charge operation index."],"digest":"sha256:3b842d0b42421a27d8d847e1b1faf5d344fca9deed90b47d3088bae00a1b54a4","ref":"refund@1.2.0"},{"name":"cancellation","version":"1.3.0","action":"cancellation","postconditions":["subscription_exists","customer_matches","is_cancelled"],"required_postconditions":["is_cancelled","subscription_exists"],"final_states":["canceled"],"reversible_final_states":[],"pending_states":["pending_cancellation"],"observed_states":["active","incomplete","incomplete_expired","past_due","paused","trialing","unpaid"],"correlation":"provider_object_id","duplicate_strategy":null,"reverify_after":[["finalized",86400],["indeterminate",21600],["pending_finality",21600],["unreachable",1800]],"notes":["A canceled subscription cannot un-cancel. A replacement is a new subscription.","A cancellation scheduled for the period end is pending_cancellation: real, not final, and never claimable as complete until the period ends."],"digest":"sha256:90927decf785b1a8785dc0f3351471b950aa162a78b1dd622317327ab1dc686f","ref":"cancellation@1.3.0"},{"name":"ticket_resolution","version":"1.2.0","action":"ticket","postconditions":["ticket_exists","status_matches","requester_matches"],"required_postconditions":["status_matches","ticket_exists"],"final_states":["closed","solved"],"reversible_final_states":["solved"],"pending_states":[],"observed_states":["hold","new","on-hold","on_hold","open","pending"],"correlation":"provider_object_id","duplicate_strategy":null,"reverify_after":[["finalized",86400],["indeterminate",21600],["pending_finality",21600],["unreachable",1800]],"notes":["requester_matches only runs when the claim names a requester."],"digest":"sha256:cc6adb56a3d6879b35c14e351c241124c6a917283b0c53092de67e3d216c77c3","ref":"ticket_resolution@1.2.0"}]