b6a2b701c1
The salvaged guard from #52276 only fired when a system prompt was present in messages[] (system is not None after extraction). The live repro of #52160 is the auto path: the system prompt is passed outside messages[], so after the second compaction messages[0] is the assistant-role summary with system=None — and the guard never ran. Make _ensure_leading_user_turn unconditional, exactly mirroring the Bedrock Converse adapter ('Converse requires the first message to be from the user' — convert_messages_to_converse). Add a regression test building the exact post-double-compaction shape (no system in messages, messages[0]=assistant summary) asserting the converted payload leads with a user turn, and update existing fixtures that started with a bare assistant message to locate roles instead of indexing result[0].