Skip to content

chore: T4 now builds on T3 Code v0.1.5 - #135

Merged
LukasDoubleU merged 813 commits into
t4from
upkeep/v0.1.4
Oct 31, 2026
Merged

LukasDoubleU merged 813 commits into
t4from
upkeep/v0.1.4

Conversation

@LukasDoubleU

@LukasDoubleU LukasDoubleU commented Oct 29, 2026 •

Copy link
Copy Markdown
Owner

T4 moves its base from T3 Code v0.1.2 to v0.1.5, through v0.1.4 and skipping v0.1.3 as a separate step: 804 upstream commits (779 to v0.1.4, then 25 to v0.1.5). Nearly everything T4 carried from upstream has now shipped there, so T4 uses upstream's code for it and carries only the tray (#19176) and the last-message sort (#22032).

Closes #3

Changes users will notice

These come from following upstream's code; they belong in the release notes.

  • Settled threads leave project folders. Folders hold active threads only; settled threads sit on the shared Settled shelf for every grouping. This is upstream's final #21039. A project with no active threads gets no folder unless you filter to it.
  • Beta is now Labs. Upstream renamed the page, and its /settings/beta links redirect there. T4's own Beta page is gone: the boring sidebar and linked environments toggles are on Labs, Compact idle threads moved to Settings → Providers → Advanced.
  • Ctrl+N on servers without clone tracking. The new-thread dialog no longer falls back to the blocking clone for servers that lack clone tracking; upstream removed that path.
  • No update track switch. Upstream's Settings → About → Update track (#26288) moves every machine to the newest npm release of the other track. T4 publishes neither npm releases nor a Nightly feed, so T4 builds hide it, refuse a switch started from any T3 Code app, and ignore a track an earlier build saved. A desktop that someone moved to Nightly gets updates again.
  • Startup recovery links to T4's releases. When the desktop app can't start, Reinstall and Open releases open this repository's releases instead of upstream's.
  • Full conversations on switching back. Upstream's recovery (#25610) replaces T4's fix(server): switching back to a provider whose old conversation is full starts a fresh one #134: switching back to a provider whose old conversation has no room still starts a fresh one with the thread's history, and now also keeps background work running and covers ACP providers.

Also new for T4 users:

  • Agents can offer to link a machine again. t3_environment_link is back, with its link card, as issue Hide the agent tool t3_environment_link #3 planned once an official release ships the peer-link stack. Asked to work on a machine that isn't linked, an agent offers the link in a card instead of sending you to Settings.
  • Linked environments stay on. Upstream gates them behind a Labs toggle that starts off and also pauses existing links. T4 settings saved before the toggle existed have no value for it, so T4 defaults it to on; without that, every machine's links would stop after the update. Settings → Labs still turns them off.

From upstream

v0.1.3, v0.1.4 and v0.1.5 bring, among others:

  • The new design is the only design (#24865, #25251, #25778); F6 and arrow keys move through the sidebar (#25877).
  • Linked environments (#16653 and its stack) and project folders (#21039) upstream, with a Labs page, guest links (#24104) and custom snooze presets (#26208).
  • MCP tool schemas cut by about a third, 18 tools merged into action tools (#25423, #25790).
  • New drafts fall back to a configured model when the default provider is out of usage (#26164).
  • Returning to a provider whose conversation is full starts a fresh one with the thread's history (#25610).
  • Upstream deleted about 18k lines nothing reached (#26238), capped comments at four lines and requires a reason on every React effect.
  • v0.1.5: turn a No project thread into a project (#26767), the undo notice moves to the sidebar footer (#26874), choose what the thread details card shows (#26904), a Labs toggle keeps usage limits in view (#26859), release notes in the update popover (#26893), and Update everything updates service hosts without waiting on npm (#26917). No migration changes.
  • Hundreds of fixes on web, desktop, mobile and the server.

Carries dropped

Shipped in v0.1.4, so T4 now uses upstream's version:

  • Peer-link stack: #16653, #16654, #16655, #16684, #16695, #16698, #16719, #17130.
  • Project folders: #21039.
  • Picked from main: #23886, #21299, #23798, #24589, #24571, #24622, #24617, #23751, #24032, #24343.

scripts/t4/upstream.json now has base v0.1.5 and only #19176 and #22032. The README's carried table and feature list follow, and versions read 0.1.6-t4.N.

Migrations

Upstream ships the peer-link migrations at the same ids and names as T4 (070–072), so T4 has no migrations of its own any more and the reconciler from #121 is gone.

  • A database from any 0.1.3-t4.N build migrates as upstream's: nothing runs.
  • A fresh database runs upstream's 001–072.
  • 069 (message search) keeps T4's triggers, which also index messages agents and schedules write (Thread search finds the right thread first: ranked by match and recent use, indexed message search #127). Every T4 database already ran them.
  • Upgrade note: a machine still on a 0.1.2-t4.N build has the peer-link migrations at 068–070. This version refuses to start on that database, with upstream's "would skip required schema migrations" error, and changes nothing. Install the current 0.1.3-t4.N release first, then this one.

scripts/t4/README.md describes this and keeps undo-peer-link-migrations.ps1 only for switching to an official release older than v0.1.4, which T4 doesn't support.

Conflicts

241 files conflicted. Most of the carried code resolved by merging against a base of v0.1.2 plus T4's carries, so only T4's own changes met upstream's. The rest, by area:

Verification

Heavy steps ran one at a time. check:changed starts all its steps at once (format, lint, knip passes, a 4-way typecheck and unthrottled vitest), so its steps ran one by one instead, over the 432 files that differ from v0.1.5.

  • Typecheck: every workspace package with a typecheck script passes, one at a time.
  • Format, lint, knip, GraphQL: pass. Lint needed fork code to follow upstream's stricter rules: comments of four lines or fewer, a stated reason on each React effect, and the newer Effect diagnostics.
  • Tests: 181 test files beside fork changes, --maxWorkers=2, one package at a time; all pass:
    • server 68 files (1,326 tests), web 45 (1,126), mobile 12 (247), desktop 10 (94).
    • contracts 10 (75), shared 11 (175), client-runtime 12 (146), provider-core 5 (21), provider-opencode 3 (52), three more packages 3 (24), scripts 2 (50, 4 skipped).
    • fix(server): switching back to a provider whose old conversation is full starts a fresh one #134's test passes on upstream's recovery: starts a fresh native thread when a returning handoff exceeds the old one.
    • New: the notification gate keeps the user's completion when a turn they didn't start begins within the grace (fails without its fix); a T4 build refuses track switches and ignores a saved track; T4's release page URL.
    • Two fork test expectations changed with upstream's behavior: project folders no longer include empty projects (#26387), and the thread menu's More → Copy now lists upstream's Thread copy.
  • node --test .github/scripts/t4-upstream-watch.test.cjs: 11 pass with the new upstream.json.
  • Not run here: the 19 browser test files (headless Chromium) and the full suites; CI runs them.
  • Migrations:
    • migrate-dev-db copied a read-only snapshot of a real T4 database (history up to 072) and the v0.1.4 build ran no migrations on it; its slot check passed. v0.1.5 changes no migrations.
    • A fresh database ran all 72 migrations, then none on a second start.
  • Tooling: upstream now pins vite-plus 1.4.0. A global vp 1.0.0 fails to load @effect/vitest files and skips lint rules, so everything above ran with the workspace's node_modules/.bin/vp.

Workflows

Upstream added agent-context-budget.yml, mobile-fingerprint-label.yml, relay-preview.yml, relay-preview-cleanup.yml and stale-needs-more-info.yml. They are left as they are, to be disabled on GitHub after the merge.

Done by Claude Opus 5.5 in Claude Code, in T3 Code.

🤖 Generated with Claude Code

t3dotgg and others added 30 commits October 27, 2026 02:51
…otgg#25837)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#25860)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…d one (pingdotgg#25839)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s it unavailable (pingdotgg#25632)

Co-authored-by: Theo Browne <me@theo.li>
…otgg#25841)

Co-authored-by: jason chien <3936511+jason5545@users.noreply.github.com>
…b checks

agent-device 0.21.32 folds the iPhone Duo in Simlock's device set. The
folded Duo keeps its side rail inside a thread, so the hide-on-push tab
checks only apply to bottom tab bars. The Duo poses stay pending: alert
accept cannot see the open-link prompt on the Duo.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…derive instead of syncing (pingdotgg#25813)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…effects (pingdotgg#25895)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#25900)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@theo.li>
…ount connects (pingdotgg#25868)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…aint (pingdotgg#25909)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…wn panel (pingdotgg#25908)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…tgg#25920)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…dropped (pingdotgg#25916)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ng (pingdotgg#25903)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…25929)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#25928)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#25913)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rs (pingdotgg#25859)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…n of effects (pingdotgg#25857)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ft pane (pingdotgg#18492)

Co-authored-by: maria-rcks <maria@kuuro.net>
t3dotgg and others added 25 commits October 29, 2026 01:51
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…a thread (pingdotgg#26874)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…dits (pingdotgg#26876)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…one step (pingdotgg#26288)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…gg#26910)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
… note (pingdotgg#26893)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…otgg#26912)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…s are labeled (pingdotgg#26928)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ts (pingdotgg#26715)

Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…poser (pingdotgg#26929)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
T4 moves its base from T3 Code v0.1.2 to v0.1.4 (779 commits, v0.1.3
included). The peer-link stack, project folders and every fix picked
from upstream's main shipped there, so T4 takes upstream's code for them
and keeps its own features on top.

- Migrations 070-072 match upstream's ids and names, so the fork's
  reconciler is gone. Migration 069 keeps the fork's triggers, which also
  index messages agents write.
- MCP tool additions move onto upstream's compact descriptions and
  action tools (pingdotgg#25423). t3_environment_link returns, as issue #3
  planned once an official release ships the stack.
- Upstream's handoff recovery (pingdotgg#25610) replaces the fork's own fix for
  switching back to a full conversation.
- Fork code follows upstream's stricter comment, effect and Effect
  diagnostics rules.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The fork's own fix for this case gave way to upstream's handoff recovery
(pingdotgg#25610). Its integration test stays: back on Claude at 190k of 200k
tokens, the turn starts a fresh native thread that gets the whole thread,
and the next turn continues on it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
- upstream.json: base v0.1.4; only the tray (pingdotgg#19176) and the last-message
  sort (pingdotgg#22032) are still carried.
- The README names the new base and versions, the two remaining carries,
  and that official releases from v0.1.4 on read a T4 database.
- t4-release.yml gives 0.1.5-t4.1 as its example version.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream ships linked environments behind a Labs toggle that starts off
and, while off, also pauses existing links. Settings saved by earlier T4
builds have no value for it, so every machine's links would stop after
this update. The fork defaults it to on; Settings > Labs still turns it
off, and an explicit off stays off.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…notice

Upstream's notification gate waits 2 s before a completion notice and
drops it if the thread starts working again, expecting the next run to
notify. The fork keeps turns the user didn't start quiet, so when one
began within those 2 s, neither run notified and the user never heard
that their own turn finished. Such a run now leaves the pending notice
alone; a continuation of the user's own turn still replaces it.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
T4 moves on to T3 Code v0.1.5 (25 commits on v0.1.4, no migration
changes). Conflicts were small: the fork keeps its account failover and
thread icon capabilities next to upstream's Turn into project, its
Dismiss, icon and topic actions in the thread menu, and its header
action slot on sidebar shelves, while the undo notice moves to the
sidebar footer as upstream has it (pingdotgg#26874). cliRelease.ts keeps the
fork's release repository.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Upstream's Update track switch (pingdotgg#26288) moves every machine to the
newest npm release of the other track and saves that track on each
desktop. T4 publishes neither npm releases nor a Nightly feed, so a
switch could not install upstream T3, but it left T4 desktops on a
track with no builds, where updates stop.

On builds from this repository's releases (X.Y.Z-t4.N, X.Y.Z-test.N):
- the server refuses any update that asks to switch tracks, which is
  how a switch reaches remote desktops and service hosts, from any
  T3 Code app;
- the desktop ignores a saved track, so a machine an earlier build
  moved to Nightly recovers;
- Settings > About and settings search no longer offer the switch.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
upstream.json, the README and the t4-release.yml example follow the new
base. The tray (pingdotgg#19176) and the last-message sort (pingdotgg#22032) are still
carried.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
When the desktop app cannot start, its recovery page offers to reinstall
the last build that started or to open the releases page. Both linked to
upstream's releases, where T4 versions do not exist and the installers
are upstream T3 Code. They now open this repository's releases, from the
same place every T4 download already uses.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@LukasDoubleU LukasDoubleU changed the title chore: T4 now builds on T3 Code v0.1.4 chore: T4 now builds on T3 Code v0.1.5 Oct 29, 2026
@LukasDoubleU
LukasDoubleU merged commit b3281a7 into t4 Oct 31, 2026
5 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Hide the agent tool t3_environment_link