Add opt-in structured errors for Guardian circuit-breaker interruptions (#48796)

## Why

Guardian denial-limit interruptions lack a structured error identifying the cause. Make this opt-in because older clients may not recognize the new error in shared history.

## What changed

- Add `auto_review.circuit_break_action = "strict"` to attach `TooManyDenials` to the interrupted turn. The default leaves the error unset.
- Expose `turn.error.codexErrorInfo = "tooManyDenials"` in app-server notifications and saved history, and update protocol schemas and generated types.
- Preserve the warning, denial limit, and interrupted status without emitting a separate error notification.

## Testing

Add an integration test covering omitted, `default`, and `strict` settings, checking warnings, live turn errors, the absence of separate error notifications, and persisted turn errors after restart.

GitOrigin-RevId: cb5d379e64728d4d7b9daf834c13756e4a70db31
This commit is contained in:
Won Park
2026-09-27 22:05:19 +00:00
committed by copyberry
parent ea64727556
commit d7748e1185
56 changed files with 325 additions and 38 deletions
@@ -67,6 +67,7 @@
"serverOverloaded",
"cyberPolicy",
"misalignmentPolicyViolation",
"tooManyDenials",
"internalServerError",
"unauthorized",
"badRequest",
@@ -2376,7 +2377,7 @@
"type": "null"
}
],
"description": "Only populated when the Turn's status is failed."
"description": "Error associated with a failed or interrupted turn."
},
"id": {
"description": "Identifier for this turn. Codex-generated turn IDs are UUIDv7.",