Merge upstream/main into fork/dev (8 commits) - #404
Merged
Conversation
…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>
…ingdotgg#6592) 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>
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.
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
freshThreadBusyguard 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 spinbeginDispatch → finish → effectforever, and upstream's boolean would not typecheck against theDrainOutcomethe rest of that function returns.Other resolutions
requestMediaLibraryPermissionsAsynchard-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:catchandfinally, so a picker failure still reaches the caller and the handoff still ends.runAppUpdateCheckand its new "ready" state, kept the fork'sbundleLabelfallback (upstream has no bundle label and falls through tonull, blanking that row here).queueCountprop; the fork already declares it from the previous sync.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
vprshim was not on PATH, so grepping its output forerror TScounted an empty stream. vitest never typechecks, so the full suite stayed green the whole time.pnpm typechecksurfaces all eight.expo-paste-inputwrapper import, theuseNativePasteimport, and thehandlePastebinding. Paste-to-attach on Android would have been dead on arrival."Update ready"state the fork's localUpdateCheckStateunion lacks, so the setter did not match the callback and the new=== "ready"branch compared non-overlapping types. Now uses theAppUpdateCheckStatethat was already imported;reportUpdateFailurewent with the local helper it served.threadBusyin 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.ThreadComposer, never read there or inThreadDetailScreen, and superseded bysendEntersQueue. 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 typecheck0 errors ·pnpm test— 273 files, 0 failures ·vp buildinapps/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