Why does a trace look normal when a tool returns stale data?
Because every step in the trace did exactly what it was supposed to do. The tool call went out, came back with a success status and a well-formed payload, and the agent read that payload and used it the way it always does. Nothing in the trace’s shape says the data was old rather than current: a stale price, a cached inventory count, or a cursor from an hour ago passes the same schema checks fresh data would.
The staleness lives in the tool or the system behind it, not in the call. A cache that didn’t invalidate, an upstream job that stopped running, or a connection quietly serving a snapshot all produce a response that is syntactically perfect and factually wrong. Catching it means checking the data’s age or comparing it against a source of truth, not reading the trace, because the trace has nothing to disagree with itself about.