Repository navigation
v1.1.2
No breaking contract changes. SPEC §6.5 now spells out the cancelled deferred call, and
Appendix A gains H21.
Fixed
- Cancel with a deferred call in the batch (SPEC §6.5). When a write tool had already
answereddeferredand a parallel read was still running, cancel left the deferred
tool_callwithout a tool message, and the next run with that history was refused with
unresolved_tool_call. Every terminal status other thanawaiting_toolnow closes such
a call withcancelled; itstool_calls[]entry keeps theoperation_id, so the
harness can cancel the operation (new obligation H21). - Cancel during an image download (SPEC §6.5). The aborted download surfaced as
image_fetch_failedand the run endedfailed; an aborted run now ends by its abort
reason (cancelled, orfailed/run_timeout). - Repeated calls and
max_tool_calls(SPEC §6.7). The limit was checked before repeats
were detected, so a repeat could end the runstopped_limit. Repeats are not executed
and no longer count; the model getsrepeated_calland goes on. - Output estimate without provider usage (SPEC §8.2). Generated tool calls (name and
arguments) are now counted, not only text and reasoning. - Prompt estimate and date lines (SPEC §5.1, §9.4). The per-message date lines from
created_atwere added to the prompt after the estimate, so trimming and
max_total_tokensran on a smaller number than the prompt actually sent.
Example harness
- A new amount updates the pending operation (SPEC §6.4). "Refund 60 instead of 120"
created a second operation and left the card for 120 confirmable. The pending comparison
now matches by the subject (the order); a changed amount updates the operation and bumps
its version. - A callback before the
POST /runsresponse is recorded and applied once the run row
exists; it used to be lost until recovery. - An operation that is already closed (rejected at registration, executed before a
replay) continues the conversation at once instead of leaving the session in
awaiting_tool. - H21: a deferred call closed by
cancelcancels its operation.
Security
- Callback diagnostics. A receiver that echoed the request in its error body could put
theCALLBACK_SECRETvalue, acallback.headersvalue or a callback query value into
last_error, the event journal and stdout. These values are now redacted wherever they
occur, raw, JSON-escaped or URL-encoded.