A switch you have not fired is a hypothesis. The drill converts it into a fact, and it runs with real traffic, on a schedule, with a written acceptance result. Incident response practice draws the line clearly: a tabletop is discussion-based and touches no production systems, while a functional exercise has participants perform assigned tasks in a simulated or controlled environment per the exercise taxonomy. A kill switch test is a functional exercise. Sitting in a room agreeing that someone would flip the flag proves nothing about the flag.
Run it in this order:
- Record the baseline. For ten minutes, note requests per minute, success rate, error rate and average cost per completed task.
- Fire a canary request. Send one request that exercises the full path (model call, tool call, egress) and confirm it succeeds. Flip the flag as the named role, resend the identical request, and confirm it fails with your distinct error code while the log entry names the actor.
- Watch the error rate move. Confirm admitted traffic drops to zero, or to the stated floor if a soft stop holds sessions. If other features on the shared gateway also fail, your gate is too wide.
- Check the side paths. Confirm queued jobs are drained or held, egress attempts fail from inside the runtime, and no background process still calls the model directly.
- Restore and measure restart time. Flip back as the designated restart approver, resend the canary, and record how long until traffic returns to baseline.
- Write the acceptance report. Record observed coverage, timing and persistence per the operational framing, with the canary request IDs attached.
State the target before the drill. A workable one for an internal feature: error rate for the feature reaches zero within the time to change a config value plus the cache TTL, and the stop event appears in the log in the same window. Then quote it in the runbook. Add two checks that catch what a first drill misses: test revocation while a task is still running to see how the application handles its next failed authenticated request, and repeat the drill after any change to the gateway, egress configuration or agent framework, because the test is only valid for the configuration you tested per the sandbox guide.
A worked example with numbers
Suppose the invoice agent handles 1,200 requests per hour at peak and the gateway caches the kill flag for 30 seconds. The switch is flipped at 14:00:00. Requests admitted after 14:00:30 fail; requests admitted between the flip and cache expiry proceed. At roughly 20 requests per second, about 600 requests fall in that gap. Those are the "in flight at flip time" requests, and your stop scope should say whether the gate holds them or lets them complete.
Now cost. If measured cost per completed task is $0.40 at a 90 percent success rate, the expected model cost per solved task is about $0.44, because attempt cost is divided by success rate per the cost-per-task formula. If an incident drives success to 40 percent at the same attempt cost, cost per solved task rises to about $1.00 for the same work while the failed attempts accrue in real dollars. That is why the spend breaker should trip on cost per solved task, not total spend alone per the cost-per-task ledger.
Finally, decide in advance which results justify a kill versus a scale. A scorecard that marks each metric green, amber or red and refuses to let a high average hide a safety or auditability failure gives you shared vocabulary for the day-30 conversation per the kill-or-scale scorecard. The kill switch is the mechanism that enforces the red.