Skip to content

fix(web): allow goal resume during an active turn - #26022

Open
diddletime wants to merge 2 commits into
pingdotgg:mainfrom
diddletime:fix/goal-resume-while-working
Open

diddletime wants to merge 2 commits into
pingdotgg:mainfrom
diddletime:fix/goal-resume-while-working

Conversation

@diddletime

@diddletime diddletime commented Oct 27, 2026 •

Copy link
Copy Markdown

A paused goal hides Resume while another turn is running, forcing a separate Stop action. Show Resume whenever the goal supports it so the existing server command can stop the current turn and resume the goal.

Addresses https://git.cafe/pingdotgg/t3code/issues/25951. The server transition shipped in https://git.cafe/pingdotgg/t3code/pulls/25426; this fixes the remaining button restriction. The intermittent native resume failure in the report still needs a specific reproduction.

Verified with vp run check:changed and a browser regression that renders a paused goal while another turn is working. The images show that component fixture.

Before After
Resume is missing Resume is available

Created with gpt-6-astra-ultrafast in Codex through T3 Code.

Takeover verification at f4a1bd2dfcfc057d16e881729cc4b64163a4264f:

  • Merged current main, preserving the original two-file change (16 additions, 2 deletions).
  • Blacksmith vp run check:changed github/main passed format, lint, knip, affected typechecks, all five banner browser tests, and React compiler coverage.
  • Two independent source reviews found no blocking issues.
  • Exercised the real web client and Codex provider on Linux: set goal, stop, start unrelated work, Resume during work, stop again, and Clear. Native logs show turn/interrupt at 21:55:13.793 UTC, then thread/goal/set with status: active at 21:55:14.066 UTC.
  • Desktop, mobile, other providers, remote/tunnel modes, and the intermittent native failure remain unverified in this pass.

resume during unrelated codex work, followed by stop and clear

Takeover by gpt-6.1-sol through the Codex harness in T3 Code.

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XS 0-9 changed lines (additions + deletions). labels Oct 27, 2026
@macroscopeapp

macroscopeapp Bot commented Oct 27, 2026

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Approved at e901841

Macroscope's review found this PR approvable — This is a narrowly scoped web bug fix that exposes the existing Resume action for paused goals during an active turn, matching the already-supported server behavior. A focused browser regression test covers the changed state, with no schema, configuration, security, billing, or deployment impact.

Notes:

  • Code review disabled. Approvability was decided on eligibility alone.

You can add or adjust custom eligibility rules. Learn more.

@coderabbitai

coderabbitai Bot commented Oct 27, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack →

No actionable comments were generated in the recent review.

Recent review info
Run configuration
Commits

Reviewing files that changed from the base of the PR and between e901841 and f4a1bd2.

Files selected for processing: 2
  • apps/web/src/components/chat/ComposerBannerStack.browser.test.tsx
  • apps/web/src/components/chat/ThreadActivityBanners.tsx

Limit details: You’ve used all 10 included reviews currently available.

Walkthrough

The goal banner now shows Resume whenever presentation.canResume is true, including while the thread is working. A browser test checks this state for a paused goal.

Changes: Goal Resume Availability

Layer / File(s) Summary
Resume action and browser coverage
apps/web/src/components/chat/ThreadActivityBanners.tsx, apps/web/src/components/chat/ComposerBannerStack.browser.test.tsx
goalNowItem no longer requires the thread to be idle to show Resume. A browser test checks that Resume is visible while a paused goal's thread is working.

Estimated code review effort: 2 (Simple) | ~8 minutes

Change: Bug fix · Severity of issue fixed: Medium

Possibly related issues

Possibly related PRs

Suggested labels: bugfix

Suggested reviewers: t3dotgg

Merge Risk: Minimal · up to f4a1b

The change is narrowly scoped and has coverage for the restored Resume behavior without an identified merge-blocking risk.

Pre-merge checks: Passed 4
Check name Status Explanation
Title check Passed The title "fix(web): allow goal resume during an active turn" matches the main change. The diff removes the !isWorking condition in goalNowItem, so Resume shows for a paused goal while another tur…
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
Description check Passed The description clearly explains the problem, the implementation, the linked issue, verification results, observed limitations, screenshots, and a recording. It does not use the required section headi…
Full details: Title check

Explanation

The title "fix(web): allow goal resume during an active turn" matches the main change. The diff removes the !isWorking condition in goalNowItem, so Resume shows for a paused goal while another turn runs. The title is specific, follows the conventional commit format, and matches the PR objectives.

Full details: Description check

Explanation

The description clearly explains the problem, the implementation, the linked issue, verification results, observed limitations, screenshots, and a recording. It does not use the required section headings, and it does not explicitly include a maintainer approval comment or explain an approval exemption, but the required information is mostly present.

Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR
  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Comment @coderabbitai help to get the list of available commands.

maria-rcks commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Note

Written by gpt-6.1-sol on behalf of Maria

Verified in a real dev environment

Verified as-is at e901841a4979ad647868847c46cbefb61f006fe9 on this Linux Boat VM. No code changes or pushes.

Installed dependencies with vp i on both github/main (305a90dce4) in a separate worktree and the exact PR head. Ran one background vp run dev server at a time with isolated state. Used repository Playwright and /usr/bin/google-chrome to create the project/thread through the web app and run real Codex gpt-6.1-sol turns through the local proxy. No mocks, fixtures, replay provider, or database writes.

  • Main: set a goal, paused it, then sent unrelated work that ran sleep 120. While that turn was running, Resume disappeared; only Clear remained. Stop restored Resume.
  • PR: repeated the same goal and unrelated prompt. Resume remained visible with Stop generation present. Clicking Resume interrupted the unrelated turn and resumed the original goal. The client showed Stopped to apply /goal, then Pursuing goal; the native provider log confirmed turn/interrupt followed by thread/goal/set with status: active.
  • Nearby behavior: Stop paused the active goal; Resume from idle restarted it. Codex eventually created goal-proof.txt containing exactly verified (8 bytes), and the app showed Goal complete and the file diff. Clear removed the goal banner. A subsequent normal Codex turn read the file and replied verified, without creating a goal.

Short runtime transcript (UTC):

09:01:33.283  Resume click -> turn/interrupt
09:01:33.308  unrelated turn completed: interrupted
09:01:33.849  thread/goal/set status=active
09:01:42.655  resumed goal executes sleep 120
09:02:13.965  Stop -> thread/goal/set status=paused
09:02:14.030  goal turn completed: interrupted
09:02:15.252  idle Resume -> thread/goal/set status=active
09:04:54.522  native goal status=complete
09:05:03.063  resumed turn completed
09:06:31.438  Clear -> thread/goal/clear
09:06:49.194  normal read-file turn completed; reply: verified
filesystem   goal-proof.txt = "verified" (8 bytes)

Main, paused goal during unrelated work:

main hides resume during the unrelated codex turn

PR, matching goal and unrelated prompt:

pr exposes resume during the unrelated codex turn

27-second animated capture of the recording showing unrelated work, Resume, interruption, and resumed goal work:

resume interrupts unrelated work and resumes the goal

resumed goal completes and creates the requested file

Inspected the screenshots and recording, reopened the uploaded media, and checked video playback to completion and seeking in Chrome. Current GitHub checks have no pending or failing jobs; several platform/eligibility jobs are skipped. No local static checks were run because this verification changed no source.

Not verified

Native iOS/Android clients, Electron desktop, macOS/Windows behavior, remote/tunnel connections, and other providers were not exercised. This confirms the changed web banner and real Codex provider path, not the intermittent native resume failure mentioned in the PR description.

The VM briefly reported a 36-second host freeze during initial loading, and the provider recovered transient retries after a stop/resume. Neither prevented the scenarios above from completing; no app/provider stall exceeded 10 minutes.

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XS 0-9 changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants