fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

fix(web): fold interim turn responses - #8828

Merged
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first
Aug 31, 2026
Merged

fix(web): fold interim turn responses#8828
juliusmarminge merged 1 commit into
pingdotgg:mainfrom
maria-rcks:t3code/show-worked-time-first

Conversation

@maria-rcks

@maria-rcksmaria-rcks commented Aug 30, 2026

Copy link
Copy Markdown
Collaborator

Completed turns kept the first assistant update visible above the elapsed work row, which duplicated interim commentary after the turn settled. This folds every pre-final assistant response behind the elapsed work row while preserving the terminal response below it. Verified with 84 focused timeline tests, the web typecheck, targeted lint, and formatting checks.

Produced with gpt-5.6-sol through the Codex harness.


Note

Low Risk
UI-only timeline folding logic in the web chat component, covered by existing timeline unit tests with no API or data changes.

Overview
Settled chat turns now show only the final assistant message below the elapsed-work row. Interim assistant replies and tool/work activity that used to stay visible above the “Worked for …” fold are hidden until the user expands the turn.

deriveTurnFolds in MessagesTimeline.logic.ts no longer exempts the first assistant entry from hiddenEntryIds—only the terminal assistant message and agent-spawn work rows stay out of the fold. Collapsed timelines go user → turn-fold → final answer instead of keeping an opening assistant bubble on top; expanding the fold still reveals the first assistant message and work toggles in order.

Tests were renamed and updated to match the new collapsed/expanded row order.

Reviewed by Cursor Bugbot for commit 6a36323. Bugbot is set up for automated code reviews on this repo. Configure here.

Note

Fold all interim assistant messages in settled turns in deriveTurnFolds

Settled non-streaming turns now hide every assistant message before the terminal one behind the fold, instead of keeping the first assistant message visible. Agent-spawn work entries remain excluded from folding.

  • Updated MessagesTimeline.logic.ts by removing the first-assistant-message preservation condition and its associated entry computation.
  • Adjusted expectations in MessagesTimeline.logic.test.ts to match the new collapsed-row ordering.
  • Risk: any UI logic or snapshot relying on the first assistant message staying visible in a settled turn will break; check consumers of deriveTurnFolds output and any pinned snapshot tests.

Macroscope summarized 6a36323.

@coderabbitai

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on this repository. Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Repository UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e61f522d-afed-4266-9e1a-20d4c9ae3e46

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Warning

Your free Security trial is over. An organization admin can activate Security or dismiss this notice.


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

@github-actionsgithub-actionsBot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S 10-29 changed lines (additions + deletions). labels Aug 30, 2026
@maria-rcksmaria-rcks added the preview:web Deploy a hosted-web preview to Vercel for this PR on every push. label Aug 30, 2026

@cursorcursorBot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using high effort and found 1 potential issue.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 6a36323. Configure here.

Comment threadapps/web/src/components/chat/MessagesTimeline.logic.ts
@macroscopeapp

Copy link
Copy Markdown
Contributor

Approvability

Verdict: Not approved

Macroscope's review found this PR not approvable — This changes the default settled-turn presentation so the first assistant response is folded away and the terminal response appears alone, affecting existing user-visible timelines. An unresolved substantive concern says this can hide the main answer behind the work fold, so the behavior warrants human review.

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

@juliusmarminge
juliusmarminge merged commit 17c48f7 into pingdotgg:mainAug 31, 2026
27 checks passed
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
**Full Changelog**: pingdotgg/t3code@v0.0.37-nightly.20260830.1232...v0.0.37-nightly.20260831.1233
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37-nightly.20260831.1233
colonelpanic8 added a commit to colonelpanic8/t3code that referenced this pull request Aug 31, 2026
Upstream rebased pingdotgg#2829 (t3code/codex-turn-mapping) onto f15680b, so the
v2 branch is only 21 commits behind main -- the moment to rebuild this
synthetic base. Merges a6e0049 with origin/main 30175a8; 125 conflict
hunks across 27 files, resolved with the v2 rewrite winning structurally.
Kept from main, re-ported where v2 had moved the code:
Codex file citations and artifact-template cards. ChatMarkdown's
components moved into createChatMarkdownComponents on v2, so main's
div/img/link handlers were ported into the factory and the two new
context fields threaded through the call site.
Video attachments (play in chat, composer strip, mobile share sheet):
onFileOpen/openingVideoAttachmentId plumbing kept end to end.
pingdotgg#8803's useWorkspaceMutationRefresh in DiffPanel and ChatView. Its
workspaceMutationId came from the v1 activity log, which v2 deleted, so
it is re-derived from the projection's terminal command_execution and
file_change items plus the latest checkpoint stamp.
pingdotgg#8828's fold-to-terminal-response rule, which v2 had already reached
independently.
Dropped, being main-side work against machinery the v2 rewrite deleted:
turn-plan derivation from activities (v2 rebuilds it from the
projection), agentSpawn work-row handling, and the activity-based
session-logic tests.
ChatMarkdown.test.tsx's new render tests: v2 removed that file's
render harness and mock stack entirely; upstream can re-port them.
Mobile markdown image rendering, which v2 dropped from ThreadFeed --
AssistantMarkdownContent is kept without its renderImage prop.
Composer surface files (banner, stash badge, tasks badge, activity
status, surface) take the v2 side: it is the later refactor of the same
design and a superset of main's, and it owns --chat-content-max-width.
Ladder: repo-wide tsgo reports one new error against a pre-merge control
of a6e0049, an implicit-any in main's new ComposerAttachmentButton that
matches 448 pre-existing errors of the same class in this install. Tests
match the control exactly: web 2986, mobile 1016, client-runtime 850,
server 3126, desktop 627, relay 209, shared/contracts/ssh/tailscale green;
the server, desktop, and scripts failures reproduce unchanged on the
control. Lint and oxfmt clean.
github-actionsBot added a commit to omarcresp/t3code-flake that referenced this pull request Aug 31, 2026
## What's Changed
* Remove Messages Glass Lab experiment by @juliusmarminge in pingdotgg/t3code#8599
* Require human review for pull requests changing product defaults by @juliusmarminge in pingdotgg/t3code#8603
* fix(codex): avoid quadratic app-server input buffering by @juliusmarminge in pingdotgg/t3code#8605
* fix(mobile): stabilize iOS header item transitions by @juliusmarminge in pingdotgg/t3code#8607
* chore(mobile): upgrade to Expo SDK 57 by @juliusmarminge in pingdotgg/t3code#8609
* fix(mobile): harden native header toolbar items by @juliusmarminge in pingdotgg/t3code#8611
* fix(server): stop querying Claude context usage after turns by @t3dotgg in pingdotgg/t3code#8610
* chore: vouch ryanrhughes by @t3dotgg in pingdotgg/t3code#8613
* feat(web): attach PDFs, ZIPs, and other files to a turn by @t3dotgg in pingdotgg/t3code#8236
* feat(web): keybinding settings as settings rows by @StiensWout in pingdotgg/t3code#8532
* feat: let an environment publish themes as a file by @ryanrhughes in pingdotgg/t3code#8569
* fix(web): clean up provider settings list and editor by @StiensWout in pingdotgg/t3code#8504
* fix(web): keep project picker popup inside the sidebar by @SunkenInTime in pingdotgg/t3code#8627
* fix(mobile): prevent header overflow and back-button artifacts by @juliusmarminge in pingdotgg/t3code#8624
* fix(server): retry automatic thread title generation by @Bil0000 in pingdotgg/t3code#8087
* fix(client-runtime): refresh edited pull request comments by @Bil0000 in pingdotgg/t3code#8094
* fix(web): four composer spacing defects by @Bil0000 in pingdotgg/t3code#8090
* perf(desktop): skip duplicate browser updates by @Bil0000 in pingdotgg/t3code#8018
* fix(web): render nested markdown images correctly by @flamboh in pingdotgg/t3code#8501
* fix(web): unify activity logs and composer banners by @juliusmarminge in pingdotgg/t3code#8693
* fix(mobile): reduce dev-client reload and Metro startup cost by @juliusmarminge in pingdotgg/t3code#8694
* revert(web): restore previous composer banners by @t3dotgg in pingdotgg/t3code#8733
* test(web): remove tests for unreachable helpers by @t3-code[bot] in pingdotgg/t3code#8738
* feat(mobile): update tool summaries and chat transitions by @juliusmarminge in pingdotgg/t3code#8793
* feat(web): play video attachments in chat by @Bil0000 in pingdotgg/t3code#8688
* fix(web,mobile): snooze menu no longer offers the same wake time twice by @vitalyiegorov in pingdotgg/t3code#8741
* fix(grok): allow model changes in existing threads by @ahmed-besic in pingdotgg/t3code#8392
* feat(mobile): pick, share, and receive files in threads by @t3dotgg in pingdotgg/t3code#8237
* fix(web): reduce title bar scroll fade height by @maria-rcks in pingdotgg/t3code#8799
* fix(windows): strip quotes from repaired PATH by @UtkarshUsername in pingdotgg/t3code#8746
* fix(web): open agent images in expanded preview by @maria-rcks in pingdotgg/t3code#8807
* fix(git): follow repository instructions in generated source control text by @maria-rcks in pingdotgg/t3code#8804
* fix(server): stop overpricing cached Claude tokens by @SunkenInTime in pingdotgg/t3code#8806
* fix(web): keep image preview above sidebar control by @maria-rcks in pingdotgg/t3code#8811
* fix(web): keep right panel synced with agent edits by @maria-rcks in pingdotgg/t3code#8803
* fix(web,mobile): render Codex citations and artifact templates by @Yash-Singh1 in pingdotgg/t3code#8584
* chore: add Windows setup script to t3.json by @UtkarshUsername in pingdotgg/t3code#8814
* fix(web): fold interim turn responses by @maria-rcks in pingdotgg/t3code#8828
* fix(web): use circle alert for failed tool calls by @maria-rcks in pingdotgg/t3code#8840
* feat(mobile): add offline iPhone voice input by @t3dotgg in pingdotgg/t3code#8614
* fix(web): prevent pull request metadata overlap by @MatthewFeroz in pingdotgg/t3code#8790
## New Contributors
* @ryanrhughes made their first contribution in pingdotgg/t3code#8569
* @ahmed-besic made their first contribution in pingdotgg/t3code#8392
* @MatthewFeroz made their first contribution in pingdotgg/t3code#8790
**Full Changelog**: pingdotgg/t3code@v0.0.36...v0.0.37
Upstream release: https://github.com/pingdotgg/t3code/releases/tag/v0.0.37
sandscooling pushed a commit to sandscooling/t3code that referenced this pull request Aug 31, 2026
Absorbs 36 upstream commits up to 9b2d043 (v0.0.37). Ten files conflicted
across fifteen hunks; every carried feature survives.
Additive conflicts, both sides kept: the agent orchestration setting beside
upstream's browser recording frame rate, the fork's rate-limit activity skip
beside upstream's turn-plan skip, the fork's plan usage meter import beside
upstream's video thumbnail helper, and the fork's debugger-capture test beside
upstream's renamed recording test.
Tie-breaks going upstream's way: the failed-tool icon is now circle-alert,
TurnPlanEntry is gone because upstream removed its own parameter, and
ThreadSyncStatusPill went with upstream's sync banner rework.
Re-wired rather than picked: upstream pingdotgg#8734 rebuilt the composer banners on new
primitives, so the carried dismiss control now rides ComposerBanner.Dismiss with
the trigger stretched across the row, and upstream pingdotgg#8828 folds every work group
behind one toggle, so the carried pin moved onto upstream's own standalone-row
path. Image rows join that pin, since the fold would otherwise hide the carried
work-log image row behind "+N tool calls".
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

preview:webDeploy a hosted-web preview to Vercel for this PR on every push.size:S10-29 changed lines (additions + deletions).vouch:trustedPR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@maria-rcks@juliusmarminge