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 authored and copyberry committed 2026-08-26 18:42:44 +00:00
1 parent 0e9a2bae52
commit 7276d67081
63 files changed
+1604 -15

No files matched your search

@@ -5669,6 +5669,7 @@ fn stored_turn_to_api_turn(
StoredTurnStatus::InProgress => TurnStatus::InProgress,
};
let error = turn.error.map(|error| TurnError {
misalignment: None,
message: error.message,
codex_error_info: error.codex_error_info,
additional_details: error.additional_details,