agent/chat_completion_helpers.py::_iteration_summary_api_messages hand-builds
api_messages from canonical history (shallow row copies) and calls
agent._build_api_kwargs directly, bypassing turn_api_request.build_api_request
— the sibling send path where strip_images_for_rejecting_model runs. On main
this went unnoticed because the image-rejection recovery stripped history
itself, so the summary request was image-free by accident. This stack keeps
history intact, so a model recorded in agent._image_rejecting_models would
receive images in the summary request → 4xx → 'max_iterations_no_summary'.
Call strip_images_for_rejecting_model right after the vision eviction, mirroring
build_api_request. Hazard-checked: the strip rebinds the row's content to a new
list (never mutates the nested list shared with history), so the shallow copies
keep history untouched — the new test asserts both the text-only output and the
unchanged history.