From 1304164ab7162e971ab0dc7e6a07cd8734fa679f Mon Sep 17 00:00:00 2001 From: Raj D <25481060+radroid@users.noreply.github.com> Date: Fri, 14 Aug 2026 20:09:50 -0400 Subject: [PATCH] docs(coil): fix seam-ledger rows the #71 rename left pointing at t3x names MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four rows in the ledger still described the update-delivery seam with its pre-rename identifiers: a `t3xUpdate` bridge object, four `t3x:update-*` channel constants, three `t3xUpdate` handlers, and interfaces at `src/t3x/updateDelivery.ts`. None of those exist — the code calls them `coilUpdate`, `coil:update-*`, `getCoilUpdateState` / `restartIntoUpdate` / `dismissCoilUpdate`, and `src/coil/updateDelivery.ts`. The ledger is the fork's map of its own upstream surface, so a row naming a symbol that no longer exists is worse than no row: it reads as verified. Not a blanket rename. `scripts/t3x/**`, `.github/workflows/t3x-*.yml` and the `t3x-sync` label all kept the old name through #71, and line 49's note about the rename itself is correct history. Only source namespaces and docs moved. Also corrects the header total, which read +2621 against a measured +2622. That is the third time the totals have been wrong when checked (+1616 vs +1627 on 08-05), which is the file's own "regenerate before trusting it" advice earning its place. Co-Authored-By: Claude Opus 5 (1M context) --- docs/coil/SEAMS.md | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/docs/coil/SEAMS.md b/docs/coil/SEAMS.md index 20c74300116b..827e4953e3a3 100644 --- a/docs/coil/SEAMS.md +++ b/docs/coil/SEAMS.md @@ -2,7 +2,7 @@ **The authoritative list of every upstream-owned file this fork edits.** -Measured, not asserted: **51 upstream-owned files, +2621 / -1093 lines**, against merge-base +Measured, not asserted: **51 upstream-owned files, +2622 / -1093 lines**, against merge-base `196c8ea0d` (the 2026-08-14 sync). Everything else the fork adds lives in new files upstream has never seen and cannot conflict. @@ -317,14 +317,14 @@ Sorted by risk, worst first. | `packages/client-runtime/src/connection/supervisor.ts` | +195/-66 | 6 | **1566** | Issue #21: in-place rewrite of the reconnect/backoff state machine; now also owns the shared `runLivenessProbe` helper upstream's probe path uses. **2026-08-08: that helper had silently dropped upstream's #5561 behaviour.** Upstream marks `wakeProbeFailed` when a _wake_ probe fails, and reads it to reconnect immediately instead of sleeping the first backoff rung; the fork's helper is shared with the heartbeat path and never set the flag, so the Ref was written by nobody and read as always-false. `runLivenessProbe` now takes an `isWakeProbe` argument and only the wake call site passes it, matching where upstream sets it | | `apps/web/src/components/chat/ComposerPrimaryActions.tsx` | +128/-55 | 6 | **1098** | Queue button; hoists upstream's inline stop and send buttons so the running-turn footer can pair Stop with either. Must mirror upstream's `sendDisabledReason` gate. **2026-08-08: both hoists had to be re-derived.** Upstream grew its own `renderStopGenerationButton(insidePendingAction)` — a _size_ axis — while the fork's hoist carried an _emphasis_ axis (quiet outline beside Queue); they are now one `renderStopButton(emphasisClassName, insidePendingAction)`. Upstream also restyled the send button off `stageBackdropVariant`/`StageBackdropButtonArt` onto the `message-action` tokens, so the fork's hoisted copy was reverting that restyle until it was re-taken from upstream | | `apps/server/src/serverRuntimeStartup.test.ts` | +160/-1 | 6 | **966** | Crash-recovery reconciler coverage | -| `packages/contracts/src/ipc.ts` | +44/-0 | 17 | **748** | `DesktopNotificationRequest` / `Activation` + two optional `DesktopBridge` members; **t3x update delivery** adds one type import, one `export type` re-export and a third optional member (`t3xUpdate`). Its interfaces live in fork-owned `src/t3x/updateDelivery.ts` | +| `packages/contracts/src/ipc.ts` | +44/-0 | 17 | **748** | `DesktopNotificationRequest` / `Activation` + two optional `DesktopBridge` members; **coil update delivery** adds one type import, one `export type` re-export and a third optional member (`coilUpdate`). Its interfaces live in fork-owned `src/coil/updateDelivery.ts` | | `apps/web/src/components/chat/ChatComposer.tsx` | +16/-2 | 35 | **630** | Threads `sendLabel` / `canQueue` through the composer | | `pnpm-workspace.yaml` | +23/-0 | 25 | **575** | **Row 37, added 2026-08-08.** 13 major-scoped entries appended to upstream's existing `overrides:` block: brace-expansion ×3 lines, builder-util-runtime, fast-uri, form-data, hono, ip-address, nanoid@3, path-to-regexp, shell-quote, tar, undici@6. These are the transitive advisories Dependabot cannot auto-fix — it only ever bumps a `package.json`. Together with the re-resolution pass they took the fork from **107 open alerts to 6**. Additive and contiguous inside a block upstream already owns, so it conflicts as one hunk. This is the row that carries the sweep across a sync — the lockfile is regenerated from it. Drop entries as upstream's tree floats past them | | `apps/mobile/src/features/threads/ThreadComposer.tsx` | +25/-2 | 20 | **540** | Mobile Return-key send/queue, plus the line-break toolbar button. Upstream #5625 rewrote this file (-124/+57), replacing `ControlPillMenu` / `buildModelMenuActions` / the provider-option menus with a single `ThreadSettingsSheet` trigger. Resolution keeps upstream's one trigger and re-attaches the fork's line-break button beside it; the fork's model-menu plumbing is gone because the thing it plugged into is gone | | `scripts/build-desktop-artifact.ts` | +32/-1 | 16 | **528** | **Two env hooks, one displaced line, no new deletions.** Issue #70: `DESKTOP_APP_ID` reads `process.env.T3X_DESKTOP_APP_ID` before falling back to upstream's `com.t3tools.t3code`, so the fork's app owns its own TCC permission rows instead of sharing them with upstream's nightly. Issue #53: `DESKTOP_FILE_EXCLUSIONS` appends `process.env.T3X_DESKTOP_FILE_EXCLUSIONS` (comma-separated globs), taking the packaged asar from 189.66 MiB / 14,765 files to 99.02 MiB / 3,429 and the `.zip` users download by 20.1 MB. Most of the added lines are the comments explaining both. Env hooks rather than changed literals on purpose. For #53 the reason is not row count — `build-desktop-artifact.test.ts` is already a row (see #71 above) — but that the fork's list is **67 globs and grows**: an inline list would make every future size fix an edit to an upstream TEST assertion, resolved by hand at every sync. Through the environment, an unset environment packages precisely what upstream packages and upstream's `deepStrictEqual` keeps passing untouched. Guarded from the fork side by `scripts/coil/mac-signature.test.ts` and `scripts/coil/desktop-bundle-size.test.ts` (both hooks exist, the release workflow sets them, the exclusions never name a package the main process loads) and by two artifact checks: `verify-mac-signature.ts` and `verify-desktop-bundle.mjs` (the shipped app still resolves every import its own bundles make) | | `apps/server/src/sourceControl/SourceControlRepositoryService.test.ts` | +194/-1 | 2 | **390** | **Row 41, added 2026-08-12 (#98).** Coverage for each mapped clone failure — auth, not-found, timeout, unwritable destination — plus one asserting a credential-bearing URL is redacted out of the surfaced message, and one asserting the clone spawn is handed the non-interactive env. The single deletion is the assertion that a `git@github.com:` clone reports provider `unknown`; it encoded the bug | | `apps/server/src/sourceControl/SourceControlRepositoryService.ts` | +101/-19 | 2 | **240** | **Row 42, added 2026-08-12 (#98).** Derives the provider from the remote URL instead of reporting `unknown`, runs the clone with `allowNonZeroExit` so git's stderr can be classified before it is thrown away, and passes the non-interactive env so a credential prompt fails in seconds rather than hanging to the 120 s timeout. All 19 deletions are the defect itself — see the note under the header. The logic lives in the fork-added `cloneDiagnostics.ts`, which costs no row | -| `apps/desktop/src/preload.ts` | +29/-0 | 8 | **232** | `showNotification` + `onNotificationActivated` on the exposed bridge, plus the `t3xUpdate` bridge object (get / subscribe / restart / dismiss) | +| `apps/desktop/src/preload.ts` | +29/-0 | 8 | **232** | `showNotification` + `onNotificationActivated` on the exposed bridge, plus the `coilUpdate` bridge object (get / subscribe / restart / dismiss) | | `apps/mobile/modules/t3-composer-editor/ios/T3ComposerEditorView.swift` | +33/-0 | 7 | **231** | Shift+Return newline vs. bare Return submit | | `apps/web/src/branding.test.ts` | +44/-11 | 4 | **220** | #71: app-name fixtures. The injected-branding case deliberately keeps `T3 Code` — it asserts injection WINS over the module constant, so matching the fixture to the constant would make it pass either way. Grew again for the sidebar wordmark: two cases pinning `APP_WORDMARK_SUFFIX`, one on the module constant and one on injected branding | | `packages/contracts/src/settings.ts` | +7/-2 | 24 | **216** | `notifyOnNeedsInput` (**persisted schema**) + Claude `homePath` placeholder/description | @@ -337,9 +337,9 @@ Sorted by risk, worst first. | `apps/web/src/routes/__root.tsx` | +9/-0 | 11 | **99** | Mounts ``, ``, ``, `` | | `apps/server/src/server.ts` | +3/-0 | 26 | **78** | The intended mount point: one import, one `Layer.provideMerge`, one route entry | | `README.md` | +15/-0 | 5 | **75** | **Row 39, added 2026-08-11 (#72).** A callout at the top of Installation saying this repo is a fork whose builds live at coil.curlycloud.dev, that the winget/brew/AUR commands below install upstream's app instead, and the honest platform matrix (macOS arm64, Windows x64, no Linux). Purely inserted — upstream's own text is untouched, so this stays a +N/-0 row | -| `apps/desktop/src/ipc/channels.ts` | +9/-0 | 8 | **72** | Two notification channel constants + four `t3x:update-*` constants. Deliberately **not** reusing upstream's `desktop:update-*` channels | +| `apps/desktop/src/ipc/channels.ts` | +9/-0 | 8 | **72** | Two notification channel constants + four `coil:update-*` constants. Deliberately **not** reusing upstream's `desktop:update-*` channels | | `scripts/build-desktop-artifact.test.ts` | +4/-1 | 14 | **70** | #71: asserts `resolveDesktopProductName` returns the fork's name. Upstream's `T3 Code (Nightly)` literal stays — that branch needs a `-nightly..` version, which this fork never builds | -| `apps/desktop/src/ipc/DesktopIpcHandlers.ts` | +11/-0 | 6 | **66** | Registers the `showNotification` handler + three `t3xUpdate` handlers | +| `apps/desktop/src/ipc/DesktopIpcHandlers.ts` | +11/-0 | 6 | **66** | Registers the `showNotification` handler + three `coilUpdate` handlers (`getCoilUpdateState`, `restartIntoUpdate`, `dismissCoilUpdate`) | | `apps/web/src/connection/platform.ts` | +7/-1 | 8 | **64** | Lazy `import()` of outbox cleanup to dodge a module-init cycle | | `AGENTS.md` | +6/-0 | 10 | **60** | `## Agent skills` pointer block for the mattpocock engineering skills. Three one-line links into `docs/coil/agents/`; no config lives here. Placed between `## How it works` and `## Where code lives` — stable anchors, deliberately not appended at EOF where upstream adds tips (the issue #29 add/add pattern) | | `apps/web/src/components/sidebar/SidebarChrome.tsx` | +3/-1 | 13 | **52** | The sidebar corner, the one string the running app names itself with. Renders `APP_WORDMARK_SUFFIX` instead of the literal `Code`, so the name resolves from the desktop bundle's injected branding rather than from a second copy. **Not hoisted into a fork component** — see the note below the table |