fix(agents): stabilize queue, steer, and timeline ordering - #153
Draft
yoloyash wants to merge 4 commits into
Draft
fix(agents): stabilize queue, steer, and timeline ordering#153yoloyash wants to merge 4 commits into
yoloyash wants to merge 4 commits into
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Interaction model
While a provider is working, every ordinary composer submission first becomes a visible queued item. The user can then:
Stop remains a separate active-turn control. There is no hidden Command/Ctrl+Enter steering mode; alternate Enter combinations queue as well. When the provider is idle, ordinary composer submissions start a prompt normally. Slash commands continue to normalize into their provider-neutral commands before delivery.
Root cause fixed
The reported order corruption was real and survived reload because the connector runtime snapshot itself was already wrong:
This change gives the Codex provider projection sole ownership of order within a turn. The connector stores that ordered turn block and the browser applies the same block atomically. The exact regression covers user prompt → assistant output → mid-turn steer → assistant output → footer, including the connector snapshot used after reconnect/reload.
Paseo alignment
The interaction and timeline model was audited against
getpaseo/paseo@334bf623709d91b9b9d5217fb17acc289ed16622.Paseo keeps canonical timeline ordering in its daemon and renders queued messages above a stable composer. Its queue-mode setting makes active-run submissions queue first, although its factory setting currently defaults to Interrupt and its queue rows expose Edit and Send Now. OvertChat adopts the stable composer and visible queue-track interaction while keeping the queue in the Host Connector rather than Paseo's app-side session store, so queue state survives browser reconnects and is shared across clients.
Provider behavior
turn/steer; authoritative ordered turn projectionsteerVerification
npm run typechecknpm run lintnpm run test— 511 passing, 4 opt-in integration tests skippednpm run buildE2E_PORT=4729 npm run test:e2e -w apps/web -- e2e/agent-runtime.spec.tsgit diff --checkFocused coverage includes provider-neutral queue promotion for Pi/OMP, Codex live projection order, connector snapshot order after a steer race, browser atomic reconciliation, provider acknowledgement after transport rejection, and rejection of delivery commands that bypass the queue. The Playwright flow covers the stable composer, default Enter-to-queue, image-preserving edit, queued Steer, Delete, modifier-key queueing, double-submit prevention, and Stop.
Stack
Stacked on #152. Merge #152 first, merge
maininto this branch after the parent squash so the diff stays clean, then squash-merge this PR.