Skip to content

fix(web): suppress the redundant t3team 'Thinking' while the native reasoning trace is live - #295

Merged
johnnyelwailer merged 1 commit into
mainfrom
fix/thinking-dedup
Sep 21, 2026
Merged

johnnyelwailer merged 1 commit into
mainfrom
fix/thinking-dedup

Conversation

@johnnyelwailer

Copy link
Copy Markdown
Owner

Problem

With the 2026-09-17 upstream sync (#11784 'show provider thinking traces'), the web timeline can show two 'Thinking' surfaces at once on a live turn: the provider's native reasoning-trace row and the t3team working-row state word ('Thinking', GHE #208/#236). Owner: if native thinking already shows, the redundant 'thinking' should not show; 'working'/'writing'/etc state words are fine.

Fix

When an active activity group ends in a reasoning entry (i.e. the native trace owns the live 'Thinking' surface for the current unsettled turn), the working-row lead word resolves 'Thinking' -> 'Working'. Everything else (state-word mechanism, working/writing/waiting words, the live-activity row, the trace row) is untouched. Implemented by extending the existing row-activity context (new 'liveReasoningTrace' flag beside 'suppressLiveActivityRow') — no new parallel mechanism.

Tests

  • New deterministic suite cases: exactly one 'Thinking' surface when the native trace streams (with activity state 'thinking' and with the no-state base-word fallback); 'Writing' state word unchanged while the trace is live.
  • Full 'MessagesTimeline' suite: 72 passed; 4 pre-existing 'restores the composer' failures are identical with and without this change (the suite cannot even load on clean main — see below).
  • 'tsc --noEmit' (apps/web): identical error set to clean main (single pre-existing error in 'openPullRequestLink.ts', out of scope).
  • Additive guard: zero delta for t3team-prefixed files; both touched files are already whitelisted in '.t3team-additive-guard.json'.

Also mocks 't3team-threadComposingSignal' in the timeline test file (test-only): the 'composerDraftStore -> composing-signal -> primaryEnvironment -> catalog -> connection/runtime' import cycle makes the whole suite unloadable under vitest entry order on post-sync main — pre-existing, independent of this fix.

Model: Nexi (Nexplore AI), harness: t3team.

…easoning trace is live

When the provider's own thinking trace (upstream #11784, merged in the
2026-09-17 sync) is streaming for the live turn, the timeline showed TWO
'Thinking' surfaces at once: the native trace row and the t3team
working-row state word (GHE #208/#236). The state word now reads
'Working' while the trace is visible; 'working'/'writing'/'waiting'
state words and the state-word mechanism are untouched.

Also mock t3team-threadComposingSignal in the timeline suite: the
composerDraftStore -> composing-signal -> primaryEnvironment -> catalog
-> connection/runtime import cycle makes the suite unloadable under
vitest's entry order on post-sync main (pre-existing, test-only fix).
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:S labels Sep 19, 2026
@johnnyelwailer
johnnyelwailer marked this pull request as ready for review September 21, 2026 13:47
@johnnyelwailer
johnnyelwailer merged commit 4e1201f into main Sep 21, 2026
9 of 17 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:S vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant