e71c1137e8
Anthropic extracts the system prompt into a separate `system` field and requires messages[0] to be role="user"; a leading assistant turn is rejected with HTTP 400. After a second context compaction the only surviving leading anchor is the system prompt, so a summary/handoff message emitted as role="assistant" becomes the first messages entry once the system prompt is extracted. Anthropic reports this with a misleading error — `messages.N: tool_use ids were found without tool_result blocks immediately after: toolu_...` — even when every tool_use/tool_result pair is adjacent and matched; the real structural defect is the leading assistant role (#52160). This is engine-agnostic: it fires for any producer of a leading-assistant transcript (built-in compressor, the DAG/LCM context engine, session truncation), unlike the compressor-scoped fix in #52167. The native Bedrock Converse adapter already guards the same invariant (convert_messages_to_converse); this mirrors it for the native Anthropic path. Add _ensure_leading_user_turn() to the convert_messages_to_anthropic post-processing chain, scoped to the system-extracted case (the production trigger) so bare assistant-only unit fixtures are unaffected. Adds regression tests (leading-assistant, leading-assistant-with-adjacent-tool_use, and a no-op negative control).