TL;DR
Treat every production AI change as a versioned behavior release, not as an isolated model, prompt, or tool edit. Package the model identifier, prompt content, tool schemas, retrieval settings, policy, runtime code, and evaluation thresholds into one immutable release bundle. Prove the candidate offline, replay production traffic in shadow mode without side effects, move a sticky cohort through a measured canary, compare complete traces against the stable release, and automatically roll back when a hard safety, correctness, reliability, or cost threshold is breached.
The rollback target must be the last known-good bundle. Reverting only the model while leaving a changed prompt, tool contract, policy rule, or state schema in place can preserve the failure while creating the illusion that production was restored.
Introduction
Production AI systems rarely break because someone deliberately deploys an obviously dangerous change. They break because a reasonable change creates an unexpected interaction.
A new model may interpret an existing tool description differently. A prompt rewrite may increase the number of tool calls. A schema cleanup may make an optional tool argument effectively required. A retrieval change may provide less evidence while the final answer still sounds confident. A safety rule may block the normal path and force the agent into an expensive retry loop.
Traditional software release practices still matter, but they are not enough by themselves. AI behavior is shaped by a compound runtime: model, instructions, context, tools, retrieval, state, policy, orchestration, and provider behavior. The operational unit that must be evaluated, canaried, promoted, and rolled back is the complete behavior bundle.
This runbook provides a production release path for model, prompt, and tool changes. It is designed for platform engineers, AI engineers, SRE teams, application owners, security reviewers, and technical leaders who need a release process that is measurable, reversible, and defensible after an incident.
The Scenario: A Small Change With a Large Blast Radius
Assume a support agent is already serving production traffic. The team proposes three changes in one release:
- Move the default route to a newer model.
- Shorten the system prompt to reduce latency and token use.
- Update the ticketing tool schema so the agent can add an escalation reason.
Each change appears manageable in isolation. Together, they can alter planning, tool selection, argument generation, retry behavior, response quality, latency, cost, and the number of write actions sent to the ticketing platform.
The visible deployment may be one configuration change. The real production change is a new behavioral system.
| Change surface | Hidden dependency | Typical regression | Correct rollback target |
|---|---|---|---|
| Model | Prompt interpretation, tool calling, token behavior | Different tool choice or weaker instruction adherence | Previous model plus its compatible bundle |
| Prompt | Model behavior, output schema, policy wording | Quality loss, longer loops, missing required evidence | Previous prompt version and bundle |
| Tool schema | Model-generated arguments, validation, downstream API | Invalid calls, retries, incorrect side effects | Previous schema, adapter, and permissions |
| Retrieval | Index version, ranking, filters, citations | Unsupported answers or stale evidence | Previous retrieval configuration and index alias |
| Policy | Approval rules, blocked actions, fallback paths | Unexpected denial, escalation, or bypass | Previous policy package and decision logic |
| Runtime | Orchestration, retries, state, parsing | Looping, state corruption, incomplete fallback | Previous deployable artifact and compatible state |
The first operating rule follows from this table:
Never promote or roll back an AI component without identifying the complete behavior bundle it belongs to.
The Progressive Delivery Control Loop
The release should move through explicit evidence gates. Offline evaluation answers whether the candidate is ready to touch production inputs. Shadow traffic answers whether the candidate behaves differently under real request distributions. Canary traffic answers whether the candidate can safely serve a bounded production cohort. Promotion happens only after the candidate remains inside defined thresholds for a meaningful observation period.
What matters in this flow is the separation between promotion evidence and rollback authority. A dashboard may help humans understand the release, but the system should not require a meeting to stop a candidate that is leaking data, issuing unauthorized tool calls, corrupting state, or violating a critical service objective.
Prerequisites and Safety Checks
Do not begin a production canary until the following controls exist.
A Known-Good Stable Bundle
The current production release must be reconstructable from immutable identifiers. Do not use labels such as latest, an unpinned model alias, an editable prompt name, or a mutable tool package as the only record of production state.
The stable bundle should identify:
- Model provider, model identifier, and provider-reported response model when available.
- Prompt files, templates, examples, and system instruction hashes.
- Tool names, schema versions, adapter versions, permissions, and side-effect classification.
- Retrieval index, embedding configuration, ranking settings, filters, and source policy.
- Orchestration code, container image, package lock, and configuration commit.
- Guardrails, approval policy, routing logic, retry policy, and output contract.
- State schema and compatibility rules.
- Evaluation dataset and grader versions used for approval.
A Tested Rollback Path
Rollback must be executable before the candidate receives traffic. The team should be able to answer:
- Which command, pipeline, or alias change restores the stable bundle?
- How quickly does traffic stop reaching the candidate?
- What happens to conversations already running on the candidate?
- Can the stable runtime read state written by the candidate?
- Which tool actions are reversible, compensating, or irreversible?
- Who has authority to trigger rollback outside the normal change window?
A rollback plan that exists only as prose is not ready. Exercise it in a production-like environment and record the result.
Comparable Telemetry
Stable and candidate traces must use the same field names, clocks, sampling rules, and success definitions. OpenTelemetry semantic conventions provide a useful common vocabulary for model, token, tool, and latency telemetry, but the release process still needs application-specific fields such as task type, policy decision, release bundle, evaluation outcome, and final business result.
At minimum, every run should carry:
- Release bundle ID.
- Stable or candidate designation.
- Task class and risk class.
- Model request and response identifiers.
- Prompt and tool schema versions.
- Retrieval configuration version.
- Tool call names, outcomes, retries, and side-effect class.
- Latency, token use, cost estimate, and error status.
- Policy and approval decisions.
- Final task outcome and human override where applicable.
Safe Shadow Execution
Shadow traffic must not duplicate real-world side effects. Candidate tool calls should be blocked, simulated, redirected to a sandbox, or transformed into dry-run plans. A shadow candidate that sends customer messages, changes tickets, restarts services, or modifies data is not shadowing. It is double execution.
Release Ownership
Name the release owner, service owner, evaluation owner, observability owner, security reviewer, and incident authority. One person may fill several roles in a small team, but the responsibilities must still be explicit.
Build an Immutable AI Release Bundle
The release manifest is the center of the runbook. It makes the unit of change visible and gives operations one identifier that can be attached to evaluations, traces, approvals, traffic policies, and incident evidence.
The following YAML is a vendor-neutral example. Replace the placeholder identifiers with immutable references from your environment.
release_bundle:
id: support-agent-2026-07-21.3
git_commit: 8c4a27f
build_artifact: support-agent@sha256:9f23c1
owner: ai-platform
risk_class: high
model:
provider: approved-provider
requested_id: reasoning-model-2026-07-15
parameters:
temperature: 0.2
max_output_tokens: 1800
prompts:
system_prompt:
version: support-system-v42
sha256: 29f1b7
escalation_template:
version: escalation-v11
sha256: a918de
tools:
ticket_read:
schema_version: 7
adapter_version: 3.8.1
side_effect: none
ticket_update:
schema_version: 12
adapter_version: 5.2.0
side_effect: reversible
approval_policy: production-write-v4
retrieval:
index_alias: support-kb-2026-07-18
ranking_profile: hybrid-rerank-v9
authorization_filter: acl-filter-v6
runtime:
workflow_version: support-flow-v18
state_schema: 14
retry_policy: bounded-retry-v5
output_contract: support-response-v8
evaluation:
dataset: support-regression-2026q3-v4
graders: support-graders-v6
required_status: passed
rollout:
cohort_key: tenant_id
stages_percent: [1, 5, 10, 25, 50, 100]
minimum_bake_minutes: [30, 60, 120, 240, 480, 1440]
automatic_rollback: true
This manifest does three useful things.
First, it prevents a release from being described as merely “the new model” or “the prompt update.” Second, it gives every trace and evaluation run a stable join key. Third, it makes rollback precise: restore the previous bundle ID and its compatible runtime dependencies.
Store release manifests in version control. Protect the production branch or release directory with review requirements and status checks. GitHub protected branches are one implementation example; the broader control is that no one should be able to silently replace production release history or bypass required evidence without leaving an auditable exception.
Run Offline Evaluations Before Production Traffic
Offline evaluation is the first release gate, not the final proof of production safety. Its job is to reject obvious regressions, measure known failure modes, and establish a candidate baseline before real traffic is involved.
OpenAI’s current evaluation guidance uses a practical sequence: define the objective, collect a dataset, define metrics, then run and compare evaluations. That sequence is platform-neutral and should be applied to the complete AI workflow, not only to the final text response.
Build a Representative Evaluation Set
Use a mixture of:
- Historical production requests with sensitive data removed or appropriately controlled.
- High-volume normal cases.
- Known incidents and prior regressions.
- Boundary and adversarial cases.
- Tool-call cases, including invalid parameters and downstream errors.
- Long-running, multi-turn, and stateful cases.
- High-consequence tasks requiring refusal, escalation, or approval.
- Cases from new customer, language, tenant, or workload segments.
Keep a held-out regression set that is not repeatedly tuned against. When the team fixes a production failure, add a sanitized representation of that failure to the permanent regression suite.
Compare Stable and Candidate on the Same Inputs
Run the stable and candidate bundle against the same dataset, with enough repeated trials to reveal variability for non-deterministic tasks. Record both absolute performance and the difference from stable.
A candidate can pass an absolute threshold and still be a regression. For example, a 94 percent policy-adherence score may look acceptable until the stable release is measured at 99.7 percent.
Evaluate Workflow Behavior, Not Only Final Answers
For agent and tool-using systems, score:
- Correct final outcome.
- Evidence completeness and factual support.
- Required refusal or escalation behavior.
- Tool selection.
- Tool argument correctness.
- Number of model turns and tool calls.
- Duplicate or cyclical actions.
- Approval routing.
- State transitions.
- Recovery after tool failure.
- Latency and cost per successful task.
OpenAI’s trace-grading guidance reflects this broader view by scoring the end-to-end trace of decisions, tool calls, and workflow steps. The exact grading product is optional. The operating requirement is not optional: the release gate must be able to detect a candidate that reaches an acceptable final answer through an unsafe, expensive, or unstable path.
Define Quality Thresholds Before Running the Test
The following values are examples, not universal defaults. Set thresholds from service risk, stable performance, sample size, and business tolerance.
| Evaluation dimension | Example promotion gate | Example hard rejection |
|---|---|---|
| Critical policy adherence | No statistically meaningful regression from stable | Any confirmed prohibited action or data disclosure |
| Task success | Candidate is at least stable minus 0.5 percentage points | Regression greater than approved tolerance |
| Tool argument validity | At least 99.5 percent for production writes | Any malformed destructive request reaching execution path |
| Evidence completeness | At least stable performance | Missing mandatory evidence in a high-risk decision |
| Refusal and escalation | Meets scenario-specific target | Candidate proceeds when escalation is mandatory |
| Cost per successful task | No more than 10 percent above approved budget | Runaway loop or budget breach |
| High-percentile latency | Within service objective | Sustained timeout or queue saturation risk |
| Retry and loop rate | No material increase from stable | Repeated no-state-change cycle |
Do not allow the candidate’s author to change thresholds after seeing a failed result without a documented review. A moving gate is not a gate.
Use Shadow Traffic to Expose Production Reality
Offline datasets are controlled. Production traffic is not. Shadowing sends a copy of selected production inputs to the candidate while the stable bundle continues to serve the user.
Argo Rollouts documents traffic mirroring as a progressive-delivery capability, and the same pattern applies to AI gateways even when Kubernetes is not involved. The candidate observes real request shape, concurrency, context size, tenant mix, retrieval behavior, and downstream latency without becoming the system of record.
Shadow the Complete Input Envelope
A useful shadow request includes the inputs that materially affect behavior:
- User or workload request.
- Authorized identity and tenant context.
- Conversation or workflow state, copied safely.
- Retrieval query and approved source boundary.
- Tool catalog visible to the stable release.
- Policy context and risk class.
- Runtime limits and timeout budget.
Do not send secrets, unnecessary personal data, or raw sensitive content merely because shadowing is “non-production.” Shadow infrastructure is still production-adjacent and must follow data classification, access, encryption, and retention rules.
Neutralize Side Effects
Use one of four patterns for candidate tools:
- Block: return a policy result that records what the candidate attempted.
- Simulate: run deterministic validation and return a synthetic outcome.
- Sandbox: execute against isolated test resources with production-shaped data.
- Dry run: ask the downstream system to validate the operation without committing it.
Tag every shadow tool result so the candidate cannot confuse simulation with a real committed action.
Compare Stable and Candidate Traces
Do not compare text with a simple string match. Compare structured outcomes:
- Same or different intent classification.
- Same or different retrieval sources.
- Same or different tool selection.
- Argument-level differences.
- Policy decision differences.
- Number and ordering of steps.
- Latency and token differences.
- Final outcome category.
- Human-review requirement.
A candidate may produce better prose while retrieving weaker evidence or attempting broader tool access. Shadow analysis should surface that before the candidate is allowed to act.
Start a Sticky, Bounded Production Canary
Once offline and shadow gates pass, route a small, stable cohort to the candidate. A canary is not random sampling on every request. Stateful AI workflows need sticky assignment so one conversation, user, tenant, job, or case does not switch bundles midway through execution.
Use a cohort key aligned to the state boundary:
- Conversation ID for chat sessions.
- Case or ticket ID for service workflows.
- Tenant ID for tenant-isolated systems.
- Job ID for asynchronous agents.
- User ID only when user-level consistency is appropriate.
The following Python example shows deterministic assignment. It is intentionally small, but it illustrates three production requirements: a stable hash, a release-specific salt, and an immediate override back to stable.
from __future__ import annotations
import hashlib
from dataclasses import dataclass
@dataclass(frozen=True)
class RolloutPolicy:
candidate_percent: int
release_salt: str
force_stable: bool = False
def __post_init__(self) -> None:
if not 0 <= self.candidate_percent <= 100:
raise ValueError("candidate_percent must be between 0 and 100")
def select_bundle(cohort_key: str, policy: RolloutPolicy) -> str:
"""Return 'candidate' or 'stable' with deterministic cohort stickiness."""
if policy.force_stable or policy.candidate_percent == 0:
return "stable"
material = f"{policy.release_salt}:{cohort_key}".encode("utf-8")
bucket = int.from_bytes(hashlib.sha256(material).digest()[:8], "big") % 10_000
threshold = policy.candidate_percent * 100
return "candidate" if bucket < threshold else "stable"
Change cohort_key to the identifier that owns session state in your system. Change release_salt for each candidate release so the canary cohort can be intentionally reshuffled between releases. Set force_stable from a highly available control-plane setting that can be changed without rebuilding the application.
Successful execution means the same cohort stays on one bundle for the release, the observed percentage is close to the configured target at sufficient volume, and a rollback flag routes new work to stable immediately.
Common failures include using Python’s process-randomized hash() function, choosing a cohort key that changes between turns, caching the decision longer than the rollback control, and allowing a session started on the candidate to resume on stable without state compatibility checks.
Use Risk-Based Canary Steps
A reasonable sequence for a high-volume service might be 1, 5, 10, 25, 50, then 100 percent. Low-volume or high-consequence services need a different approach. They may require a named pilot cohort, longer observation windows, manual approval, synthetic traffic, or a bounded workflow type rather than a percentage.
AWS SageMaker’s deployment guardrails illustrate the core progressive-delivery pattern: shift a bounded portion of traffic, observe a baking period, and automatically return traffic to the previous fleet when alarms trigger. The specific platform is less important than the operational behavior.
Do not promote simply because the bake timer expired. Time is a minimum observation window, not evidence by itself. Require enough completed tasks, representative workload coverage, and stable metric confidence.
Compare Traces, Outcomes, and Service Health
A production canary needs four classes of evidence.
Service Reliability
Track:
- Request error rate.
- Timeout rate.
- Queue depth and saturation.
- Model-provider errors and throttling.
- Tool availability and dependency failures.
- State persistence errors.
- High-percentile latency.
AI Quality and Safety
Track:
- Task success or acceptance.
- Correct refusal and escalation.
- Evidence or citation completeness.
- Policy violations.
- Unsupported or contradictory answers.
- Human override, rejection, and correction rates.
- High-risk action approval outcomes.
Agent and Tool Behavior
Track:
- Tool choice distribution.
- Tool argument validation failures.
- Write-action rate.
- Tool retries and duplicate calls.
- Agent turns and loop detection.
- Handoffs and fallback use.
- Approval requests per task.
- Side-effect success and compensation outcomes.
Cost and Capacity
Track:
- Input, cached-input, output, and reasoning tokens where available.
- Model cost per successful task.
- Tool and retrieval cost.
- Average and high-percentile number of model calls.
- Candidate capacity headroom.
- Stable capacity retained for rollback.
OpenTelemetry’s GenAI conventions are useful because they standardize common model, token, and tool attributes across telemetry pipelines. Do not capture full prompts, tool arguments, or results by default. Those fields can contain credentials, regulated data, customer content, and internal system details. Capture metadata by default, then enable content capture only through an explicit security and privacy decision.
Every release gate should return one of three states:
- Promote: the candidate met all required gates and has sufficient evidence.
- Hold: no hard failure occurred, but evidence is incomplete, noisy, or near a threshold.
- Rollback: a hard trigger fired or the authorized incident lead determined that continued exposure is unacceptable.
Hard Automatic Rollback Triggers
These conditions should normally stop candidate assignment without waiting for manual interpretation:
- Confirmed sensitive-data disclosure caused by the candidate.
- Unauthorized or prohibited tool invocation.
- Destructive action outside approved scope.
- State corruption or incompatible state writes.
- Critical policy, security, or compliance violation.
- Candidate-caused severe availability incident.
- Runaway agent loop beyond a hard execution budget.
- Inability to observe or attribute candidate behavior.
- Loss of the stable rollback path or stable capacity.
Hold and Review Triggers
These conditions usually pause promotion while retaining the current bounded canary:
- Quality score near the lower confidence bound.
- Increased human correction or rejection rate.
- Cost per successful task above target but below emergency limit.
- Higher tool retry or fallback rate.
- Unexplained trace divergence.
- Insufficient volume in a critical workload segment.
- A provider, retrieval, or tool dependency incident that makes comparison unreliable.
Example Machine-Readable Gate Policy
release_gates:
hard_rollback:
sensitive_data_incidents: 0
unauthorized_tool_calls: 0
state_corruption_events: 0
runaway_runs: 0
promote_only_if:
minimum_completed_tasks: 2000
task_success_delta_pp: ">= -0.5"
policy_adherence_delta_pp: ">= 0.0"
p95_latency_delta_percent: "<= 10"
cost_per_success_delta_percent: "<= 10"
tool_validation_failure_rate: "<= 0.5%"
hold_if:
minimum_segment_coverage_missing: true
metric_confidence_low: true
dependency_incident_active: true
rollback_behavior:
stop_new_candidate_assignments: true
preserve_candidate_traces: true
require_stable_health_check: true
open_incident_for_hard_trigger: true
The team should change these fields to match its service. The important controls are zero tolerance for defined catastrophic events, explicit relative comparison with stable, minimum volume, segment coverage, and a deterministic rollback action.
Execute Rollback as a Controlled Operational Event
Rollback is not one command. It is a sequence that restores service, contains side effects, protects evidence, and confirms that the stable release is actually healthy.
Stop New Candidate Assignment
Set the release gateway to stable-only. Confirm the change at the routing layer, not only in the deployment pipeline. Watch the candidate request count fall to zero for new work.
Contain In-Flight Work
Classify active candidate runs:
- Safe to complete on candidate.
- Safe to cancel and retry on stable.
- Requires compensation for a partial side effect.
- Requires human review before continuing.
- Cannot be replayed because the action is irreversible.
Do not blindly replay a write workflow. A retry can duplicate a message, ticket update, financial action, infrastructure change, or customer communication.
Restore the Stable Bundle
Restore every relevant component:
- Model route.
- Prompt and examples.
- Tool catalog and schemas.
- Tool adapter and permissions.
- Retrieval index and ranking configuration.
- Policy and approval rules.
- Orchestration code and runtime limits.
- State reader or migration path.
A model-only rollback is incomplete when the prompt or tool contract caused the regression.
Validate Stable Health
Run a focused smoke suite and observe live stable traffic. Confirm:
- Stable bundle ID is present in traces.
- Error and timeout rates return to expected range.
- Tool calls use the stable schema.
- State reads and writes succeed.
- High-risk policy checks operate normally.
- No candidate traffic remains except intentionally preserved diagnostic work.
- Stable capacity can absorb full load.
Preserve Evidence Before Cleanup
Do not delete the candidate deployment, traces, evaluation results, or release manifest until the incident owner confirms that evidence is preserved. Quarantine the candidate so it cannot receive traffic while keeping enough state to reproduce the failure.
Communicate the Operational State
Record:
- Release ID and candidate exposure window.
- Trigger that caused rollback.
- Cohorts and task types affected.
- Known or possible side effects.
- Stable restoration time.
- Validation result.
- Owner of follow-up investigation.
For customer-impacting or security-relevant incidents, follow the existing incident, privacy, legal, and communications process. Do not invent a separate AI-only process that bypasses enterprise incident management.
Use a Rollback Decision Tree
The following decision tree helps operators separate an immediate safety rollback from a promotion hold or a normal defect review.
The decision tree is intentionally conservative. Promotion can wait. A critical safety or integrity failure cannot.
Retain the Evidence Needed to Explain the Release
Evidence retention should make the release reconstructable without turning the observability platform into an uncontrolled archive of sensitive prompts and tool payloads.
NIST’s AI risk guidance emphasizes continuous measurement, documented limits, post-deployment monitoring, recovery, change management, and the ability to deactivate systems that perform outside intended use. In release operations, that translates into retaining the evidence that connects a change to its approval, behavior, impact, and disposition.
Retain at least:
| Evidence artifact | Why it matters |
|---|---|
| Stable and candidate release manifests | Reconstructs the actual behavior bundles |
| Source commit, build digest, and dependency lock | Proves what code and packages ran |
| Prompt and tool schema hashes | Detects mutable configuration or silent edits |
| Evaluation dataset and grader versions | Makes pre-release results reproducible |
| Offline comparison results | Shows why the candidate was approved |
| Shadow comparison summary | Captures production-distribution differences |
| Canary stage history | Shows exposure, timing, volume, and decisions |
| Aggregated metrics and selected traces | Supports causal analysis and audit |
| Approval and exception records | Shows who accepted which release risk |
| Rollback event and stable validation | Proves restoration and recovery |
| Side-effect reconciliation record | Tracks duplicate, partial, or compensated actions |
| Post-release or incident review | Converts the failure into a permanent control |
Use data minimization. Store identifiers, hashes, metrics, decisions, and redacted exemplars when they are sufficient. Restrict full-content traces to narrowly authorized investigation stores, encrypt them, apply retention limits, and record access.
Handle State and Irreversible Actions Explicitly
State is where otherwise clean rollback plans fail.
A candidate may write conversation state, memory, workflow checkpoints, tool outputs, approval records, or schema changes that the stable release cannot read. Before canary, classify state changes as:
- Backward compatible: stable can read candidate-written state.
- Dual write: candidate writes old and new formats during rollout.
- Migratable: a tested downgrade or restore process exists.
- Forward only: rollback requires session isolation or abandonment.
- External side effect: state changed in another system and needs reconciliation.
For high-risk releases, keep existing sessions on their starting bundle while routing only new sessions to the canary. That reduces cross-version state mixing. The tradeoff is that rollback may require allowing some candidate sessions to finish under containment, so define that behavior before release.
Irreversible actions need stricter controls. A candidate that can send notifications, delete data, transfer money, rotate credentials, change network policy, or approve business decisions should begin with shadowed plans, read-only execution, human approval, or a narrowly bounded pilot. Canary percentage alone does not make an irreversible action safe.
Common Failure Modes and Troubleshooting
The Candidate Passed Offline but Failed Immediately in Production
Likely causes include unrepresented tenant data, concurrency, long context, provider throttling, stale retrieval, or tool latency. Add the production failure pattern to the regression suite, then improve workload segmentation and shadow coverage.
Shadow Results Look Good but the Canary Fails
The shadow environment may have blocked the behavior that actually failed, such as a write tool, approval path, state update, or downstream authorization check. Improve simulation fidelity and add controlled sandbox execution for the missing path.
Canary Metrics Look Better Because the Cohort Is Easier
Random or internal-only cohorts can hide difficult traffic. Compare task, tenant, language, risk, and input-size distributions between stable and candidate. Use stratified cohort selection or require segment-level gates.
The Rollback Flag Changed but Candidate Traffic Continued
Routing decisions may be cached in application workers, sessions, service meshes, or edge layers. Define cache invalidation and maximum propagation time. Monitor actual bundle IDs in traces rather than trusting the control-plane setting.
The Stable Release Cannot Resume Candidate Sessions
The candidate wrote incompatible state. Isolate affected sessions, use a compatibility adapter, restore from a stable checkpoint, or route those sessions to a quarantined candidate runtime under incident control. Do not force stable to parse unknown state without validation.
Tool Calls Increased Without a Quality Change
A model or prompt change may be reaching the same answer through a longer plan. Trace comparison should detect increased calls, retries, and duplicate actions. Treat cost and tool side effects as release-quality dimensions, not as later optimization work.
The Candidate Model Changed Without a Release
Some provider aliases can resolve to updated model behavior. Record both the requested model and the provider-reported response model. Prefer immutable model identifiers where available, and trigger a controlled re-evaluation when the provider changes the resolved model or announces a material behavior update.
Low Traffic Prevents Statistical Confidence
Use longer bake windows, synthetic production-shaped traffic, named pilot cohorts, paired expert review, and risk-based manual gates. Do not compensate for low evidence by sending a larger percentage of high-consequence traffic to the candidate.
Operational Ownership Model
| Capability | Accountable owner | Responsible operator | Required evidence |
|---|---|---|---|
| Release bundle and version history | AI platform owner | AI engineering | Manifest, commit, artifact digest |
| Offline evaluation | Product or model quality owner | Evaluation engineering | Dataset, graders, results, exceptions |
| Traffic routing and rollback | Service owner | SRE or platform operations | Stage history, routing state, rollback test |
| Tool and policy safety | Security or control owner | Tool platform and AI engineering | Tool diff, policy decision, approval record |
| Production observability | Service owner | Observability platform | Metrics, traces, retention controls |
| Incident command | Business service owner | On-call incident lead | Timeline, impact, decisions, recovery validation |
| Post-release review | Service owner | Cross-functional review team | Findings, corrective actions, regression tests |
The AI team should not be the only group capable of stopping the release. SRE, security, or incident command must be able to force stable routing when their defined trigger fires.
Production Runbook Checklist
Before Release
- Stable and candidate bundles have immutable IDs.
- Model, prompt, tool, retrieval, policy, runtime, and state versions are recorded.
- Offline evaluation passed predefined absolute and relative gates.
- Critical failure cases have zero-tolerance checks.
- Shadow execution cannot produce real side effects.
- Stable and candidate telemetry is comparable.
- Canary cohort key is sticky and aligned to state ownership.
- Stable capacity is retained for immediate rollback.
- Rollback was tested with the current state and tool versions.
- Release, security, service, and incident owners are named.
During Shadow and Canary
- Candidate bundle ID is visible in every trace.
- Workload and segment distribution is representative.
- Final outcomes and complete traces are compared.
- Safety, quality, reliability, tool, state, and cost gates are active.
- Promotion requires minimum volume and bake time.
- Hard triggers automatically stop new candidate assignment.
- In-flight work and side effects are continuously reconcilable.
- Full-content telemetry remains minimized and access controlled.
During Rollback
- New candidate assignment is disabled.
- In-flight candidate runs are classified and contained.
- The complete stable bundle is restored.
- State compatibility and external side effects are checked.
- Stable health is validated under full production load.
- Candidate evidence is preserved before cleanup.
- Affected cohorts, tasks, and actions are identified.
- Incident and stakeholder communications are completed.
After Release or Rollback
- Extended bake metrics are reviewed.
- Evaluation gaps are converted into new regression cases.
- Thresholds are reviewed without weakening them to excuse failure.
- Evidence is retained under the approved policy.
- Release ownership and response performance are reviewed.
- The next release starts from the last verified stable bundle.
Conclusion
A safe AI release process does not ask whether a model, prompt, or tool change appears small. It asks which behavior bundle changed, how that change was evaluated, what production evidence will prove it, and how the service will return to a known-good state when the evidence turns negative.
The practical sequence is disciplined and repeatable: version the entire bundle, compare it with stable offline, shadow real production inputs without side effects, canary a sticky cohort, evaluate full traces and business outcomes, promote only through predefined gates, and roll back automatically when a hard trigger fires.
The most important rollback lesson is simple: restore the system that produced the known-good behavior. Reverting one visible component while leaving incompatible prompts, tools, policies, retrieval settings, runtime code, or state in place is not a rollback. It is another untested release.
Production AI will always contain uncertainty. Progressive delivery turns that uncertainty into a bounded, observable, and reversible operating process.
