11c5aae104
A captured native-compaction checkpoint lives in the persisted codex_reasoning_items sidecar, but the wire restructure that follows it (prune_pre_checkpoint_items) ran unconditionally: the native gate only decided whether context_management went into the request, and no signal from it ever reached _chat_messages_to_responses_input. So a single checkpoint kept deleting every pre-checkpoint item from all later requests — after a mid-session swap out of the gpt-5.6 family, after compression.enabled: false, after the rejection kill switch, and after a session resume that reloads the sidecar from state.db. The model receiving the opaque blob was no longer the one able to decode it, and nothing was logged. Thread a single native_compaction_eligible boolean, derived from the same value that gates the context_management field, into the converter. When ineligible: do not replay type: "compaction" items and do not prune. Safe because native compaction never truncates Hermes' local history, so the fallback still carries the full conversation. All Responses call sites are covered: build_kwargs and convert_messages derive the flag via _native_compaction_active, the auxiliary/compression client is explicitly ineligible, and the converter defaults to False (pre-feature wire) so future call sites are safe by construction. Fixes #85914 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>