Skip to content

chore(sync): merge upstream main through 5ef56853 and #27313 - #18

Merged
eyeveil merged 347 commits into
mainfrom
sync/upstream-main-20261030
Oct 30, 2026
Merged

eyeveil merged 347 commits into
mainfrom
sync/upstream-main-20261030

Conversation

@eyeveil

@eyeveil eyeveil commented Oct 30, 2026 •

Copy link
Copy Markdown
Collaborator

Why

The fork was three days and 341 commits behind upstream main. This brings those commits in, plus Maria's open pingdotgg#27313, and keeps fork PRs #15 to #17 working: Home, fleet routing, coordination results, and project CI.

What changed

  • Merge upstream through 5ef56853, then fix(server): dev database copies drop links to other environments pingdotgg/t3code#27313.
  • Peer links merge against the upstream stack the fork had ported early. The fork still trusts one HTTPS origin per link, and links default on because Home routes over them.
  • Fork features move onto upstream's v2 thread links and its new composer, Usage, and settings layouts. Links to threads this client hasn't loaded stay openable.

Scope

  • Covers the merge, the conflict fixes, two fixes to upstream code, and longer Fork CI limits. Upstream's storage cleanup now reads older Git's broken-gitfile error.
  • Leaves out a release and any host update. The merge commit skips the release workflow.
  • Model-facing text grows by upstream's new instructions and tools. The evals were not run.

Tradeoffs

  • A picked machine may offer several candidate addresses, and only the first one that proves to be that machine is stored. Rejecting alternates outright would break upstream's new link-request cards.
  • Remote delegation loads the project toolkit per call instead of importing it, which breaks an import cycle that left src/server.ts unloadable.

Blast Radius

This touches every fork host on the next nightly. Riskier paths are linked-environment calls, Home thread links, and coordination results. Upstream's new migration 73 applies on top of nixbox's live history, which already records 72.

Verification

  • Fork CI ran check:changed across 783 test files. Format, lint, knip, typecheck, React compiler, and every test passed on 35179ee, after one rerun of an intermittent upstream browser test.
  • Fork Release built all three desktop targets and Android on this head.
  • Full local suites pass for shared, contracts, client-runtime, and mobile. Peer tests pass 68 of 68, and the delegation file passed 4 of 4 repeat runs.

Model and harness: Claude Opus 5.5 (lead, implementation) via Claude Code in T3 Code.

Bil0000 and others added 30 commits October 27, 2026 21:43
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…rt (pingdotgg#26303)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…being idle" (pingdotgg#26299)

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

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

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

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

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

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

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

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

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

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

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

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

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
maria-rcks and others added 21 commits October 30, 2026 02:36
…archiving the caller (pingdotgg#26718)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…to be killed (pingdotgg#27224)

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

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

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: AdEx-Partners-DE <stark.burns@adexpartners.com>
Co-authored-by: PR Batch Tester <agent@local.test>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
…be force stopped (pingdotgg#27252)

Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Rename leftover fakeProvider to fakePullRequestProvider, replace the removed
encodeScanCache in the advisor usage test, and drop an issue number from a
ClaudeAdapterV2 comment that lint rejects.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ider (pingdotgg#27115)

Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: Yordis Prieto <yordis.prieto@gmail.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
## Why
Bring 341 upstream commits from Oct 27 to Oct 30 into the fork and keep fork
PRs #15 to #17 (Home, fleet routing, coordination results, project CI) working.

## Conflict resolutions
- Peer links: upstream merged the linked-environment stack the fork had ported
  early, so those files merge against upstream 6918c35. The fork keeps one
  trusted HTTPS origin per link. Alternate addresses count only as candidates for
  a picked machine, and the link token is read before the peer is probed.
- Linked environments default on in the fork, because Home and fleet routing
  run over links and upstream now gates them behind a Labs setting.
- Thread links use upstream's v2 form. The parser still reads the fork's older
  v1 `?environmentId=` links that stored messages hold.
- Remote delegation loads the project toolkit per call, breaking an import
  cycle through Home routing that left `src/server.ts` unloadable.
- A replacement provider runtime survives an overlapping close, and coordination
  results skip projection reads for threads without coordination requests.
- Fork composer, Usage, and settings features moved onto upstream's new layouts:
  dictation, prompt suggestions, the Android usage widget, and Home settings.
- The agent context budget grows by upstream's new instructions and tools.
…nt links)

Maria's takeover of pingdotgg#27127 is still open upstream. The fork already clears
peer_environment_links and its own fork tables, so this keeps that list and
adds her regression test and AGENTS.md wording. Upstream's merge of the PR
will then apply cleanly.
@eyeveil eyeveil added the agent-context-increase Accept an intentional increase in agent context label Oct 30, 2026
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:XXL labels Oct 30, 2026
@greptile-apps

greptile-apps Bot commented Oct 30, 2026 •

Copy link
Copy Markdown

RetriggerView in GreptileConfidence Score: 3/5

[Critical impact] The update reaches server, web, mobile, desktop, and deployment workflows.

Fix remote cleanup after parent deletion and navigation to unloaded threads before merging.

Findings

  1. P1 Remote work survives parent deletion ▶
  2. P1 Unloaded thread links stop opening ▶
Fix with agent prompt
### Issue 1
apps/server/src/peer/RemoteDelegation.ts:524-529
When the user deletes a parent thread, the next forwarded call fails locally because `loadCaller` rejects the deleted parent. This handler treats that `thread_not_found` as proof that the remote thread is gone and records `"stopped"` without sending a stop there. The remote agent can keep changing files and spending tokens.

Keep a cleanup path that can stop the recorded remote child after its parent is deleted, and distinguish local caller failures from remote thread failures.

### Issue 2
apps/web/src/components/chat/MarkdownThreadLink.tsx:32-34
The server deliberately leaves older settled threads out of the initial snapshot, and `useThreadShell` only reads cached rows. A valid link to one of those threads now becomes an unclickable `UnresolvedChip`. On mobile, `relabelThreadLinks` also replaces unresolved explicit links with plain text. Users cannot open these existing threads from chat or Home until they happen to be loaded elsewhere.

Fetch the referenced thread or preserve navigation using its known environment and thread IDs instead of treating a cache miss as deletion.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Summary

This PR merges upstream changes and adapts the fork’s Home, peer links, remote delegation, thread links, and release workflows.

  • Agents can ask users to link another machine and send work there.
  • Thread links can name the machine and thread they open.
  • Database indexes speed up reads of active work and waiting link requests.

Reviews (1) · Last reviewed commit: "Merge upstream PR #27313 (dev database c..." · Reviewed by Greptile

Comment on lines +524 to +529
const reason = yield* finalReason(parentThreadId, taskId, error);
if (reason === undefined) return yield* error;
// Gone there, or no link to reach it by: nothing left to stop there.
const { task } = yield* readTask(parentThreadId, taskId);
const stopCount = task?.remoteChild?.stopCount;
yield* complete(parentThreadId, taskId, "failed", reason, "stopped", stopCount);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Remote work survives parent deletion

When the user deletes a parent thread, the next forwarded call fails locally because loadCaller rejects the deleted parent. This handler treats that thread_not_found as proof that the remote thread is gone and records "stopped" without sending a stop there. The remote agent can keep changing files and spending tokens.

Keep a cleanup path that can stop the recorded remote child after its parent is deleted, and distinguish local caller failures from remote thread failures.

Knowledge Base Used: Server orchestration and agent execution

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/server/src/peer/RemoteDelegation.ts
Line: 524-529

Comment:
**Remote work survives parent deletion**

When the user deletes a parent thread, the next forwarded call fails locally because `loadCaller` rejects the deleted parent. This handler treats that `thread_not_found` as proof that the remote thread is gone and records `"stopped"` without sending a stop there. The remote agent can keep changing files and spending tokens.

Keep a cleanup path that can stop the recorded remote child after its parent is deleted, and distinguish local caller failures from remote thread failures.

**Knowledge Base Used:** [Server orchestration and agent execution](https://app.greptile.com/neverliveitdown/-/custom-context/knowledge-base/issuelt/t3code/-/docs/server-orchestration.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Written by claude-opus-5-5 on behalf of eyeveil

Not changing this in the sync. In RemoteDelegation.ts, the fork's only change is loading the project toolkit per call. The follow and failure handling, including finalReason treating thread_not_found as final, is upstream's code as of 5ef56853. Fixing it here would fork upstream's delegation logic. It belongs in a separate upstream fix.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You’re right about the scope: the follow/failure handling is unchanged from upstream at 5ef56853; this fork’s RemoteDelegation.ts change is the per-call project-toolkit import. I won’t ask for a fork-only fix in this sync. The risk I described still applies to the inherited code, so it belongs in a separate upstream fix.

Comment on lines +32 to +34
if (thread === null) {
const unknown = unknownThreadLinkLabel(props.link, props.environmentId);
return <UnresolvedChip label={props.label ?? unknown} tooltip={unknown} />;

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P1 Unloaded thread links stop opening

The server deliberately leaves older settled threads out of the initial snapshot, and useThreadShell only reads cached rows. A valid link to one of those threads now becomes an unclickable UnresolvedChip. On mobile, relabelThreadLinks also replaces unresolved explicit links with plain text. Users cannot open these existing threads from chat or Home until they happen to be loaded elsewhere.

Fetch the referenced thread or preserve navigation using its known environment and thread IDs instead of treating a cache miss as deletion.

Knowledge Base Used: Contracts and protocol boundaries

Prompt To Fix With AI
This is a comment left during a code review.
Path: apps/web/src/components/chat/MarkdownThreadLink.tsx
Line: 32-34

Comment:
**Unloaded thread links stop opening**

The server deliberately leaves older settled threads out of the initial snapshot, and `useThreadShell` only reads cached rows. A valid link to one of those threads now becomes an unclickable `UnresolvedChip`. On mobile, `relabelThreadLinks` also replaces unresolved explicit links with plain text. Users cannot open these existing threads from chat or Home until they happen to be loaded elsewhere.

Fetch the referenced thread or preserve navigation using its known environment and thread IDs instead of treating a cache miss as deletion.

**Knowledge Base Used:** [Contracts and protocol boundaries](https://app.greptile.com/neverliveitdown/-/custom-context/knowledge-base/issuelt/t3code/-/docs/contracts-and-protocols.md)

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

Copy link
Copy Markdown
Collaborator Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Written by claude-opus-5-5 on behalf of eyeveil

Valid. The fork's previous chip always opened the thread from the ids in the link, and Home depends on that for threads on other machines. a9da0fc restores it. On web, a cache miss renders an openable chip, and its tooltip no longer says the thread is gone. On mobile, relabelThreadLinks keeps an unresolved v2 link as a labeled link instead of plain text. The shared test now covers that.

Threads the client has not loaded yet, such as older settled threads or
threads on another machine, render as an openable chip on web and stay links
on mobile. Upstream's merge showed them as unresolved or plain text, which
broke Home's links to threads elsewhere.
Ubuntu 24.04's Git reports a worktree whose gitfile points nowhere as an
invalid gitfile, not as "not a git repository". Cleanup now treats both as
a changed worktree, so it keeps the checkout instead of failing.
@eyeveil
eyeveil merged commit 8f43a7e into main Oct 30, 2026
15 of 16 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-context-increase Accept an intentional increase in agent context size:XXL 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.