Repository navigation
fix(server): a message promoted into a stopping run stays queued - #16926
Merged
juliusmarminge merged 5 commits intoOct 19, 2026
Merged
Conversation
Contributor
Contributor
ApprovabilityVerdict: Approved at Macroscope's review found this PR approvable — This is a narrowly scoped orchestration bug fix that handles a Stop/steering race and preserves queued messages, with focused integration coverage. The production impact is confined to the affected dispatch window, with no schema, infrastructure, security, billing, or default-setting changes. You can add or adjust custom eligibility rules. Learn more. |
Member
|
Taking over this one. I’ll reduce the tests to the useful coverage, update the implementation against current main, and verify it before publishing the changes. |
macroscopeapp
Bot
dismissed
their stale review
October 19, 2026 01:22
Dismissing prior approval to re-evaluate 42a849d
Main now releases a held queue when the user sends a message (pingdotgg#21473). A plain send during the Stop window still queues instead of steering a run the agent will never read, but it no longer leaves the queue held. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
juliusmarminge
enabled auto-merge (squash)
October 19, 2026 17:09
macroscopeapp
Bot
dismissed
their stale review
October 19, 2026 17:10
Dismissing prior approval to re-evaluate 84e64d8
AdEx-Partners-DE
pushed a commit
to AdEx-Partners-DE/t3code
that referenced
this pull request
Oct 19, 2026
…gdotgg#16926) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com> Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com> (cherry picked from commit 10f7db7)
github-actions Bot
added a commit
to omarcresp/t3code-flake
that referenced
this pull request
Oct 19, 2026
## What's Changed * fix(mobile): settings no longer tell you to update when you're up to date by @shivamhwp in pingdotgg/t3code#21688 * test(web): fix the workflow script test that times out on busy CI runners by @shivamhwp in pingdotgg/t3code#21699 * fix(mobile): a file shared into a new task shows in the composer before you send by @shivamhwp in pingdotgg/t3code#21659 * fix(desktop): a cold WSL distro gets 30 seconds to boot instead of 10 by @SunkenInTime in pingdotgg/t3code#21070 * fix(web): detect software keyboard before handling composer Enter by @Yash-Singh1 in pingdotgg/t3code#21763 * fix(mobile): the Git sheet uses the standard list rows by @juliusmarminge in pingdotgg/t3code#21785 * fix(server): changed files keep their real paths for renames and non-ASCII names by @Atharvsinh-codez in pingdotgg/t3code#20175 * fix(server): a message promoted into a stopping run stays queued by @lbgos in pingdotgg/t3code#16926 * perf(mobile): streaming re-renders less on the open thread screen by @juliusmarminge in pingdotgg/t3code#20963 * feat(usage): show even-pace marks on Limits bars by @flamboh in pingdotgg/t3code#14477 * fix(web): Usage hourly labels follow the Time format setting by @mInrOz in pingdotgg/t3code#15575 * fix(web): stop repeating the subagent name in the waiting banner by @saphid in pingdotgg/t3code#16022 * fix(web): Cmd+O no longer opens the editor more than once by @5knnbdwm in pingdotgg/t3code#18983 * fix(web): hoist favorited legacy models to the top of the model picker by @TonybynMp4 in pingdotgg/t3code#11933 * fix(server): a rollback blocked by Git's index lock says so instead of a generic error by @shivamhwp in pingdotgg/t3code#11340 * fix(mobile): expanded tool-call groups keep following new calls by @nekohasekai in pingdotgg/t3code#15747 * fix(web): going back in the command palette keeps the search that led there by @saphid in pingdotgg/t3code#15940 * fix(web): changing a project's model no longer keeps the old model's options by @yaacovcorcos in pingdotgg/t3code#16581 * fix(web): preserve snapshot thumbnail context and detail by @maria-rcks in pingdotgg/t3code#18440 * fix(web): keep expanded tool actions usable from the keyboard by @saphid in pingdotgg/t3code#18831 * fix(usage): Claude usage no longer lists a `<synthetic>` model by @tris203 in pingdotgg/t3code#14672 * fix(server): release webhook claims when acceptance fails by @saphid in pingdotgg/t3code#18820 * fix(desktop): make the annotation editor border and shadow actually render by @PollyGlot in pingdotgg/t3code#9406 * fix(server): Claude follow-ups no longer fail in Auto on models without Auto by @Gigioxx in pingdotgg/t3code#15687 * fix(web): reopening Connections picks up new network addresses by @lnieuwenhuis in pingdotgg/t3code#15840 * fix(client): MCP apps can no longer trap you in full screen; it opens only after a tap by @shivamhwp in pingdotgg/t3code#18548 * fix(web,mobile): disabled provider instances no longer badge their siblings by @tris203 in pingdotgg/t3code#14545 * fix(web): threads open at the newest message, not thousands of pixels above it by @t3dotgg in pingdotgg/t3code#19663 * fix(mobile): report rejected shared settings writes by @juliusmarminge in pingdotgg/t3code#9356 * fix(claude): show automatic compaction while it runs by @maria-rcks in pingdotgg/t3code#15631 * fix(web): keep the parent thread highlighted while viewing its subagent by @saphid in pingdotgg/t3code#15163 * fix(web): show pull request checkout error detail by @saphid in pingdotgg/t3code#15007 * fix(server): mark unvisited thread completions unread by @maria-rcks in pingdotgg/t3code#15607 * fix(web): started threads no longer offer a machine picker that does nothing by @tris203 in pingdotgg/t3code#19900 * fix(web): provider model names no longer get cut off by their slug by @ilyaliao in pingdotgg/t3code#16522 * fix(claude): mid-sentence skill chips keep the full request by @ScottN-PV in pingdotgg/t3code#15253 * fix(web): preserve unsaved keybinding edits when saving another binding by @pnupu in pingdotgg/t3code#11109 * fix(connections): retry unsupported saved direct connections by @none23 in pingdotgg/t3code#15107 * fix(web): show readable messages for structured thread errors by @juliusmarminge in pingdotgg/t3code#21483 * fix(web): custom shortcuts work when Local environment is off by @Mnigos in pingdotgg/t3code#15825 * fix(web): keep thread notification tags within the Windows toast limit by @satyalyadav in pingdotgg/t3code#12289 * fix(web): pinned thread marker stays put when hovering the row by @flamboh in pingdotgg/t3code#11122 * fix(web): keep a typed question answer when you open a new thread by @Gigioxx in pingdotgg/t3code#13865 * fix(web): renumber following items when continuing a plain-Markdown numbered list by @saphid in pingdotgg/t3code#14332 * fix(web): clicking a logged request route no longer opens it in the editor by @lnieuwenhuis in pingdotgg/t3code#15838 * fix(desktop): reject offscreen annotation screenshot crops by @maria-rcks in pingdotgg/t3code#18441 * fix(web): NVDA browse mode reaches the new-thread project picker again by @akj in pingdotgg/t3code#17877 * fix(web): stop composer banner glass overlap by @t3-code[bot] in pingdotgg/t3code#8034 * fix(web): keep pasted decorators as text by @Gigioxx in pingdotgg/t3code#8415 * fix(shell): avoid interactive job control in environment probes by @LouisDeconinck in pingdotgg/t3code#11275 * fix(web): a closed proactive diff stays closed when you return to a thread by @ilyaliao in pingdotgg/t3code#14705 * fix(web): render powerline separators at cell edges by @SadriG91 in pingdotgg/t3code#5607 * fix(server): provider failures say why a turn could not start by @saphid in pingdotgg/t3code#16303 ## New Contributors * @Atharvsinh-codez made their first contribution in pingdotgg/t3code#20175 * @lbgos made their first contribution in pingdotgg/t3code#16926 * @yaacovcorcos made their first contribution in pingdotgg/t3code#16581 * @pnupu made their first contribution in pingdotgg/t3code#11109 * @LouisDeconinck made their first contribution in pingdotgg/t3code#11275 * @SadriG91 made their first contribution in pingdotgg/t3code#5607 **Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261019.3360...v0.1.1-nightly.20261019.3373 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261019.3373
github-actions Bot
added a commit
to davidvanderklay/t3code-flake
that referenced
this pull request
Oct 19, 2026
## What's Changed * fix(mobile): settings no longer tell you to update when you're up to date by @shivamhwp in pingdotgg/t3code#21688 * test(web): fix the workflow script test that times out on busy CI runners by @shivamhwp in pingdotgg/t3code#21699 * fix(mobile): a file shared into a new task shows in the composer before you send by @shivamhwp in pingdotgg/t3code#21659 * fix(desktop): a cold WSL distro gets 30 seconds to boot instead of 10 by @SunkenInTime in pingdotgg/t3code#21070 * fix(web): detect software keyboard before handling composer Enter by @Yash-Singh1 in pingdotgg/t3code#21763 * fix(mobile): the Git sheet uses the standard list rows by @juliusmarminge in pingdotgg/t3code#21785 * fix(server): changed files keep their real paths for renames and non-ASCII names by @Atharvsinh-codez in pingdotgg/t3code#20175 * fix(server): a message promoted into a stopping run stays queued by @lbgos in pingdotgg/t3code#16926 * perf(mobile): streaming re-renders less on the open thread screen by @juliusmarminge in pingdotgg/t3code#20963 * feat(usage): show even-pace marks on Limits bars by @flamboh in pingdotgg/t3code#14477 * fix(web): Usage hourly labels follow the Time format setting by @mInrOz in pingdotgg/t3code#15575 * fix(web): stop repeating the subagent name in the waiting banner by @saphid in pingdotgg/t3code#16022 * fix(web): Cmd+O no longer opens the editor more than once by @5knnbdwm in pingdotgg/t3code#18983 * fix(web): hoist favorited legacy models to the top of the model picker by @TonybynMp4 in pingdotgg/t3code#11933 * fix(server): a rollback blocked by Git's index lock says so instead of a generic error by @shivamhwp in pingdotgg/t3code#11340 * fix(mobile): expanded tool-call groups keep following new calls by @nekohasekai in pingdotgg/t3code#15747 * fix(web): going back in the command palette keeps the search that led there by @saphid in pingdotgg/t3code#15940 * fix(web): changing a project's model no longer keeps the old model's options by @yaacovcorcos in pingdotgg/t3code#16581 * fix(web): preserve snapshot thumbnail context and detail by @maria-rcks in pingdotgg/t3code#18440 * fix(web): keep expanded tool actions usable from the keyboard by @saphid in pingdotgg/t3code#18831 * fix(usage): Claude usage no longer lists a `<synthetic>` model by @tris203 in pingdotgg/t3code#14672 * fix(server): release webhook claims when acceptance fails by @saphid in pingdotgg/t3code#18820 * fix(desktop): make the annotation editor border and shadow actually render by @PollyGlot in pingdotgg/t3code#9406 * fix(server): Claude follow-ups no longer fail in Auto on models without Auto by @Gigioxx in pingdotgg/t3code#15687 * fix(web): reopening Connections picks up new network addresses by @lnieuwenhuis in pingdotgg/t3code#15840 * fix(client): MCP apps can no longer trap you in full screen; it opens only after a tap by @shivamhwp in pingdotgg/t3code#18548 * fix(web,mobile): disabled provider instances no longer badge their siblings by @tris203 in pingdotgg/t3code#14545 * fix(web): threads open at the newest message, not thousands of pixels above it by @t3dotgg in pingdotgg/t3code#19663 * fix(mobile): report rejected shared settings writes by @juliusmarminge in pingdotgg/t3code#9356 * fix(claude): show automatic compaction while it runs by @maria-rcks in pingdotgg/t3code#15631 * fix(web): keep the parent thread highlighted while viewing its subagent by @saphid in pingdotgg/t3code#15163 * fix(web): show pull request checkout error detail by @saphid in pingdotgg/t3code#15007 * fix(server): mark unvisited thread completions unread by @maria-rcks in pingdotgg/t3code#15607 * fix(web): started threads no longer offer a machine picker that does nothing by @tris203 in pingdotgg/t3code#19900 * fix(web): provider model names no longer get cut off by their slug by @ilyaliao in pingdotgg/t3code#16522 * fix(claude): mid-sentence skill chips keep the full request by @ScottN-PV in pingdotgg/t3code#15253 * fix(web): preserve unsaved keybinding edits when saving another binding by @pnupu in pingdotgg/t3code#11109 * fix(connections): retry unsupported saved direct connections by @none23 in pingdotgg/t3code#15107 * fix(web): show readable messages for structured thread errors by @juliusmarminge in pingdotgg/t3code#21483 * fix(web): custom shortcuts work when Local environment is off by @Mnigos in pingdotgg/t3code#15825 * fix(web): keep thread notification tags within the Windows toast limit by @satyalyadav in pingdotgg/t3code#12289 * fix(web): pinned thread marker stays put when hovering the row by @flamboh in pingdotgg/t3code#11122 * fix(web): keep a typed question answer when you open a new thread by @Gigioxx in pingdotgg/t3code#13865 * fix(web): renumber following items when continuing a plain-Markdown numbered list by @saphid in pingdotgg/t3code#14332 * fix(web): clicking a logged request route no longer opens it in the editor by @lnieuwenhuis in pingdotgg/t3code#15838 * fix(desktop): reject offscreen annotation screenshot crops by @maria-rcks in pingdotgg/t3code#18441 * fix(web): NVDA browse mode reaches the new-thread project picker again by @akj in pingdotgg/t3code#17877 * fix(web): stop composer banner glass overlap by @t3-code[bot] in pingdotgg/t3code#8034 * fix(web): keep pasted decorators as text by @Gigioxx in pingdotgg/t3code#8415 * fix(shell): avoid interactive job control in environment probes by @LouisDeconinck in pingdotgg/t3code#11275 * fix(web): a closed proactive diff stays closed when you return to a thread by @ilyaliao in pingdotgg/t3code#14705 * fix(web): render powerline separators at cell edges by @SadriG91 in pingdotgg/t3code#5607 * fix(server): provider failures say why a turn could not start by @saphid in pingdotgg/t3code#16303 ## New Contributors * @Atharvsinh-codez made their first contribution in pingdotgg/t3code#20175 * @lbgos made their first contribution in pingdotgg/t3code#16926 * @yaacovcorcos made their first contribution in pingdotgg/t3code#16581 * @pnupu made their first contribution in pingdotgg/t3code#11109 * @LouisDeconinck made their first contribution in pingdotgg/t3code#11275 * @SadriG91 made their first contribution in pingdotgg/t3code#5607 **Full Changelog**: pingdotgg/t3code@v0.1.1-nightly.20261019.3360...v0.1.1-nightly.20261019.3373 Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.1.1-nightly.20261019.3373
aorwall
added a commit
to aorwall/t3code
that referenced
this pull request
Oct 20, 2026
Merges upstream `pingdotgg/t3code` at `143ab1606d` (base `ab6be13d43`, 376 commits) into the fork. No merge PR was open, so this branches from `main`. ## Merge - **Landed:** 1177 files out of 1177 in the upstream range. The only missing files are `apps/server/src/cli/pair.ts` and its test, which the fork deliberately keeps deleted. The fork delta is now 817 files. - **Conflicts:** 14, each resolved by its `preflight.mjs` verdict. The tracker entry in `docs/fork/upstream-merge-log.md` covers each one. The ones a reviewer should read: - **`ProjectDefaultsSettings.tsx`:** upstream moved the agent-browser-access row to `IntegrationsSettings.tsx` (`AgentBrowserAccessSetting`). The fork's `workspaceOwnsProjectDefaults` gate moved with it and returns null at a Workspace project scope. - **`terminal.ts`:** keeps the fork's `TerminalMetadataState` seed and takes upstream's `Stream.drop(1)`. Upstream's new `runtime.test.ts` metadata test now reads `.terminals`. - **`Sidebar.tsx` / `Sidebar.logic.ts`:** upstream's new `resolveSidebarRowThreadId` resolves against the unfiltered shells. It now takes `source`, because the fork's `isSidebarSubagentThread` hides only provider-native subagents. - **`ChatView.tsx` (auto-merged):** the fork's hosted script path calls `storeSetActiveTerminal` again. The local path drops its early `setTerminalOpen(true)`, following upstream pingdotgg#18340, so the drawer no longer claims the default terminal id. - **`AGENTS.md`:** keeps the fork's prose and adds upstream's new `Effect.fn` rule. - **`apps/mobile/package.json`:** takes upstream's test script and keeps `tsc` rather than `tsc-rs`. - **`pnpm-lock.yaml`:** `tsc-rs` entries stripped, then re-derived with `install.mjs`. - **Other fixes:** - `fork/goToDefinition.test.ts` moved to browser mode for upstream's new `no-dom-test-environment` lint rule. - `ThreadDetailsPrRows.browser.test.tsx` now passes `activeProjectScriptsEditable`. - One new `duplicateAddExceptions` entry was added and one stale one retired. - **Unsupported methods:** ADD 0, DROP 0, KEEP 2. `packages/contracts/src/rpc.ts` is unchanged. ## Verification `verify.mjs --sequential`: - duplicate-adds, tripwires, resolution-check, unsupported-methods, lockfile, fmt, lint, typecheck and build all pass. - `test` fails. The files that fail when run alone are the same five as on 2026-10-19 (`AgentScope`, `OpenCodeServerLedger`, ssh `tunnel`, `AcpAdapterV2`, `OrchestratorReplayFixtures`), all sandbox process-reaping or auth issues. - Two new failures are also environmental: the partial-clone tests in `GitVcsDriver.test.ts` and `RepositoryIdentityResolver.test.ts`. The sandbox's `~/.gitconfig` rewrites `git@github.com:` to https with `insteadOf`. - `@t3tools/web` had one real failure, upstream's new Sidebar subagent test. It is fixed and passes on its own. **Caveat:** the last amend changed only that test fixture and the docs. The sandbox restarted three times during this run, and the typecheck and fmt re-run after that amend did not finish. A follow-up comment will report it. ## Usable as-is - LaTeX/KaTeX math in chat markdown, behind the client setting `mathRenderingEnabled` in Appearance, off by default (pingdotgg#18735). - Mermaid renders while a message streams (pingdotgg#18308). Large changed-file trees are virtualized (pingdotgg#21482, pingdotgg#21831). HTML previews skip the loading skeleton (pingdotgg#21480). - Pasted folders become workspace references (pingdotgg#22072). PR check rows aligned, and skipped checks get a slash icon (pingdotgg#22090, pingdotgg#21498). A confirmation before "Close with comment" (pingdotgg#18175). - Subagent overflow badge (pingdotgg#19860). Context usage survives a fork (pingdotgg#22075). Copy paths relative to the thread workspace (pingdotgg#21497). PDF preview (pingdotgg#21095). - Contract decoding tolerates newer PR shapes (`ForwardCompatibleArray` / `ForwardCompatibleOptional`; pingdotgg#19899, pingdotgg#21575, pingdotgg#21665). - In-app browser search engine settings (pingdotgg#17688). These are client-only, but they only matter where the browser panel is exposed. ## Unsupported in Moatless / needs implementation - **`thread.stop` and `capabilities.threadStop` (pingdotgg#22052):** stops a thread without resolving its run. The client falls back to the existing stop path until the backend advertises `threadStop`. Added to the capabilities gap. - **`blocking: false` on async questions (pingdotgg#15430):** keeps a thread Working while a question is open. The backend has to emit the field. - **Provider `optionDescriptors` / `installedVersion` (pingdotgg#19519, pingdotgg#19567):** drive dynamic model options and update checks. Both are optional, so the client degrades. - **Terminal `resume: true` on resubscribe (pingdotgg#18444):** the backend should not reopen a closed shell. - **`rootPath` on git diff/status results:** used for workspace-relative paths. - **`repositoryWebUrl` on PR links (pingdotgg#21575).** - **Relay, T3 Connect, hosted sign-in and `t3 update` work:** not applicable to the single-origin Moatless deployment. ## Backend behavior to consider reproducing in Moatless - **Settlement:** an empty inactive thread auto-settles (pingdotgg#15783). Settling clears snooze (pingdotgg#17547). An interrupted run does not start the settle timer on a snoozed thread (pingdotgg#17789). - **Runs:** auto-delivered messages queue between provider turns (pingdotgg#15691). A message promoted into a stopping run stays queued (pingdotgg#16926). Compaction cadence survives restarts (pingdotgg#21880). - **ACP:** native foreground work settles independently, and child routing moves between runs (pingdotgg#21614–pingdotgg#21616). Delegated children stop once (pingdotgg#18826). - **Terminals:** slow clients no longer queue unbounded output (pingdotgg#18429). Shells do not inherit tmux (pingdotgg#13359). Script commands stay out of shell history (pingdotgg#13903). - **Files:** saves no longer follow a symlink out of the workspace (pingdotgg#18819). This one is security-relevant. - **Git:** new worktrees fetch the base branch's own tracked remote (pingdotgg#21032). Rename and non-ASCII paths are kept in changed-file lists (pingdotgg#20175). Rollback blocked by an index lock now says so (pingdotgg#11340). The `docs/fork/gaps.md` entries "Capabilities are reported…" and "Runtime fixes upstream made to its own server" are extended with these. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- Moatless task: https://moatless.soaplabstest.com/tasks/d311aafc-7a38-48b7-9c14-30c4cac930a7
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.
Problem
A queued message promoted to Steer after Stop was accepted could be moved onto the stopping run and lost. The run can still report running while its provider finishes stopping, so checking status alone was insufficient.
Change
Use the persisted Stop marker in the shared steering path to reject explicit steer, restart and queued-message promotion into a stopping run. Rejection leaves the queued message and its held state intact.
A normal send whose automatic delivery would steer that stopping run instead takes the existing queue path. It follows earlier queued messages and, consistent with current main, resumes their hold. An explicit Steer/Restart still fails during the Stop window. Ordinary interrupt-and-restart steering without an explicit Stop is unaffected.
Scope and approval
Maintainer takeover of lbgos's contribution, preserving contributor history. Shared server orchestration covers clients and providers using these commands. This integrates #21473's user-send-resumes-queue behavior; agent, MCP and scheduled sends retain their existing exclusions. No merge is requested.
Verification
At 84e64d8, incorporating main c274a25:
Limits: deterministic service proof with a controlled Codex-shaped adapter and injected terminal events, not a live provider or browser/native Resume flow. The scratch proof stops at the next run reaching starting; it does not claim that run completed a provider turn. Review also confirmed Stop disposes the delegated-completion cohort before delivery, so the previously suspected retry concern does not require an extra guard.
Current-head CI remains separate from the focused local checks.
Prepared through T3 Code: Claude Opus 5.5 tests and independent review, Claude Fable 5.1 implementation, and GPT-6.1 Sol independent review, using Claude Code and Codex harnesses.