Inferensys

Prompt

Veto Authority Routing Prompt for High-Risk Changes

A practical prompt playbook for using the Veto Authority Routing Prompt for High-Risk Changes in production AI workflows. Identifies which roles hold veto authority over a proposed action and under what conditions a veto can be exercised.
Developer doing prompt engineering on laptop, prompt variations visible on screen, casual coding session.
PROMPT PLAYBOOK

When to Use This Prompt

Defines the precise job-to-be-done, required inputs, and operational boundaries for the Veto Authority Routing Prompt.

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.

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.

PRACTICAL GUARDRAILS

Use Case Fit

Where the Veto Authority Routing Prompt works, where it fails, and the operational prerequisites for safe deployment.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

PROMPT PLAYBOOK

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.

text
System: 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.

IMPLEMENTATION TABLE

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.

PlaceholderPurposeExampleValidation 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 user_pii in us-east-1

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 role_id, role_name, reports_to, veto_scope

Must be valid JSON. Validate that each object has the required fields and that reports_to references a valid role_id. Reject if the graph contains cycles.

[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 approver_role, decision, timestamp

Must be valid JSON or null. If present, validate that each object has a decision field with a value of "APPROVED" or "DENIED". Reject if timestamps are in the future.

[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.

PROMPT PLAYBOOK

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.

IMPLEMENTATION TABLE

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 ElementType or FormatRequiredValidation 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.

PRACTICAL GUARDRAILS

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.

01

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.

02

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.

03

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.

04

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.

05

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.

06

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.

IMPLEMENTATION TABLE

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.

CriterionPass StandardFailure SignalTest 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

ADAPTATION OPTIONS

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.

code
You 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
Prasad Kumkar

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.