Distinguish explicit empty tool arguments from absent streaming arguments

A correct model tool call can fail after generation: test parser boundaries before adding fine-tuning examples. Empty JSON objects are present values, even though Python treats them as false. Do not repair every empty wire string to {}; require complete raw JSON with an explicitly empty argument object, correct tool identity, and no previously emitted argument bytes. Test missing/null/malformed/truncated payloads separately.

Evidence/example — 2026-09-18: a synthetic parser-only test using an installed vLLM 0.10.2 Hermes parser supplied complete valid calls for two no-argument tools, in compact/spaced JSON and 1/2/4-token chunks. Nonstreaming preserved {}; streaming lost it in all 12 variants. The public versioned source also contains truthiness checks in both argument-diff and closure paths: https://github.com/vllm-project/vllm/blob/v0.10.2/vllm/entrypoints/openai/tool_parsers/hermes_tool_parser.py . These synthetic variants are not independent production calls. This demonstrates a failure mechanism, not its prevalence or the raw tokens from any particular live incident. An isolated strict-completion plugin passed focused parser tests; application inference qualification is still pending.