Skip to content

sync(upstream): merge upstream/main 48aa875c0 into fork/dev - #372

Merged
patroza merged 11 commits into
fork/devfrom
sync/upstream-48aa875c0
Aug 7, 2026
Merged

sync(upstream): merge upstream/main 48aa875c0 into fork/dev#372
patroza merged 11 commits into
fork/devfrom
sync/upstream-48aa875c0

Conversation

@omegent-app

@omegent-app omegent-app Bot commented Aug 7, 2026

Copy link
Copy Markdown

Adopts upstream through 48aa875c0 — the ten commits that landed after #368, headlined by
pingdotgg#5566 (timeline live-follow), pingdotgg#5561 (reconnect loops during server stalls) and
pingdotgg#5558/pingdotgg#5551 (plans fold into chat, Build/Plan toggle removed).

Important

Merge with a merge commit, not squash. Squashing collapses the second parent and discards
upstream's commits as ancestors — the thing that keeps "commits behind upstream" honest.

Upstream commits entering the product

Commit
48aa875c0 feat(web): remove Build/Plan toggle from the composer (pingdotgg#5551)
a8cd2ad2e fix(web): plans stop hijacking the UI, fold into chat instead (pingdotgg#5558)
4a07c1ca9 docs: ship production T3 Connect public config in .env.example (pingdotgg#5573)
cf5c9948c fix(web): keep agent panel rows stable (pingdotgg#5569)
2288d416a fix(web): stop the "requests are slow" warning firing on every provider update (pingdotgg#5570)
ddfe45c66 test(server): catch client transfer regressions in CI (pingdotgg#5350)
9547cf246 fix(server): one disconnecting client no longer blocks every reconnect (pingdotgg#5572)
1c7d059f5 fix: scrolling up during a running thread no longer snaps back to the bottom (pingdotgg#5566)
6fa457607 fix(server): settle stopped Claude subagents (pingdotgg#5568)
ae7b27de8 fix: prevent reconnect loops during server stalls (pingdotgg#5561)

Behavioural decision you should know about

The fork's "keep the open WebSocket lease when a foreground liveness probe fails" is replaced by
upstream's probe model.
Both address the same symptom — reconnect churn while the server is
stalled. The fork swallowed the probe failure; upstream pingdotgg#5561 instead splits the wake reasons
(application-active-probe vs application-active-reconnect), adds tolerance windows, and lets the
first post-probe attempt skip a backoff rung.

Keeping both was not an option: the auto-merge produced exactly that, and the fork's swallow made
upstream's wakeProbeFailed machinery unreachable dead code. I took upstream's model and kept the
fork's additions around it (connection diagnostics log, labelled ping-timeout errors,
followNetworkStatus resume handling). Say the word and I'll restore the lease-keeping behaviour
on top of upstream's model instead.

Resolutions

13 conflicted files. What actually needed judgement:

Where Situation Resolution
supervisor.ts fork's probe swallow welded onto upstream's new wakeProbeFailed path — the swallow made it dead probe failure propagates; log kept as tapCause (see above)
session.test.ts upstream's patched pinger now tolerates two missed pong windows, so the fork's ping-timeout test fired too early and upstream's new test expected a bare transport close fork's labelled timeout reporting kept; both tests re-timed to the new window
ChatView.tsx fork's steering-queue send branch vs upstream's rebuilt anchoring; two follow-state variables coexisting after auto-merge (maintainTimelineAtEnd + timelineLiveFollowEnabled) queue-chip branch kept, live-edge branch rebased onto upstream's follow state; the fork's superseded variable removed
ThreadFeed.tsx same collision on mobile: upstream's follow latch vs the fork's isAtEnd, with the fork's stale handlers surviving as duplicates upstream's latch adopted; the fork's unread-activity dot rebuilt on it rather than dropped
plan surfaces upstream deleted PlanSidebar.tsx and folded plans into chat; the fork carried sidebar auto-open, dismissal and a toggle sidebar wiring removed with the surface; the fork's settle-independent follow-up composer gate and findSidebarProposedPlan kept (the latter was silently dropped by the auto-merge while ChatView still called it)
MessagesTimeline.logic.ts two row-union members merged into one malformed member; resolveOlderHistoryAutoLoad left over from the superseded pagination candidate, referenced only by its own tests union split; dead helper and its tests removed
Omegent deep link fork's #message-{id} scroll effect sat inside a block upstream rewrote kept, retargeted at upstream's follow state
grokSegments.test.ts upstream's new ThreadPlanProgressService missing from a fork test's layer layer provided

Adversarial review

Both reviewers ran over the git show --cc resolution surface with the merged worktree available.

grok-4.5 — no high or medium findings; races/ordering, React effects and test-assertion integrity all reported clean. Four low findings, all fixed:

Finding Disposition
supervisor test kept the fork's keep-lease title on upstream's reconnect body — a later "fix" could reintroduce keep-lease to match the name Fixed. Renamed to quickly replaces a stalled mobile session after a probe timeout, plus a releaseCount === 1 assertion matching the desktop-side test
ThreadFeed: isAtEndRef never read or written after init; userNavigationInProgressRef write-only — leftovers of the retired fork latch Fixed. Both removed
ThreadFeed: contentInset still destructured from the scroll event, unused since upstream's latch uses getState() Fixed. Removed from the destructure
SidebarV2: upstream's role="status" sr-only "Regenerating title" absent from both title rows Fixed, though not caused by this merge — the v2 rows are a fork rewrite of upstream's row, so this never came across with the surface. Derived locally from thread.titleRegeneration and restored in both rows

gpt-5.6-sol — two findings, both fixed:

Finding Disposition
MEDfindSidebarProposedPlan lost its only production consumer: it was restored during the merge because ChatView called it, but the plan-sidebar resolution removed that call Fixed. Helper and its tests removed; activeProposedPlan uses findLatestProposedPlan directly
LOW — same misnamed supervisor test as above Fixed as above

Both independently confirmed the intentional keep/drop surface is coherent: probe failures now reach wakeProbeFailed (tapCause, not swallowed), the live-follow rename is consistent through ChatView → MessagesTimeline → tests, steering-queue chips skip the live-edge re-arm, mobile unread only latches while follow is broken, and the transfer-budget test adds the omegent-t3 handshake rather than loosening the gate.

Verification

  • Full recursive typecheck clean across 17 packages.
  • 2,277 tests pass; the only failure is the pre-existing CodexTextGeneration launch-args one,
    which reproduces on unmerged fork/dev.
  • pnpm-lock.yaml regenerated rather than hand-merged.

Co-authored by @patroza

opened by Patrick Roza in chat thread Discord · Discord · T3

gfsaaser24 and others added 10 commits August 6, 2026 21:14
Co-authored-by: t3-turbo-simulation <simulation@t3turbo.local>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Theo Browne <me@t3.gg>
… bottom (pingdotgg#5566)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…rovider update (pingdotgg#5570)

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
…otgg#5573)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…tgg#5558)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Adopts the ten upstream commits after #368: timeline live-follow (pingdotgg#5566),
reconnect-loop handling during server stalls (pingdotgg#5561), plans folded into chat
(pingdotgg#5558/pingdotgg#5551), plus server settle/reconnect fixes and the transfer-budget CI
test (pingdotgg#5350).

The fork's "keep the open WebSocket lease when a foreground liveness probe
fails" is replaced by upstream's probe model. Both target reconnect churn during
server stalls; upstream splits the wake reasons (probe vs reconnect), adds
tolerance windows and a first-attempt ladder skip. Keeping both was incoherent:
the auto-merge left the fork's swallow in front of upstream's wakeProbeFailed
path, making it dead code. The fork's diagnostics log, labelled ping-timeout
errors and followNetworkStatus resume handling are kept around it.

Welds found by typecheck and tests, not by conflict markers:
- ChatView and ThreadFeed each ended up with two follow-state variables, the
  fork's superseded one still being written; converged on upstream's.
- findSidebarProposedPlan was dropped from session-logic while ChatView still
  called it; restored.
- Two timeline row-union members merged into one malformed member.
- The fork's pre-latch ThreadFeed handlers survived as duplicates alongside
  upstream's; removed, with the fork's unread-activity dot rebuilt on the latch.
- resolveOlderHistoryAutoLoad, left over from the superseded pagination
  candidate, was referenced only by its own tests; removed with them.
- Upstream's transfer-budget test opened a socket without the fork's omegent-t3
  product handshake, so the environment rejected it.

Plan sidebar wiring is removed with the surface upstream deleted; the fork's
settle-independent follow-up composer gate is kept.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@omegent-app
omegent-app Bot force-pushed the sync/upstream-48aa875c0 branch from 7280ad1 to d5ac3b9 Compare August 7, 2026 08:37
@patroza
patroza merged commit 95aea55 into fork/dev Aug 7, 2026
4 checks passed
omegent-app Bot added a commit that referenced this pull request Aug 7, 2026
Adopts the six upstream commits after #372: per-device provider settings
(pingdotgg#4479), the modular theme library and theme editor (pingdotgg#5226), Done/Woke sidebar
semantics (pingdotgg#5579), the non-pulsing Working label (pingdotgg#5580), mobile T3 Connect
device cleanup (pingdotgg#5563), and a download-page copy fix (pingdotgg#4511).

Upstream's new filePicker/projectSearch/themeEditor shortcuts arrive with an
overlay-mode host for the command palette. The fork rewrote that component, so
the host was ported rather than taken: the palette reducer gains `mode` and
`ToggleMode`, and the two overlays bring their own popup instead of the popup
being lifted out of OpenCommandPaletteDialog. Without that the new default
keybindings would have been dead.

Welds found by typecheck and tests, not by conflict markers:
- SidebarV2 ended up with two per-row VCS status queries: upstream's full-mode
  `vcsEnvironment.status` auto-merged in above the fork's budgeted
  `listStatus`. Upstream's new isWoke reads prState, so the fork's query and its
  pr/prState derivation are hoisted above it and the duplicate dropped. Keeping
  the fork's list mode matters: full mode is one poller per worktree.
- ElectronDialog: the fork's pickApplication and upstream's pickFiles are
  independent additions that collided at every declaration site.
- The keybindings test fixture kept the fork's list, silently dropping
  upstream's two new bindings while its new assertions expected them.

The v1 sidebar body is a fork rewrite; upstream restructured the same region for
its own layout, so both sides were whole-body alternatives and the fork's is
kept.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
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.

3 participants