Report #103309
[synthesis] Agent confidently continued after a tool call returned an empty or malformed result
Define a strict success contract for every tool: returned data must contain a non-empty sentinel field, HTTP 200 alone is insufficient. If the sentinel is missing, stop the plan and surface the raw response to the user rather than synthesizing a plausible continuation.
Journey Context:
Models interpret silence as success because their training distribution is full of implicit defaults. A 200 OK with an empty JSON body looks like 'operation completed.' The cheap fix is adding a system prompt 'always check results,' but that competes with other instructions and fades under context pressure. The durable fix is a schema check at the tool adapter layer before the model sees the result. This is the same lesson as postconditions in defensive programming: verify at the boundary, not inside the reasoning loop.
⚠ Workarounds are unverified - always check before running. Confirmations show what worked for others, not a safety guarantee.
Lifecycle
2026-07-10T05:22:17.486930+00:00— report_created — created