Skip to content

Commit 7bcf71e

Browse files
committed
docs(t3x): record the mobile sendLabel mirror on the ledger
apps/mobile/src/features/threads/composerSendLabel.ts is a logic mirror and was not on the mirrors table. It does not merely duplicate upstream logic -- it replaced four upstream lines in ThreadComposer.tsx with a call, which is the more dangerous shape: a future upstream edit to those three conditions lands nowhere, because the lines that held them are gone. Nothing conflicts and nothing fails. Re-verified against the follow-up merge-base. pingdotgg#5625 rewrote ThreadComposer.tsx end to end (-124/+57) and left the ternary's conditions alone, so the helper is still byte-equivalent to what it replaced.
1 parent 3f63d4c commit 7bcf71e

1 file changed

Lines changed: 1 addition & 0 deletions

File tree

docs/t3x/SEAMS.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,7 @@ conflict during rebase, so nothing warns you when the original changes and the m
184184
| `apps/web/src/outbox/**` (thread outbox) | `apps/mobile/src/state/thread-outbox-*.ts` (upstream-authored, still maintained) | The web outbox is a hand port of upstream's mobile one, function for function. Three divergences are deliberate: the web queue drops image attachments (mobile persists them as base64 data URLs, which localStorage cannot hold), orders on an explicit `sortKey` for user reordering where mobile sorts on `createdAt` alone, and steers rather than queues on a running turn where mobile still queues (`apps/mobile/src/features/threads/composerSendLabel.ts`). Upstream reworking its mobile outbox produces no conflict here. |
185185
| `apps/web/src/t3x/AutoResumeOverlay.tsx` (`COMPOSER_OVERLAY_SELECTOR`, `chat-composer-horizontal-inset`) | `apps/web/src/components/ChatView.tsx` — the `[data-chat-composer-overlay="true"]` element it measures for `composerOverlayHeight`, and the `.chat-composer-horizontal-inset` class in `index.css` that the composer wrapper uses | **Read-only presentation dependencies, not code edits.** The auto-resume capsule is anchored bottom-right, immediately above the docked composer and flush with its right edge. Height comes from a `ResizeObserver` on the data attribute; horizontal alignment comes from reusing the composer's own inset class, because that inset is `0.75rem` at base, `1.25rem` from `40rem` up, and additionally carries `env(safe-area-inset-right)` — any hard-coded value overhangs on wide viewports. The overlay mounts as a sibling of `<ChatView>` in the route file and cannot receive either value as a prop without widening that seam. If the attribute disappears the capsule falls back to a fixed 76px offset; if the class is renamed the capsule's right edge drifts from the composer's. Both degrade visually, neither breaks. Re-check at each sync. |
186186
| `apps/web/src/outbox/composerSteering.logic.ts` (steer allowlist) | Each adapter's mid-turn `sendTurn` behaviour (ClaudeAdapter.ts:3729, CursorAdapter.ts:916, GrokAdapter.ts:921, OpenCodeAdapter.ts:1417) | **No capability flag exists** — `ProviderAdapterCapabilities` has no `supportsSteering`, so which drivers fold a mid-turn send into the running turn is asserted by a hand-maintained allowlist. If upstream changes an adapter to open a new turn instead, nothing fails here; the fork would keep sending mid-turn into a provider that no longer steers, and a refusal is invisible because `sendTurn` is forked in `ProviderCommandReactor`. Re-check those four `sendTurn` implementations at every sync. **2026-08-08: the allowlist is now backed by upstream's own tests.** `ClaudeAdapter.test.ts`, `CursorAdapter.test.ts` and `OpenCodeAdapter.test.ts` each carry an upstream-authored `"steers a running turn instead of opening a new one on mid-turn sendTurn"` case, and all four adapter test files are byte-identical to upstream here — so three of the four allowlisted drivers would break upstream's suite, not just the fork's, if steering regressed. `grok` remains asserted by reading alone. |
187+
| `apps/mobile/src/features/threads/composerSendLabel.ts` (`resolveComposerSendLabel`) | `ThreadComposer.tsx` — the inline `sendLabel` ternary the fork lifted out | Re-verified at the 2026-08-08 follow-up sync. Upstream #5625 rewrote this file end to end and left the ternary's three conditions untouched, so the helper is still byte-equivalent. This is the shape that bites: the fork **replaced** four upstream lines with a call, so a future edit to those conditions merges cleanly into a call site that ignores it. Diff `git show <upstream-commit> -- ThreadComposer.tsx` for `sendLabel` at every sync |
187188

188189
### Parallel paths (fork controls that must honour upstream's guards)
189190

0 commit comments

Comments
 (0)