Skip to content

fix(chat): show promoted queue messages as persisted user turns - #3220

Merged
bobleer merged 1 commit into
GCWing:mainfrom
bobleer:bob/fix-steering-visibility
Sep 24, 2026
Merged

bobleer merged 1 commit into
GCWing:mainfrom
bobleer:bob/fix-steering-visibility

Conversation

@bobleer

@bobleer bobleer commented Sep 24, 2026

Copy link
Copy Markdown
Collaborator

Summary

Promoting a queued message during execution now starts a normal persisted user turn at the next safe round boundary. Mobile history and the desktop turn rail receive the same canonical user message, including after reconnect. Already-started tool output stays on the preceding turn.

Make the mobile Stop control circular, keep it in the rightmost action slot, and align it with queue Info and Remove controls.

Type and Areas

Bug fix / UI/UX; shared runtime scheduler and execution, mobile web.

Motivation / Impact

Previously queue steering became an inline reminder, missing from mobile history and desktop turn navigation. The scheduler now preserves the original queued payload/turn ID, transfers accepted promotions in order, and starts them without requiring a connected controller. Stop/failure retains unconsumed messages for explicit recovery. Goal usage is accounted without inserting automatic continuation ahead of accepted user input; a successful handoff is not recorded as failed merely because it has no final answer.

Keep the existing turn-scoped SDK steering contract used by CLI/Dispatch inline. A receipt-locked drain separates those inputs from host queue promotions, including concurrent admission. No wire or persisted schema changes; legacy controllers/hosts retain their existing paths.

Verification

  • Focused Core coordination tests: 203 passed, using cargo test --locked -p openbitfun-core --no-default-features --features remote-connect,git --lib agentic::coordination:: -- --skip remote_session_metadata_never_falls_back_to_a_local_workspace_binding.
  • Core execution-engine 55, tool-pipeline 49, runtime scheduler contracts 29, and agent-api wire contracts 47 passed. Regression coverage includes sequential persisted turns, duplicate promotion/outcomes, disconnect, stop/error recovery, SDK injection coexistence, and goal accounting.
  • pnpm --dir src/mobile-web run test:host-queue (16), test:host-stream (17), test:session-stream-browser (2) passed. Transcript replay preserves message ownership and deduplicates reverse-order delivery.
  • Desktop queue/turn rail/navigation tests: 26 passed.
  • pnpm run check:web, mobile type-check/build, and pnpm run theme:color-audit:all passed.
  • Chrome fixture screenshots reviewed in dark/light themes; geometry assertions cover 320, 390, 768, 1200px widths and a 420px keyboard-height viewport. Stop/Send remain independently operable.

The skipped remote-workspace test also fails on unmodified upstream main 0b7770b4c with the same minimal feature set; it is not hidden or disabled in source/CI.

Reviewer Notes

Remote-control coverage uses simulated host streams plus real Chrome/IndexedDB close/reopen and reconnect. No live phone/server, SSH-workspace, Peer Device, or Detached Dispatch end-to-end run is claimed. SDK compatibility is covered at the shared boundary rather than changing those consumers. Pending host queue entries retain the existing host-process-lifetime guarantee; this does not add restart durability.

Checklist

  • Focused change without secrets, scratch files, or unrelated artifacts.
  • Verification and limitations recorded.
  • Owning surface documentation updated; no new translated strings.

@bobleer
bobleer merged commit 3590e01 into GCWing:main Sep 24, 2026
13 checks passed
@bobleer
bobleer deleted the bob/fix-steering-visibility branch September 24, 2026 08:19
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant