Preserve requested approval reviewers across policy overrides (#59272)

## Why

A model requirement can force `auto_review` even when the requested reviewer is `user`. Persisting or sending that effective value back as an explicit choice loses the original selection, so removing the requirement cannot restore it on resume.

## What changed

- Retain `requested_approvals_reviewer` separately from the effective reviewer in configuration and thread settings, with a fallback for older histories.
- Restore the requested reviewer on resume while applying current model requirements and reviewer allowlists.
- Let ordinary TUI turns, continuations, retries, and forks inherit the server's reviewer instead of echoing its effective value as an explicit request.
- Preserve a worker's requested reviewer when reloading it rather than inheriting the sender's selection.

## Testing

Extend resume coverage for explicit `auto_review`, removal of a model requirement, and a tightened reviewer allowlist. Update TUI assertions for omitted reviewer overrides and verify worker reload preserves its reviewer.

GitOrigin-RevId: d8c9c3a7b89e55e63f0e8ae210d6a87cb5547933
This commit is contained in:
ioanbudea-OAI
2026-11-04 00:31:24 +00:00
committed by copyberry
parent 1685f2d621
commit c141c31323
22 changed files with 158 additions and 36 deletions
+5
View File
@@ -2483,6 +2483,11 @@ pub struct ThreadSettingsSnapshot {
pub service_tier: Option<String>,
pub approval_policy: AskForApproval,
pub approvals_reviewer: ApprovalsReviewer,
/// Original selection before managed policy resolved the effective reviewer.
/// Older histories contain only `approvals_reviewer`.
#[serde(default, skip_serializing_if = "Option::is_none")]
#[ts(optional)]
pub requested_approvals_reviewer: Option<ApprovalsReviewer>,
pub permission_profile: PermissionProfile,
#[serde(default, skip_serializing_if = "Option::is_none")]
#[ts(optional)]