Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
22 commits
Select commit Hold shift + click to select a range
a64a585
fix(routing): each turn has its own routing state, and every stream q…
Oct 13, 2026
e84a1df
fix(routing): retain prose receipts with the turn that queued their d…
Oct 13, 2026
eea4e97
fix(routing): a tool-ended turn's ' !' starts its continuation; the r…
Oct 13, 2026
c331c84
fix(routing): a late continuation check starts nothing after stop or …
Oct 13, 2026
393a7e2
docs(changelog): name the modes each part of the fix applies to
Oct 13, 2026
1801ba3
docs(changelog): in explicit mode a late ' !' runs after any turn alr…
Oct 13, 2026
f495c09
fix(routing): log a dropped continuation; tests for a ' !' queued beh…
Oct 13, 2026
38d616b
fix(routing): a ' !' still stands across a framework retry or a re-in…
Oct 13, 2026
c887c04
fix(routing): a carried ' !' reads the earlier stream's routing when …
Oct 13, 2026
36b7a94
refactor(routing): a retry or unstreamed re-inference shares one cont…
Oct 13, 2026
03d6bc3
fix(routing): a retry or re-inference continues its logical turn: the…
Oct 13, 2026
dda3115
fix(routing): the start that consumes unstreamed tool results takes t…
Oct 13, 2026
6dbed48
test(routing): the re-inference tests seed the record the non-streami…
Oct 13, 2026
ee869f3
fix(routing): a silent start and a capacity-held turn keep their logi…
Oct 13, 2026
25a33d5
refactor(routing): an agent's logical turn stays open until the turn …
Oct 13, 2026
78ecd97
fix(routing): only the stream that holds an open logical turn closes …
Oct 13, 2026
6015f2c
fix(routing): a silent start neither continues nor opens the open log…
Oct 13, 2026
ffc3935
fix(routing): a pre-stream failure settles its own start's logical tu…
Oct 13, 2026
b59cf96
test(routing): the silent-start test feeds the continuation by its co…
Oct 13, 2026
8bc2729
docs(routing): settleAgent's summary says it ends a logical turn for …
Oct 13, 2026
4f3f9bf
test(routing): bound the silent-start test's first wait
Oct 13, 2026
39cb205
Merge remote-tracking branch 'origin/main' into fix/fresh-turn-awaits…
Oct 13, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 44 additions & 0 deletions changelog.d/turn-routing-per-turn.fixed.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,44 @@
- In explicit mode, a turn that a tool ends, such as with `skip_reply`, no
longer leaves the prose it queued to run under the next turn's routing
state. Such a turn settles before its earlier rounds' queued deliveries
have posted, and in explicit mode the next turn can start at once. That
start cleared the sticky destination those deliveries read when they
post, so a queued unprefixed segment bounced into the next turn. Each
turn now has its own routing state (the sticky destination, the turn's
destination, hybrid's hold) and its logical turn's ` !` continuation and
receipt tallies (the destinations and suppressed segments its receipt
reports), and a queued delivery keeps the one of the turn that queued
it. In hybrid and
locus mode the ended turn already keeps the next one waiting until its
receipt is written, as before.
- The agent's prose deliveries go out in the order they were written,
across turns: every stream queues its deliveries behind the agent's
earlier ones, a fresh turn's included (apart from a stream that a later
one replaced). A turn's reply, and its completion, can therefore wait for
an earlier turn's posts: up to their request timeouts, one after another,
or for good when `requestTimeoutMs` is 0 and a post is never answered.
- In explicit and hybrid mode, a ` !` continuation that an earlier round
asked for now starts when a tool ends the turn, once that turn's
deliveries have run, unless the framework has stopped or the agent has
been disposed by then (a dropped one is logged). In explicit mode a turn
that another event started meanwhile runs first. Before, hybrid mode
started it only after the next turn, and explicit mode dropped it, or,
when its delivery ran late, started it after the next turn.
- A logical turn now stays open from the start that opens it until the turn
settles (it completes, a tool ends it, or it fails or is abandoned), and
every start that routes prose while it is open continues it: a framework
retry, the start that consumes unstreamed tool results (whichever wake
the scheduler starts it with), the later start a provider-capacity hold
defers a turn to. Each begins the sticky destination and hybrid's hold
afresh, as before, but a ` !` asked for earlier in the turn still stands,
in explicit mode too, and in hybrid and locus mode the receipt at the
turn's end reports every stream's deliveries, including ones that land
after a new stream began. Before, explicit mode dropped that ` !`, and the
receipt counted only the deliveries that landed after the new start.
- A turn that completes now waits for its queued deliveries before its
receipt and its continuation check, in every mode, whatever its last
response. Before, only a completion with final text waited, so in hybrid
and locus mode a stream whose last response was empty (a budget
restart's, say) wrote its receipt first: those deliveries were never
receipted, or were counted in the next turn's receipt. A ` !` they carried
was missed too.
Loading
Loading