Skip to content

fix(web): adopt six upstream chat fixes for the composer bar, question rows and file links - #924

Merged
rynfar merged 6 commits into
pylonfrom
upstream/2026-09-30-web-chat
Sep 30, 2026
Merged

rynfar merged 6 commits into
pylonfrom
upstream/2026-09-30-web-chat

Conversation

@rynfar

@rynfar rynfar commented Sep 30, 2026 •

Copy link
Copy Markdown
Collaborator

Problem

Six small web chat defects that upstream T3 Code fixed and Pylon still had (catch-up cycle for #865):

  • The collapsed composer context bar flipped between labels and icons on every measure, because a middle-truncated branch label was measured by one element's scrollWidth and lost its tail.
  • On desktop, the empty workspace and the "Couldn't start a new thread" screen had no drag region, so the window could not be moved.
  • Reconnecting to a server whose version differs was presented as "Finishing an update" even when the server was simply offline.
  • Question rows in the timeline led with a generic "User input submitted/requested" label instead of what the agent asked.
  • Inline code such as z-ai/glm-5.3 or Qwen/Qwen2.5-Coder became a file chip.
  • A link to the workspace root resolved to no relative path, went through basename lookup, opened a file surface and attempted a file read.

Fix

Source (upstream PR) Disposition
29abbf9b424b122c52bb20dccffac68bee367c09 (#13555) Adapted. Labels are measured by summing their text runs, capped at the motion span's max width.
eeea71a88108c375c04853f58c298a518a54acaf (#13713) Adapted. Electron gets a titlebar drag strip on the no-projects hero and the draft-start error.
dd582dee36976ccfd2a896cf50c3ee957ca7b9be (#13083) Adapted. The version-skew reconnect fold is removed; a reconnecting or offline server always shows the offline notice after the grace period.
916ec94f93da686303f878d506a760efd13506c1 (#12900) Adopted (cherry-pick, conflicts resolved). Question rows lead with the question text; the answer stays as the trailing preview.
88fbc2cac77ff2bf0d406c44754ecd8014976f5f (#13909) Adopted (clean cherry-pick). Version-suffix guard plus nine regression cases.
55ec55b1fb2e65f2736ff8420ae0373210c1911e (#12449) Adopted (clean cherry-pick). Workspace root normalizes to ., which opens the singleton files explorer and suppresses the file read.

Pylon adaptations

  • Composer bar: only the label text measurement changed. Pylon's hosted resting-composer controls measurement and has-content tracking in useLabelsOverflow are untouched.
  • Offline notice: Pylon's description line, disabled "Reconnecting..." button and Connections action are kept; only the "Finishing an update" branch and its suppression of the update banner are removed. Update banners and dialogs keep their Pylon copy.
  • Question rows: Pylon's expanded "Command" heading (displayText) and user-input.answer-submitted folding are kept. Upstream's AgentSpawnRow context in the conflict is not part of this source and was not brought in. The new getQuestionTextPreview tests are appended to Pylon's existing userInput.test.ts.
  • Empty workspace: Pylon's hero and error classes are kept; only the drag strip is added.

Exclusions

  • Upstream's electron={isElectron} on the hosted-static onboarding header belongs to a different upstream commit and is not included.
  • Mobile is not changed. It consumes the shared inline-code heuristic (apps/mobile/modules/t3-markdown-text/src/markdownLinks.ts) and so gets the model-id guard; it does not call workspaceRelativeFilePath.

Verification

  • vp test run on packages/client-runtime/src/markdownLinks.test.ts, packages/client-runtime/src/work-log/userInput.test.ts, apps/web/src/components/chat/MessagesTimeline.test.tsx, apps/web/src/components/files/FilePreviewPanel.test.ts, apps/web/src/markdown-links.test.ts, apps/web/src/rightPanelStore.test.ts, apps/web/src/workspaceBasenameLookup.test.ts, apps/mobile/src/lib/markdownLinks.test.ts: 8 files, 329 tests passed (rerun after rebase).
  • vp run -F @t3tools/web typecheck and vp run -F @t3tools/client-runtime typecheck: both ran and exited 0 with no errors (run before the final rebase, which only brought in server commits).
  • vp lint on the 18 changed files: 0 errors; the warnings reported are on lines this PR does not touch.
  • vp fmt --check on the 18 changed files: clean.
  • The composer measurement, drag strip and offline notice changes have no unit tests upstream or here.

Limits

No rendered-client pass was done: no browser, desktop or simulator run. The composer measurement, drag region and offline notice are verified by typecheck and review only.

Refs #865

Model: Claude Opus 5.5. Harness: Claude Code in Pylon. Workflow: review-t3-upstream skill.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.

otavio and others added 6 commits September 30, 2026 09:21
… chips (#13909)

(cherry picked from commit 88fbc2cac77ff2bf0d406c44754ecd8014976f5f)
(cherry picked from commit 55ec55b1fb2e65f2736ff8420ae0373210c1911e)
Ported by hand from upstream eeea71a88108c375c04853f58c298a518a54acaf (#13713);
Pylon's hero and draft-error markup carry their own classes.
(cherry picked from commit 916ec94f93da686303f878d506a760efd13506c1)
…scroll

Ported by hand from upstream 29abbf9b424b122c52bb20dccffac68bee367c09 (#13555).
Pylon's strip also tracks hosted composer controls and has-content state, so
only the label text measurement changes.
Ported by hand from upstream dd582dee36976ccfd2a896cf50c3ee957ca7b9be (#13083).
Pylon's offline notice keeps its description and Connections action.
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Sep 30, 2026
@rynfar
rynfar merged commit 77574ce into pylon Sep 30, 2026
16 checks passed
@rynfar
rynfar deleted the upstream/2026-09-30-web-chat branch September 30, 2026 15:32
@github-actions

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire 14.0 KiB 14.0 KiB −4 B (−0.0%) 15.1 KiB ✅
Codex Thread snapshot wire 7.3 KiB 7.3 KiB −4 B (−0.1%) 7.3 KiB ✅
Codex Live turn WebSocket wire 6.7 KiB 6.7 KiB 0 B (0.0%) 7.8 KiB ✅
Codex Live turn WebSocket decoded 58.0 KiB 58.0 KiB 0 B (0.0%) 66.4 KiB ✅
Codex Live turn messages 9 9 0 (0.0%) 21 ✅
Claude Total thread wire 14.0 KiB 14.0 KiB −24 B (−0.2%) 15.1 KiB ✅
Claude Thread snapshot wire 7.3 KiB 7.3 KiB +2 B (+0.0%) 7.3 KiB ✅
Claude Live turn WebSocket wire 6.8 KiB 6.7 KiB −26 B (−0.4%) 7.8 KiB ✅
Claude Live turn WebSocket decoded 58.9 KiB 58.9 KiB 0 B (0.0%) 66.4 KiB ✅
Claude Live turn messages 9 9 0 (0.0%) 21 ✅

Baseline: da77592 · PR result: 20662ac · Source CI: success

Scenario and decoded snapshot size

10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.

  • Codex decoded thread snapshot: 115.7 KiB
  • Claude decoded thread snapshot: 116.4 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

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

Labels

size:L 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.

3 participants