348e9912ff
Degrading models (observed with gpt-5.6 past ~350K input) emit tool-call batches like 6 valid named calls + 1 blank-name call. Previously the whole turn was voided — every valid call got 'Skipped: another tool call in this turn used an invalid name' — and three such batches tripped the 3-strike stop, killing sessions that were still making progress. Now a mixed batch error-results ONLY the invalid call(s) (terse anti-priming error for blank names per #47967, catalog dump for typos) and dispatches the valid subset for execution. The assistant message keeps every emitted call so provider-side tool_call/result pairing stays intact. The 3-strike counter only advances when a turn contains NO valid call, so a fully-degenerate model still stops while a mostly-coherent one keeps working. Broken JSON args on a never-executing invalid call no longer trigger the whole-turn JSON retry loop. Field evidence: July 2026 debug bundle showed gpt-5.6-sol emitting 6-call batches with one blank-name rider at 559K/384K-token context in two separate sessions; 13 valid tool calls were discarded before the session stopped as partial.