lakehouse/auditor 11 blocking issues: cloud: claim not backed — "Verified live after deploy: tool_calls returned (finish_reason tool_calls); plain request"
/v1/chat/completions deserialized into a struct without tools/tool_choice and messages without tool_calls/tool_call_id, so serde silently DROPPED them. Tool-using agents routed through :3100 (openclaw, 2026-09-18) never saw their tools and fabricated tool output as text. - ChatRequest: tools + tool_choice (serde default). Message: tool_calls, tool_call_id, name (skip_serializing_if none -> plain-text JSON is byte-identical; test pins it). - openrouter lane forwards them and returns the model's tool_calls (content null on a tool-call-only turn, finish_reason passed through). - every other provider: HTTP 400 when a request uses tools, instead of silent stripping. Verified live after deploy: tool_calls returned (finish_reason tool_calls); plain request unchanged; ollama + tools -> 400; multi-turn tool result round-trip answered from the tool. cargo test -p gateway --lib: 111 passed. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>