You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The reference-transaction guard now protects work that is genuinely published rather than work that merely looks published: it resolves each branch's true upstream from that branch's own local remote/merge pairing instead of @{upstream}, which an agent lane deliberately aims back at the branch itself. Ordinary amends, rebases, and soft resets of unpublished commits are no longer refused, while a rewind that would discard upstream-merged commits now is.
The same guard stops trusting the old value git reports on the hook's stdin. Git reports the value the caller declared, and git update-ref <ref> <new> declares none, so that field arrives as the zero OID and a rewind read as a branch creation; the guard now reads the branch tip from the ref itself during the prepared state, closing a path that silently moved a branch backwards over published history with no diagnostic.
A declared upstream that cannot be resolved — an unfetched remote, a renamed or pruned remote, a bare URL in branch.<name>.remote — is now told apart from a branch that tracks nothing at all. Appends still pass, because they abandon nothing whatever the upstream holds, so an unfetched lane is never stranded; a rewind is refused with a message naming the unresolvable ref, so an unreachable remote can no longer read as a clean bill of health.
Images produced by Codex tools render in Serve again. When Codex moved its shell tool from function_call_output to custom_tool_call_output, every screenshot it produced was reclassified as a picture the assistant had sent, and Serve minted an embedded URL its own fetcher then refused — a broken picture sitting in the operator's lane. The presenter and the fetcher now consult one shared addressability rule, so the two answers cannot disagree.
A Drain lane that stops while still holding a claim is restarted onto that same task, so a lane that ices mid-task recovers the row it was working instead of idling until an operator notices.
An empty task board now reads as a completed drain that names each parked category and why it is parked, instead of reading as a lookup failure or as work the agent failed to pick up.
spice release composes the generated sections of the release notes at publication against the real release commit, and refuses a candidate file that still carries the draft banner, still holds the generated Highlights placeholder, or whose curated region contains nothing but banner and headings — an uncurated release can no longer ship.
policy.admission is now admitted into the typed configuration registry, so it is resolved, validated, and reported like every other typed configuration key.
spice agent activation no longer advances the git tree as a side effect of delivering its packet, and the post-tool hook keeps inline ACK keys out of the durable transcript.