This prompt is designed for risk management and compliance teams implementing veto powers in automated approval workflows. Its specific job is to identify all parties who hold the unilateral authority to block a proposed high-risk change, regardless of any other approvals that may have been granted. Use it when a standard approval chain is insufficient and you need to surface the blocking authority that supersedes all other sign-offs. The ideal user is a platform engineer or compliance officer encoding organizational policy into an AI-driven workflow, where the cost of an unauthorized action is severe.
Prompt
Veto Authority Routing Prompt for High-Risk Changes

When to Use This Prompt
Defines the precise job-to-be-done, required inputs, and operational boundaries for the Veto Authority Routing Prompt.
To use this prompt effectively, you must provide three concrete inputs: a detailed description of the proposed action, its computed risk profile (including risk tier, data sensitivity, and blast radius), and the relevant organizational policy document that defines veto powers. The prompt assumes that veto policies are explicitly documented and that the action context is sufficient to evaluate risk triggers. It is not a general-purpose approval routing tool. Do not use it for low-risk, standard changes where a simple sequential approval suffices, as it will over-engineer the routing and potentially introduce unnecessary blocking points. A concrete implementation would involve feeding a structured [ACTION] object, a [RISK_PROFILE] with scored fields, and a [POLICY_DOCUMENT] text into the template to produce a machine-readable list of veto holders.
The output is a structured list of veto holders, their scope of authority, the specific conditions under which a veto can be exercised, and the formal process for invoking it. Before deploying this prompt, you must implement validation checks for the output, such as verifying that every identified veto holder is explicitly mentioned in the source policy document and that no conflicting veto scopes are generated. In high-risk production environments, the final routing list should always be surfaced to a human for a final sanity check before being encoded into an execution harness. The next step after reading this section is to review the prompt template and adapt the placeholders to match your internal risk taxonomy and policy document structure.
Use Case Fit
Where the Veto Authority Routing Prompt works, where it fails, and the operational prerequisites for safe deployment.
Good Fit: Structured Policy Documents
Use when: Veto rules are explicitly defined in policy documents, runbooks, or SOPs with clear role-to-authority mappings. Why: The prompt excels at extracting explicit rules and mapping them to structured outputs. Guardrail: Validate extracted veto rules against source documents with a spot-check sample before production use.
Bad Fit: Implicit Organizational Power
Avoid when: Veto authority is based on unwritten cultural norms, informal influence, or 'it depends' judgment calls without documentation. Why: The prompt cannot infer undocumented power structures and will hallucinate plausible-sounding but incorrect authority mappings. Guardrail: Require a documented policy source as input; if none exists, route to a human for authority definition before invoking the prompt.
Required Input: Role Directory and Policy Source
What to watch: The prompt needs both a structured role directory (roles, individuals, scope) and the policy text defining veto conditions. Missing either produces unreliable output. Guardrail: Implement input validation that checks for both required documents before calling the model. Return a structured error requesting missing inputs rather than proceeding with partial context.
Operational Risk: Veto Conflict Resolution
What to watch: When two roles both appear to hold veto authority over the same action, the prompt may arbitrarily select one or produce an ambiguous output. Guardrail: Add a post-processing conflict detection step that flags overlapping veto scopes and routes them to a human for resolution. Never let the model silently resolve authority conflicts.
Operational Risk: Unauthorized Veto Attempts
What to watch: The prompt may fail to detect when a role attempts to exercise veto authority outside their defined scope, especially with edge-case actions. Guardrail: Implement a scope validation check after veto routing that verifies each veto holder's authority covers the specific action type, risk tier, and affected system. Escalate mismatches immediately.
Not For: Real-Time Emergency Actions
Avoid when: The action requires immediate execution with no time for structured veto review, such as incident response or automated rollback. Why: Veto routing adds latency and assumes a review window exists. Guardrail: Define a separate emergency action path that logs all actions for post-hoc veto review rather than blocking execution. Never apply veto routing to time-critical remediation.
Copy-Ready Prompt Template
A copy-ready prompt for identifying veto holders, their scope, and the conditions under which they can block a high-risk change.
This prompt template is designed to be pasted directly into your AI system. It instructs the model to act as a policy-aware router, analyzing a proposed high-risk change against your organization's defined veto rules. The core job is to output a structured list of who can say no, what they can block, and the precise conditions that grant them that authority. Before using this, ensure you have mapped your organization's veto policies into the [VETO_POLICIES] placeholder; the model cannot infer authority it hasn't been given.
textSystem: You are a Veto Authority Router. Your task is to analyze a proposed change against a set of organizational veto policies. You must identify every role that holds veto power over this specific change, define the exact scope of their authority, and state the conditions under which a veto can be exercised. Do not invent authority. If the policies do not grant a clear veto right, state that no veto applies. Your output must be a single, valid JSON object. Inputs: - Proposed Change: [PROPOSED_CHANGE_DESCRIPTION] - Change Context: [CHANGE_CONTEXT] - Veto Policies: [VETO_POLICIES] - Organizational Roles: [ORG_ROLES_DIRECTORY] Output Schema: A JSON object with a single key "veto_authorities" containing an array of objects. Each object must have the following fields: - "role": (string) The title of the role with veto authority. - "scope": (string) A precise description of what part of the change this role can veto. - "condition": (string) The specific policy condition that activates their veto power. - "veto_process": (string) How the veto is exercised (e.g., 'Formal rejection in change management tool', 'Direct message to incident commander'). - "is_veto_applicable": (boolean) A true/false assessment of whether the condition is met for this change. Constraints: - Base your analysis strictly on the provided [VETO_POLICIES] text. - If a role exists in [ORG_ROLES_DIRECTORY] but is not granted veto power in the policies, do not include them. - If no veto applies, return an empty array for "veto_authorities". - Flag any ambiguity in the policies that prevents a clear determination in a final "policy_ambiguities" array of strings. User: Analyze the proposed change.
To adapt this template, you must first codify your veto rules into the [VETO_POLICIES] block. This is the most critical step. A vague policy like 'Security can veto risky changes' is insufficient; a useful policy states 'The CISO or their delegate can veto any change that introduces a new data egress path to an untrusted network, as defined in policy SEC-104.' The [ORG_ROLES_DIRECTORY] should be a simple mapping of roles to individuals or teams to ground the output. After the model returns the JSON, you must validate it: check that every is_veto_applicable: true entry has a matching, explicit condition in your source policy text. A human reviewer should always confirm the final routing before a veto is enacted or a change is allowed to proceed without one, as a missed veto authority represents a critical control failure.
Prompt Variables
Every placeholder the Veto Authority Routing Prompt expects, why it matters, and how to validate it before sending. Use this table to ensure your application layer provides clean, complete inputs before the prompt executes.
| Placeholder | Purpose | Example | Validation Notes |
|---|---|---|---|
[PROPOSED_ACTION] | Describes the high-risk change being proposed, including what will be modified, by whom, and the target environment. | Delete production database table | Must be a non-empty string. Validate that it includes a verb, a target resource, and an environment. Reject if the action is vague or missing a target. |
[ACTION_RISK_SCORE] | A numeric or categorical risk score computed by a prior risk assessment step, used to determine if veto authority is even applicable. | 0.87 or "CRITICAL" | Must be a float between 0.0 and 1.0 or a string from a predefined set: ["LOW", "MEDIUM", "HIGH", "CRITICAL"]. Reject if the score is missing or outside the expected range. |
[REQUESTING_USER_ROLE] | The role of the individual initiating the action, used to check for conflicts of interest and to determine who outranks them in the veto chain. | SRE Lead | Must be a non-empty string matching a role in the [ORGANIZATIONAL_ROLE_DIRECTORY]. Validate against the directory; reject if the role is not found. |
[ORGANIZATIONAL_ROLE_DIRECTORY] | A structured list of roles, their reporting lines, and their authority scopes. This is the source of truth for determining veto holders. | JSON array of role objects with | Must be valid JSON. Validate that each object has the required fields and that |
[VETO_POLICY_DOCUMENT] | The text of the policy that defines who holds veto power, under what conditions, and the process for exercising a veto. | Section 4.2 of the Change Management Policy... | Must be a non-empty string. Validate that it contains keywords like "veto", "override", or "block". Flag for human review if the document is shorter than 50 characters, as it may be incomplete. |
[PREVIOUS_APPROVALS] | A log of approvals already granted for this action, used to detect if a veto would override a prior consensus. | JSON array of approval objects with | Must be valid JSON or null. If present, validate that each object has a |
[ACTION_TIMESTAMP] | The ISO 8601 timestamp of when the action was requested, used for audit trails and to check against time-bounded policy rules. | 2024-05-20T14:30:00Z | Must be a valid ISO 8601 string. Validate that it parses correctly and is not in the future. Reject if the format is ambiguous. |
Implementation Harness Notes
How to wire the Veto Authority Routing Prompt into a production application with validation, logging, and human review.
This prompt is designed to be called as a synchronous gate within a change management or CI/CD pipeline. The application should construct the prompt by injecting the proposed change details, the organizational policy context, and the structured output schema. Because the output determines whether a high-risk action proceeds, the harness must treat the model's response as a structured recommendation, not an executable decision. The application layer retains final authority to block or escalate.
Integration flow: The application assembles the [CHANGE_DETAILS] and [POLICY_CONTEXT] from internal systems (ticketing, IaC plans, deployment manifests). It then calls the model with a strict JSON schema for the output, including fields for veto_holders, veto_scope, and veto_process. On response, the harness must validate the JSON structure, confirm all required fields are present, and check that the identified veto holders map to real, active roles in the identity provider or directory service. If a veto holder is unrecognized or the schema is malformed, the harness should retry once with a repair prompt before escalating to a human operator.
Critical safety checks: Before surfacing the veto routing to any user, the harness must verify that the model did not hallucinate roles or skip a required veto step defined in the policy document. Implement a policy coverage check that compares the extracted veto holders against a known list of required stakeholders for the change's risk tier. If coverage is incomplete, flag the output for human review. Log every invocation—including the prompt, the raw response, validation errors, and the final routing decision—to an append-only audit store. This log becomes the evidence trail for compliance reviews. Never allow the model's output to directly trigger a pipeline stage without this validation layer and a human-in-the-loop confirmation for any change classified as high-risk.
Expected Output Contract
Defines the structured JSON response the model must produce for a veto authority routing decision. Use this contract to validate outputs before they enter an approval workflow.
| Field or Element | Type or Format | Required | Validation Rule |
|---|---|---|---|
veto_holders | Array of objects | Array length >= 0. Each object must pass the veto_holder schema check. Empty array only when no veto authority exists for the proposed action. | |
veto_holders[].role | String | Non-empty string matching a role identifier from [ROLE_DIRECTORY]. Must not be a generic placeholder like 'admin' or 'manager'. | |
veto_holders[].scope | String enum | Must be one of: 'full_veto', 'scope_limited', 'conditional'. If 'scope_limited' or 'conditional', the 'scope_details' field must be populated. | |
veto_holders[].scope_details | String or null | Required when scope is 'scope_limited' or 'conditional'. Must describe the specific boundaries or triggering conditions. Null allowed only when scope is 'full_veto'. | |
veto_holders[].veto_process | String | Non-empty string describing how the veto is exercised: required form, channel, deadline, and any quorum rules. Must reference [VETO_POLICY] if provided. | |
veto_conflicts | Array of strings | Array length >= 0. Each string must describe a detected conflict between veto authorities or a gap in veto coverage. Empty array only when no conflicts or gaps are found. | |
routing_decision | String enum | Must be one of: 'proceed_with_veto_review', 'no_veto_applicable', 'escalate_for_policy_clarification'. 'escalate_for_policy_clarification' required when veto_conflicts is non-empty or when [VETO_POLICY] is ambiguous. | |
decision_rationale | String | Non-empty string summarizing why the routing decision was reached. Must reference specific veto holders, scope limitations, or conflicts that drove the decision. |
Common Failure Modes
What breaks first when using a Veto Authority Routing Prompt in production, and how to guard against each failure before it reaches a reviewer.
Veto Scope Creep
What to watch: The model expands veto authority beyond the defined policy, granting a role veto power over changes they should only review. This happens when the prompt describes veto conditions too broadly or relies on role titles rather than explicit authority boundaries. Guardrail: Define veto scope with a structured schema that maps each role to specific change categories, risk tiers, and dollar thresholds. Include negative examples showing where veto does NOT apply.
Silent Veto Bypass
What to watch: The model fails to identify a required veto holder and routes the change through standard approval only. This occurs when veto rules are conditional and the model misses a triggering condition, especially for edge-case combinations of risk factors. Guardrail: Implement a two-pass check: first identify all veto holders from the policy, then verify each is present in the routing output. Add a structured completeness assertion that fails closed if any veto role is missing.
Conflicting Veto Instructions
What to watch: When multiple policy documents or system instructions define veto authority differently, the model may blend them inconsistently or default to the most permissive interpretation. This is common when organizational policy and system prompts drift out of sync. Guardrail: Use an instruction hierarchy that explicitly prioritizes the veto policy source. Include a conflict detection step that surfaces ambiguous authority before routing, and escalate to human review when conflicts are found.
Unauthorized Veto Exercise
What to watch: The model accepts a veto from a role that holds veto authority in general but not for this specific change category, risk level, or environment. This happens when the prompt treats veto authority as binary rather than scoped. Guardrail: Require the model to output the specific policy clause that grants veto authority for each veto holder in the routing result. Validate that the clause matches the change context before accepting the veto.
Veto Process Omission
What to watch: The model correctly identifies who holds veto authority but omits the process requirements: time windows, required justification format, quorum rules, or escalation paths after a veto is exercised. The output names roles without actionable process. Guardrail: Structure the output schema to require veto process details alongside veto holder identification. Include a completeness validator that checks for required process fields before the routing result is surfaced.
Temporal Veto Blindness
What to watch: The model ignores time-bounded veto conditions, such as veto windows that expire, freeze periods where veto is suspended, or deadlines after which veto authority reverts. This causes vetoes to be applied or withheld incorrectly based on stale temporal context. Guardrail: Include the current timestamp and any relevant temporal policy windows in the prompt context. Add a temporal validity check that verifies veto authority is active at the time of routing, not just defined in policy.
Evaluation Rubric
Use these criteria to test the Veto Authority Routing Prompt before production deployment. Each row targets a specific failure mode common to veto workflows. Run these tests against a golden dataset of high-risk change scenarios with known veto holders and scope boundaries.
| Criterion | Pass Standard | Failure Signal | Test Method |
|---|---|---|---|
Veto holder identification | All roles with veto authority over [PROPOSED_ACTION] are listed with their scope of authority | Missing a known veto holder from the organizational policy; listing a role without veto power | Compare output against a pre-verified authority matrix for 20 test actions spanning all risk tiers |
Scope boundary precision | Each veto holder's scope is bounded by condition, domain, or threshold as defined in [POLICY_DOCUMENT] | Veto scope is described as unlimited or unbounded; scope conflicts with another role's defined boundaries | Assert that scope descriptions contain at least one limiting condition and do not overlap with conflicting authority |
Veto condition enumeration | Specific conditions under which each veto can be exercised are listed and traceable to [POLICY_DOCUMENT] clauses | Veto conditions are vague, missing, or invented without policy grounding; conditions contradict documented policy | For each veto holder, require at least one concrete condition; spot-check 10 outputs against source policy text |
Unauthorized veto rejection | Prompt correctly identifies when a role attempts to veto outside their scope and flags it as unauthorized | An out-of-scope veto attempt is accepted as valid; no distinction between authorized and unauthorized vetoes | Inject 5 test cases where the vetoing role lacks authority; verify output labels each as unauthorized with reasoning |
Veto conflict resolution | When two veto holders issue conflicting directives, the prompt identifies the conflict and specifies the resolution rule from [POLICY_DOCUMENT] | Conflicting vetoes are ignored, silently resolved without policy reference, or produce an ambiguous result | Feed 5 scenarios with known veto conflicts; check that output names both parties, the conflict, and the resolution rule |
Process step completeness | Output includes the full veto process: who initiates, how veto is recorded, time constraints, and post-veto next steps | Process description omits time bounds, recording requirements, or what happens after a veto is exercised | Validate output against a checklist of required process fields: initiator, recording method, deadline, and post-veto path |
Evidence grounding | Every veto authority claim and condition is backed by a reference to [POLICY_DOCUMENT] section or clause | Output contains unsupported assertions about who holds veto power; citations are missing or point to irrelevant sections | Run a citation verification script that extracts each claim and checks for a corresponding policy reference in the output |
Edge case handling for absent veto holders | When a required veto holder is unavailable, the prompt identifies the gap and applies the delegation or escalation rule from [POLICY_DOCUMENT] | Output proceeds as if the veto holder is available; no delegation, escalation, or blocking action is triggered | Test 3 scenarios where a veto holder is marked unavailable; confirm output either delegates authority per policy or blocks the action |
Enabling Efficiency, Speed & Accuracy
Intelligent Analysis, Decision & Execution
We build AI systems for teams that need search across company data, workflow automation across tools, or AI features inside products and internal software.
Talk to Us
Search across company data
Give teams answers from docs, tickets, runbooks, and product data with sources and permissions.
Useful when people spend too long searching or get different answers from different systems.

Automate internal workflows
Use AI to route work, draft outputs, trigger actions, and keep approvals and logs in place.
Useful when repetitive work moves across multiple tools and teams.

Add AI to products and internal tools
Build assistants, guided actions, or decision support into the software your team or customers already use.
Useful when AI needs to be part of the product, not a separate tool.
Adapt This Prompt
How to adapt
Start with the base prompt and a hardcoded list of veto roles. Remove the structured output schema and ask for a plain-text summary first. Use a lightweight model call without retries.
codeYou are a veto authority router. Given a proposed change and a list of authorized veto roles, identify which roles can veto this change and under what conditions. Change: [CHANGE_DESCRIPTION] Veto Roles: [ROLE_LIST]
Watch for
- The model inventing veto conditions not in your role list
- Missing the distinction between "can veto" and "must approve"
- Overly broad veto scope when change details are vague

About the author
Prasad Kumkar
CEO & MD, Inference Systems
Prasad Kumkar is the CEO & MD of Inference Systems and writes about AI systems architecture, LLM infrastructure, model serving, evaluation, and production deployment. Over 5+ years, he has worked across computer vision models, L5 autonomous vehicle systems, and LLM research, with a focus on taking complex AI ideas into real-world engineering systems.
His work and writing cover AI systems, large language models, AI agents, multimodal systems, autonomous systems, inference optimization, RAG, evaluation, and production AI engineering.
Partnered with leading AI, data, and software stack.
How We Work
Custom AI workflows for your Business
One-fit-all AI don't work for modern businesses. At Inferensys, we aim to understand your business & custom requirements; which we use to define most efficient agentic workflows, the data, and the tools for your business.
01
Review the use case
We understand the task, the users, and where AI can actually help.
Read more02
Pick the right approach
We define what needs search, automation, or product integration.
Read more03
Build the first useful version
We implement the part that proves the value first.
Read more04
Improve from there
We add the checks and visibility needed to keep it useful.
Read moreThe first call is a practical review of your use case and the right next step.
Talk to Us