mirror of
https://github.com/openai/codex.git
synced 2026-11-12 21:20:34 +00:00
Preserve turn attribution across recovery and compaction (#51402)
## Why Recovering an interrupted turn replaced its original trigger with `retry` and restored only its root lineage from model context. Turns suspended before that context was written could lose their attribution entirely. ## What changed - Persist regular-turn attribution in `TurnStartedEvent` and compaction resume metadata, including the trigger, parent and root turn IDs, and initiating agent path. - Restore matching attribution during recovery, keep unknown triggers absent, and retain the model-context root fallback for older records. - Reconstruct attribution from surviving turns across rollback and late completion or abort events, and clear inherited attribution when spawning a forked agent. ## Testing Add coverage for repeated cold recovery, suspension before context persistence, legacy rollouts, fresh attribution on subsequent turns, compaction checkpoints, rollback, and late terminal events. GitOrigin-RevId: 85b5763e8fbd48a1ea2c07cfda8196e63c2cd33a
This commit is contained in:
@@ -474,16 +474,9 @@ impl CodexThread {
|
||||
trace,
|
||||
cyber_access_program,
|
||||
} = request;
|
||||
let root_turn_id = self
|
||||
.session
|
||||
.reference_context_item()
|
||||
.await
|
||||
.filter(|context| context.turn_id.as_deref() == Some(turn_id.as_str()))
|
||||
.and_then(|context| context.root_turn_id);
|
||||
let start_options = TurnStartOptions {
|
||||
cyber_access_program,
|
||||
root_turn_id,
|
||||
..Default::default()
|
||||
..self.session.recovered_turn_start_options(&turn_id).await
|
||||
};
|
||||
match self
|
||||
.io
|
||||
|
||||
Reference in New Issue
Block a user