OptionaldiagnosticWhy the decision is unparseable / empty, for the oracle's message.
OptionaldualNative turns only: the model ALSO returned a parseable Loop envelope alongside its tool calls The tool call still wins — this records that something was discarded.
Whether an envelope was expected and successfully parsed. null when none was expected.
OptionalmessageThe user-facing message, when the agent produced one.
OptionalnarrationNative turns only: prose accompanied the call(s) and was not an envelope (Haiku: 30% of call turns in run 7).
OptionalpayloadPresent when the turn carried a payload change request.
OptionalplaceholderNative turns only: the calls carried empty or placeholder arguments alongside prose — the Sonnet 5 pattern of results §13.3.
OptionalshadowWhat that discarded envelope would have decided, when dualChannel is true.
OptionalstepThe raw nextStep.type exactly as the model wrote it, before any normalization.
Kept because the DECISION and the VALIDITY are different questions. classifyEnvelope is
lenient by design — it infers a kind from the payload when the type is missing or odd, which
is what makes the decision comparable across encodings. But the runtime is not lenient: it
switches case-sensitively on this string and sends anything unrecognized to a forced Retry.
A response can therefore be a perfectly good decision and still be malformed, and
evaluateWellFormed needs the raw value to say so.
True when the envelope declared the task finished.
The normalized decision: everything a corpus case is allowed to assert against.