Skip to content

Merge upstream/main into fork/dev (8 commits) - #404

Merged
omegent-app[bot] merged 10 commits into
fork/devfrom
sync/upstream-2026-08-14
Aug 14, 2026
Merged

Merge upstream/main into fork/dev (8 commits)#404
omegent-app[bot] merged 10 commits into
fork/devfrom
sync/upstream-2026-08-14

Conversation

@omegent-app

@omegent-app omegent-app Bot commented Aug 14, 2026

Copy link
Copy Markdown

8 upstream commits, nine conflicts — all mobile, concentrated in the composer and outbox files this fork rewrote for its queue feature.

The notable one

pingdotgg#6543 "steer active turns by default" removes upstream's freshThreadBusy guard from the outbox drain, converging on what this fork has done all along: hand ownership to the server, which queues follow-ups during an active turn. The fork's own comment predicted exactly that ("unlike upstream, which waits on threadBusy"), so the fork's version is kept — it is now the same behaviour, plus a "deferred" drain outcome upstream lacks. Reporting an editor hold as success used to clear retry state and spin beginDispatch → finish → effect forever, and upstream's boolean would not typecheck against the DrainOutcome the rest of that function returns.

Other resolutions

  • composerImages — the fork's iOS guard (requestMediaLibraryPermissionsAsync hard-crashes without a usage string) and upstream's Android foreground handoff (fix(mobile): prevent OTA update restart crashes pingdotgg/t3code#6324) are independent, so both are kept: catch and finally, so a picker failure still reaches the caller and the handoff still ends.
  • SettingsRouteScreen — took upstream's runAppUpdateCheck and its new "ready" state, kept the fork's bundleLabel fallback (upstream has no bundle label and falls through to null, blanking that row here).
  • ThreadComposer — dropped upstream's re-added queueCount prop; the fork already declares it from the previous sync.
  • ThreadDetailScreen / ThreadRouteScreen / use-thread-composer-state / thread-outbox-model — fork-only queue props, state and a comment; kept.

What review caught — and what it says about the verification

Two adversarial reviews found the merge left mobile with eight typecheck errors. Worse, the workspace typecheck I had run reported clean: the vpr shim was not on PATH, so grepping its output for error TS counted an empty stream. vitest never typechecks, so the full suite stayed green the whole time. pnpm typecheck surfaces all eight.

  • T3ComposerEditor — the merge took upstream's wrapped native view (fix(mobile): preserve keyboard suggestions while typing pingdotgg/t3code#6323) but none of what it calls: the expo-paste-input wrapper import, the useNativePaste import, and the handlePaste binding. Paste-to-attach on Android would have been dead on arrival.
  • SettingsRouteScreen — upstream's helper emits an "Update ready" state the fork's local UpdateCheckState union lacks, so the setter did not match the callback and the new === "ready" branch compared non-overlapping types. Now uses the AppUpdateCheckState that was already imported; reportUpdateFailure went with the local helper it served.
  • thread-outbox-model — upstream keeps threadBusy in the contract even though fix(mobile): steer active turns by default pingdotgg/t3code#6543 stopped gating on it, and its new tests still pass it. Accepted again as an explicitly unused field rather than editing upstream's tests, so their assertions keep compiling across future syncs.
  • activeThreadBusyfix(mobile): steer active turns by default pingdotgg/t3code#6543 removed it upstream; the fork's copy was required by ThreadComposer, never read there or in ThreadDetailScreen, and superseded by sendEntersQueue. Removed end to end rather than passing a value nothing uses.

Verification

All 8 upstream commits verified present by comparing each commit's added lines against the merged tree — 100% for every one.

pnpm typecheck 0 errors · pnpm test — 273 files, 0 failures · vp build in apps/web · vp check --fix.

Merge this with gh pr merge 404 --merge, not the button — the squash default is what cost us the lineage on #401. #403 adds a CI guard for exactly this.

Co-authored-by: Patrick Roza 42661+patroza@users.noreply.github.com

🤖 Generated with Claude Code via T3 Chat on Discord

juliusmarminge and others added 10 commits August 14, 2026 10:00
…gg#6325)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
…the app bar (pingdotgg#6587)

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Julius Marminge <julius0216@outlook.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
8 upstream commits, nine conflicts, all mobile — concentrated in the composer
and outbox files this fork rewrote for its queue feature.

The notable one is pingdotgg#6543 "steer active turns by default": it removes upstream's
freshThreadBusy guard from the outbox drain, converging on what this fork has
been doing all along — hand ownership to the server, which queues follow-ups
during an active turn. The fork's comment predicted exactly that, so its version
is kept: it is now the same behaviour, plus a "deferred" drain outcome that
upstream lacks. Reporting an editor hold as success used to clear retry state
and spin beginDispatch → finish → effect forever, and upstream's boolean would
not typecheck against the DrainOutcome the rest of that function returns.

Other resolutions:

- composerImages: the fork's iOS guard (requestMediaLibraryPermissionsAsync
  hard-crashes without a usage string) and upstream's Android foreground handoff
  (pingdotgg#6324) are independent, so both are kept — including catch *and* finally, so
  a picker failure is still reported to the caller and the handoff still ends.
- T3ComposerEditor: took upstream's wrapped native view and Android
  selection-change fix (pingdotgg#6323); the fork's older block referenced a setter that
  upstream renamed, so it would not have compiled.
- SettingsRouteScreen: took upstream's runAppUpdateCheck and its new "ready"
  state, but kept the fork's bundleLabel fallback — upstream has no bundle label
  and falls through to null, which would blank that row here. Upstream replaced
  its local runUpdateCheck with the shared helper, so the fork's now-unreachable
  copy is removed rather than left to rot.
- ThreadComposer: dropped upstream's re-added queueCount prop; the fork already
  declares it from the previous sync and it would have been a duplicate.
- ThreadDetailScreen / ThreadRouteScreen / use-thread-composer-state: fork-only
  queue props and state upstream has no equivalent for; kept.
- thread-outbox-model: kept the fork's comment, which still documents the
  decision now that upstream's logic matches it.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
…changes

Two adversarial reviews found the merge left mobile with eight typecheck
errors, and the workspace typecheck I trusted had not actually run — the
`vpr` shim was not on PATH, so grepping its output for "error TS" counted an
empty stream and reported clean. `pnpm typecheck` reports them; vitest never
typechecks, so the suite stayed green throughout.

- T3ComposerEditor: the merge took upstream's wrapped native view (pingdotgg#6323) but
  none of what it calls — the `expo-paste-input` wrapper import, the
  `useNativePaste` import, and the `handlePaste` binding.
- SettingsRouteScreen: upstream's `runAppUpdateCheck` reports an "Update ready"
  state the fork's local `UpdateCheckState` union does not have, so the setter
  did not match the callback and the new `=== "ready"` branch compared
  non-overlapping types. It now uses the `AppUpdateCheckState` already imported.
  `reportUpdateFailure` went with the local helper it served.
- thread-outbox-model: upstream keeps `threadBusy` in the contract even though
  pingdotgg#6543 stopped gating on it, and its new tests still pass it. Accepted again as
  an explicitly unused field, rather than editing upstream's tests — their
  assertions then keep compiling across future syncs.
- activeThreadBusy: pingdotgg#6543 removed it upstream; the fork's copy was required by
  ThreadComposer, never read there or in ThreadDetailScreen, and superseded by
  `sendEntersQueue`. Removed end to end instead of passing a value nothing uses.

The drain comment predicted upstream would keep waiting on threadBusy; pingdotgg#6543
matched us, so it now says so.

Co-authored-by: Patrick Roza <42661+patroza@users.noreply.github.com>
@github-actions github-actions Bot added the 📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships. label Aug 14, 2026
@omegent-app
omegent-app Bot merged commit 7df6506 into fork/dev Aug 14, 2026
5 checks passed
@omegent-app
omegent-app Bot deleted the sync/upstream-2026-08-14 branch August 14, 2026 13:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

📱 Native Change Changes the native fingerprint; merging blocks production OTAs until a new store build ships.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants