chore(coil): merge upstream/main d1d15c67f4 (867 commits) - #145
Merged
Conversation
Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…dotgg#10463) Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…ccount (pingdotgg#10462) Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
… second one (pingdotgg#10440) Co-authored-by: Claude Code <noreply@anthropic.com>
…ed (pingdotgg#10435) Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…dotgg#10019) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…diff fallback (pingdotgg#9828) Co-authored-by: James <jamescollard2005@gmail.com>
…11347) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…1338) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
…g#10757) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
…11354) Co-authored-by: maria-rcks <254055478+maria-rcks@users.noreply.github.com>
Co-authored-by: maria <maria@kuuro.net>
…11019) Co-authored-by: shivam <91240327+shivamhwp@users.noreply.github.com>
…ingdotgg#11265) Co-authored-by: Julius Marminge <51714798+juliusmarminge@users.noreply.github.com>
Upstream renamed `Schema.TaggedErrorClass` to `Schema.TaggedError` (rc.112) and moved every workspace from `tsgo` to TypeScript 7's `tsc`, which no longer ships a `tsgo` binary. Nine fork-only error classes and the update relay's typecheck script still used the old names. `apps/coil-home` mirrors `apps/marketing`, which upstream pinned to TypeScript ~6.0.3 because `astro check` cannot load the TypeScript 7 compiler; the same pin applies here. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Upstream pingdotgg#11265 stopped appending terminal excerpts, review comments and preview annotations to the prompt text. They now travel as inline references in the text plus a structured `context` on the turn-start message, and the four `append*` helpers the queue path used are gone. A queued message built the old way would compile no longer and, once patched to text only, would ship dangling references. The queue now does what the immediate send and the mobile outbox do: the enqueue records `buildMessageContext(...)` beside the text, and the drain sends it when the server advertises `inlineMessageContext`, or serialises it the legacy way for older servers. Attachments stay out of the queue as before. `newCommandId` moved into the outbox module after upstream pingdotgg#9150 deleted the unused helper from `lib/utils`. The settings-search scope map gained the `/settings/loops` entry its new `Record<SettingsPath, …>` type requires. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Upstream pingdotgg#9507 normalised `account.rate-limits.updated` into a status-less list of utilisation windows and drops the event entirely when the SDK omits `utilization`, so the raw `SDKRateLimitInfo` the auto-resume and loop taps classified no longer arrives on it. The raw info now rides as the `detail` of the `runtime.warning` the adapter raises for a rejected window that overage does not cover, which is exactly the case both taps act on. Both reactors tap that event instead. The captured-episode fixture stays verbatim: the replay harness converts its pre-pingdotgg#9507 rows on the way in, and the adapter drift check lists the retired event type with the reason. The real-adapter replay test now asserts the rejection reaches the classifier through the warning. The web-push reactor also ignores the new pull-request sync events, which upstream's reactor emits every minute for every linked review and which never change whether a thread needs the user. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Upstream pingdotgg#9167, pingdotgg#9803 and pingdotgg#10421 continue opted-in threads across server restarts: the provider-session reconcile phase re-marks such a session `starting` with no active turn and parks a `sendTurn` that resumes the turn the projection still shows as running. The fork's crash-recovery pass runs next and matched `starting`, so it settled that turn to `interrupted`, dropped any queued turn start, and raced the resume about to land. Upstream's own pass settles every other `starting` session to `error` first, so by the time the fork's pass runs `starting` only ever means a continuation in flight. It is skipped now, with a test seeding that exact shape. The startup test doubles gained what upstream's new `projects.auto-pull` phase reads, and the merge's duplicate `projectionSnapshotQuery` binding is gone. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…component Upstream pingdotgg#10021 builds a native browser-secret helper against libsecret; its test and the desktop artifact build both hard-fail on Linux without the headers. The fork's CI, weekly full build and daily sync all run on ubuntu-latest, so each installs them the way upstream's ci.yml does. The Windows release leg installed `VC.Tools.x86.x64.Spectre`, which upstream 1665d81 found to be a silent no-op; the component is `VC.Runtimes.x86.x64.Spectre`, and the artifact build now preflights the Spectre lib directory, so the installer's exit code is checked too. `setup-fork.sh` lists every inherited workflow that arrives active, including the new cursor-hygiene webhook, which would forward the fork's issue and PR payloads to Cursor the moment its secrets were set. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Upstream's new DesktopPreReadyPlatform test asserts the Linux desktop entry names "T3 Code (Alpha)"; the entry is derived from APP_BASE_NAME, which the fork renamed (#71), so the fixture follows the rename like its siblings. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
The merge resolution dropped upstream's blank line before the new permission channels and moved upstream's projectionSnapshotQuery binding; both read as a displaced upstream line on the seam ledger for no behaviour. Restored so the rows stay +N/-0 and +44/-2 respectively. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
59 files, +2739/-1071 against d1d15c6. Records what the merge could not see and the reviews did, retires the composerSendLabel mirror, corrects two mirror rows that named the wrong upstream symbol, and points the loop design docs at the runtime.warning the rate-limit tap now reads. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #135.
The daily sync failed ten days running on the same conflict set, and the range grew to 867 upstream commits (2026-09-02 → 2026-09-12). This merges
upstream/mainatd1d15c67f4intomainas one merge commit, followed by eight ordinary commits that repair what the merge could not see.What was resolved by hand (26 files)
All 26 conflicts were the fork's known seams. Notable resolutions:
pnpm-lock.yamlre-resolved from the fork's pre-sync lock (security sweep verified intact: sharp 0.35.3, nanoid 3.3.17, tar 7.5.22, undici 6.28.0);routeTree.gen.tsfrom the TanStack generator (+21/-0, exactly the loops route).install.md,providers-claude.md,source-control.mdin product voice. Took upstream's structure and carried only the fork's distinct facts (coil install banner, "leave the Claude config dir empty", clone-credential notes).onKeyDown/onCreateInputConnectionoverrides are hand-combined with the fork's Enter-to-submit interception. Both behaviours survive.resolveComposerSendLabelmirror is retired; upstream's inline ternary gained a third condition, and the helper's own docstring said it only mirrored that ternary.__root.tsx: the fork'sNotificationCoordinator,ThreadOutboxDrain,PushSubscriptionManager,CoilUpdateToastsit inside upstream's newFirstRunGate, alongside upstream's own coordinators.What the merge could not see (fixed in follow-up commits)
Three read-only review agents walked every seam and every fork import against the range. Findings that broke behaviour without a textual conflict:
account.rate-limits.updatedinto status-less utilisation windows and drops the event when the SDK omitsutilization. Auto-resume and the loop supervisor classified the rawSDKRateLimitInfofrom it. Both taps now read theruntime.warningthe adapter raises for a rejected window (itsdetailis the raw info). The captured-episode fixture stays verbatim; the replay harness converts it on the way in, and the real-adapter replay test asserts the new route.startingand parking a resume. The fork's reconciler matchedstartingand settled that turn tointerruptedone phase later. It now skipsstarting, with a test seeding that shape.contextrecord and deleted theappend*ToPrompthelpers the queue path used. The queue now carriesbuildMessageContext(...)and the drain sends or legacy-serialises it by server capability, exactly as the immediate send and the mobile outbox do.Schema.TaggedErrorClass→Schema.TaggedError(nine fork-only sites); TypeScript 7 retired thetsgobinary (relay typecheck script);apps/coil-homepinned to TS 6 like upstream'sapps/marketing.libsecret-1-dev pkg-config; the three coil workflows onubuntu-latestnow install them. The Windows release installed a Spectre component id upstream found to be a silent no-op; mirrored upstream's block with the exit-code check.Verification (local, Apple Silicon)
vp run typecheck: green (all 17 packages).vp run lint: green (warnings only, all upstream-owned).vp test run --testTimeout=120000 --hookTimeout=120000: contracts 409, shared 801, client-runtime 1413, relay 44, mobile 1491, desktop 1436, web 5092 all pass. Server: see the check below.scripts: 389/390; the one failure (build-desktop-artifact.test.tscross-arch Windows) fails identically on pristine upstream files on an arm64 host, as recorded at the last sync.After landing
gh workflow disable cursor-hygiene-webhook.yml(arrives active; it would forward issue/PR payloads to Cursor once its secrets exist).desktop-macos-preview.ymlwas disabled today;setup-fork.sh's list now names every inherited workflow.Deferred (design decisions, not sync fixes)
PullRequestSyncReactorbumpsthread.updatedAtevery minute for a linked review with moving checks; the loop supervisor readsupdatedAtas movement, so a loop on a PR-linked thread with running CI may never strike.CrashRecoveryReconcileris still needed at all now that upstream's provider-session reconcile covers every case butlatestTurn.state === "running" && session === null.progressingcancel at fire time should defer rather than cancel.Land with a merge commit (never squash):
gh pr merge <n> --merge --subject "chore(coil): merge upstream/main d1d15c67f4 (867 commits)".Claude Fable 5.1 via Claude Code.
🤖 Generated with Claude Code