Skip to content

Sync upstream t3code (2026-08-25) - #106

Merged
bcotrim merged 1 commit into
mainfrom
mognet/a387b5f2
Aug 25, 2026
Merged

Sync upstream t3code (2026-08-25)#106
bcotrim merged 1 commit into
mainfrom
mognet/a387b5f2

Conversation

@bcotrim

@bcotrim bcotrim commented Aug 25, 2026

Copy link
Copy Markdown
Owner

Ports 19 of the 30 upstream commits in b4be33f07..99960383d.

What came in

Server reliability

Attachment pre-upload (pingdotgg#8048)

Images upload while you are still typing, with a per-image queue, progress and retry affordances, a server upload endpoint, and cleanup of orphaned uploads when a dispatch fails.

Web

Intentionally skipped

  • 17dbe8dda, 8287f2c3a, a1379db81 — Usage-only
  • 9eba1252c, 2d2efff28, f9a726e62 — mobile-only
  • e31e568bdapps/marketing
  • a00218741 — upstream contributor vouching
  • 643daa516, c0047c252 — both only edit patches/@legendapp__list@3.3.5.patch. Their react.js/react.mjs hunks are real web fixes, but pnpm keys patches by exact version and this fork pins @legendapp/list at 3.3.3 with no patch entry. Adopting them needs a version bump plus a lockfile change, which belongs in a dedicated dependency PR.
  • 7c6163c67 (Codex app access approval prompts) — blocked on the Effect upgrade. Codex sends the approval choices as requestedSchema.properties.<field>.enum, and the generated McpElicitationPrimitiveSchema is Union([EnumSchema, StringSchema, NumberSchema, BooleanSchema]). On this fork's Effect beta.78 that union resolves { type: "string", enum: [...] } to the plain string member and drops enum during decode, so every form elicitation is declined before it reaches the user. Decoding McpElicitationEnumSchema alone keeps enum, so the defect is union member selection, not the schema. Upstream runs beta.103, where its five elicitation integration tests pass. It was ported, observed failing, and reverted in full; revisit with the beta.103 migration.

Fork decisions preserved

  • New-thread model defaults untouched. No ported commit touches thread creation or model selection; useHandleNewThread.test.ts and resolveNewDraftModelSelection coverage are unchanged and passing.
  • apps/mobile, apps/marketing, Usage, the cloud service launcher and telemetry/AnalyticsService stay deleted. Dropped apps/server/src/serviceLauncher.ts from 3fd506433, the recordClientCommandAnalytics call that came with the ws.ts hunk of e9f50c3ef, and the mobile halves of 99960383d.
  • Rebranded incoming strings to Mognet: the t3-entrypoint-test- prefix and t3 symlink name in entrypoint.test.ts, the t3-opencode-inventory- prefix and T3_TEST_* env vars in opencodeRuntime.inventory.test.ts, and t3code/bootstrap-refName in server.test.ts.
  • e9f50c3ef adapted to this fork's composer: upstream's ChatView hunk rewrites the composer glass wrapper and terminal state this fork replaced, so only the two upload-capability props were taken.

Notable local fixes

  • Added HostProcessExecutablePath to packages/shared/src/hostProcess.ts. It arrived upstream with the removed t3 connect surface, so this fork never had it, and the incoming OpenCode inventory test needs it.
  • Fixed the incoming symlink case in entrypoint.test.ts for macOS, where os.tmpdir() is itself reached through a symlink. Upstream's version only passes on Linux.

Marker

docs/operations/upstream-sync.md last-reviewed upstream commit updated to 99960383d094b850f0001d3067fa604aa3adf7d6 (2026-08-25), with a full review log entry.

How to test

pnpm install && pnpm run quality:core — 2502 tests pass, typecheck and lint clean, formatting clean.

Attachment pre-upload — Open a thread, paste or drop an image into the composer. It should start uploading immediately and show progress; the send button stays disabled until the upload finishes. Kill the server mid-upload to see the failed state, then use the retry action. Send a message with an attached image and confirm it arrives.

Terminal sidebar grouping — Open the terminal panel, split a terminal horizontally and vertically. The sidebar group headers should read "Side by side" and "Stacked" with a count, and "Single" for an unsplit group. Hover a terminal row: its icon should swap to a close X.

Terminal links — Print a path that exists and one that does not in a terminal. Only the real one should render as a link.

File links in chat — Ask an agent to reference a file. Command-click the link; it should open in the file viewer, not the browser. On Windows, C:\path\to\file.ts in chat should be clickable.

Version skew — Connect a client to a server on an older version and confirm the mismatch banner appears. Connect to a server that is ahead and confirm no banner. Connect a nightly client to a stable server on the same core version and confirm no banner.

Worktree recreation — Delete a thread's worktree directory from disk, then send a turn in that thread. It should recreate the worktree and run instead of failing. Delete the same thread twice and confirm the second delete is a no-op.

Submodules — Create a thread in a repo with submodules and confirm the new worktree has them checked out.

Pull requests — Merge a PR and delete its branch; the merged badge should persist. Reload a PR that changed on the remote and confirm the panel shows the new state rather than a cached one.

CLI on older Node — Run the CLI under Node 22.17. It should print output instead of exiting 0 silently.

🤖 Generated with Claude Code

@bcotrim bcotrim added the upstream-sync Automated upstream sync PR label Aug 25, 2026
@bcotrim
bcotrim merged commit 25c4b27 into main Aug 25, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

upstream-sync Automated upstream sync PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant