Expose resumable misalignment details through app server (#40952)

## Why

App-server clients need the explanation and steering instruction returned with a
misalignment policy violation to offer a user-confirmed continuation. Missing or
incomplete details must continue to behave as a terminal block.

## What changed

- Parse optional misalignment classification, explanation, and steering details
  from streamed and HTTP Responses errors and propagate them through core errors.
- Include the details in live app-server `error` and `turn/completed` payloads and
  export the corresponding protocol schemas and TypeScript types.
- Keep explanations and steering messages out of serialized rollout events and
  redact them from debug output.
- Document how clients can resume with `turn/start` after user confirmation.

## Testing

- Cover streamed, HTTP, and WebSocket-wrapped errors, including malformed and
  classification-only details.
- Verify live app-server notifications expose resumable details without writing
  the explanation or steering message to the rollout.

GitOrigin-RevId: 329258a444c2cd91d0c57ab1720830b33ddcfac5
This commit is contained in:
Francis Chalissery
2026-08-26 18:42:44 +00:00
committed by copyberry
parent 0e9a2bae52
commit 7276d67081
63 changed files with 1604 additions and 15 deletions
+5 -1
View File
@@ -1,5 +1,6 @@
use crate::rate_limits::RateLimitError;
use codex_client::TransportError;
use codex_protocol::protocol::MisalignmentErrorDetails;
use http::StatusCode;
use std::time::Duration;
use thiserror::Error;
@@ -35,7 +36,10 @@ pub enum ApiError {
#[error("cyber policy: {message}")]
CyberPolicy { message: String },
#[error("misalignment policy violation: {message}")]
MisalignmentPolicyViolation { message: String },
MisalignmentPolicyViolation {
message: String,
misalignment: Option<MisalignmentErrorDetails>,
},
#[error("server overloaded")]
ServerOverloaded,
}