File size: 2,904 Bytes
9ec4919 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 | {
"name": "Enterprise approval",
"objective": "Move a permissioned change through its required approvals without a human chasing reviewers, while keeping every gate, approver, and decision on the record.",
"trigger": {
"type": "scheduled",
"cadence_or_event": "Every 1-4 hours during business hours while an approval is open, and when a gate completes or an approver is assigned."
},
"intake": {
"sources": ["change request", "linked diff or runbook", "required gate results", "approver decisions"],
"selection_rule": "Act only on the next unmet required gate or pending approver; never advance while a required gate is unmet."
},
"workspace": {
"isolation": "Read access to approval metadata, gate results, diffs, and policy documents; no merge or access-grant surface.",
"allowed_actions": ["read approval state", "attach sourced evidence", "request reviews", "update status fields"],
"disallowed_actions": ["self-approve", "bypass a gate", "edit policy", "merge or ship the change"]
},
"context": {
"required_files": ["approval policy", "AGENTS.md", "change-management runbook"],
"runtime_sources": ["current gate status", "approver availability", "SLA timers"]
},
"agents": [
{
"role": "Explorer",
"responsibility": "Summarize the change and which gates and approvers still block it."
},
{
"role": "Coordinator",
"responsibility": "Route the request to the next required gate or approver and track SLAs."
},
{
"role": "Reviewer",
"responsibility": "Check that attached evidence satisfies each named policy gate."
},
{
"role": "Judge",
"responsibility": "Decide whether to advance, request changes, or escalate to a human owner."
}
],
"verification": {
"gates": ["every required gate has a recorded pass, fail, or waiver with evidence", "each approval is attributable to a named human", "the change does not advance while any gate is unmet"],
"receipts": ["change request ID", "gate status with evidence links", "approver decisions and conditions", "timestamps"]
},
"state": {
"artifacts": ["approval ledger entry", "gate and approver status record"],
"update_rule": "Record what advanced, what blocked, and why after every run, preserving an immutable audit trail."
},
"budget": {
"max_retries": 3,
"max_runtime_minutes": 240
},
"escalation": {
"conditions": ["approver unresponsive past SLA", "a gate fails", "policy is ambiguous", "a waiver is requested", "regulated data or production access is involved"],
"destination": "Named human owner via the change-management channel"
},
"exit": {
"success": "The change is fully approved with a complete audit trail, or cleanly rejected.",
"stop_without_success": "The loop is blocked on a human decision, a failed gate, or an unresponsive approver."
}
}
|