True when a chunk carries content the model actually produced.
One shared predicate, so a time-to-first-token measurement and a "did this stream produce anything" check cannot disagree. An empty delta and an empty tool-call frame do NOT count: providers emit both as keepalives, and counting them would report a first token that never arrived.
The LLM seam — public surface.
P3.1 in full: the stream contract, the fold, the typed failure taxonomy, the reconstructable-request path, the adapter registry with its per-call pin, the runtime that dispatches and records, and native provider wire adapters.
The invariant this seam exists to protect: an adapter translates a wire format into StreamChunks and stops. It does not assemble, it does not decide what is retryable, it does not choose whether the grammar applies, and it does not read a credential from anywhere but its argument. All of those are decided once, here, so that what gets signed is a function of what the provider actually sent.
There is still no retry EXECUTOR. Nothing here sleeps, counts attempts or reopens a turn: turn-boundary retry belongs to the agent loop (P3.2), which is what can durably record a second attempt. What this seam provides is the typed failure, the frozen policy, and the signed row a retry decision reads.