Repository navigation
chore(sync): merge upstream main through 5ef56853 and #27313 - #18
Conversation
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>
…ingdotgg#26266) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…ingdotgg#26301) 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>
…gdotgg#26326) 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>
…gdotgg#26330) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…#26345) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com>
…from a button or mod+/ (pingdotgg#26777)
…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>
…dotgg#24392) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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>
…gdotgg#24320) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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>
…ngdotgg#27430) Co-authored-by: Claude Opus 5.5 <noreply@anthropic.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.
[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. FindingsFix 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.SummaryThis PR merges upstream changes and adapts the fork’s Home, peer links, remote delegation, thread links, and release workflows.
Reviews (1) · Last reviewed commit: "Merge upstream PR #27313 (dev database c..." · Reviewed by Greptile |
| 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); |
There was a problem hiding this 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
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.There was a problem hiding this comment.
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.
There was a problem hiding this comment.
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.
| if (thread === null) { | ||
| const unknown = unknownThreadLinkLabel(props.link, props.environmentId); | ||
| return <UnresolvedChip label={props.label ?? unknown} tooltip={unknown} />; |
There was a problem hiding this 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
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.There was a problem hiding this comment.
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.
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
5ef56853, then fix(server): dev database copies drop links to other environments pingdotgg/t3code#27313.Scope
Tradeoffs
src/server.tsunloadable.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
check:changedacross 783 test files. Format, lint, knip, typecheck, React compiler, and every test passed on35179ee, after one rerun of an intermittent upstream browser test.Model and harness: Claude Opus 5.5 (lead, implementation) via Claude Code in T3 Code.