Exercise recorded provider tool rounds through a production-shaped loop
- Status: Todo
- Kind: Chore
- Authors: jp
- Date: 2026-08-21
- Label: domain=llm
- Label: package=jp_llm
- Label: type=task
TestRequest::tool_call_response creates a fresh ChatQuery with no tools. Production keeps the full tool list on every streaming cycle and resets a forced choice to Auto after execution.
The mismatch is visible in the fixtures: Ollama says no tool is defined after JP sends a result, and some Google forced-tool follow-ups contain no assistant message. These tests do not cover repeated tool calls or continued tool availability.
Acceptance criteria:
- Add a recorded-provider test path that retains tool definitions across the post-result request, matching
run_turn_loop. - Use a fake executor so the recorded response is produced by the same request, execute, append-result, request cycle used in production.
- Cover a second tool call after the first result.
- Cover parallel calls where the provider supports them.
- Assert that forced choice becomes
Autowhile tools remain declared. - Keep lower-level provider serialization tests where useful, but name them as such.