feat(mobile): keep new-task drafts and queued sends visible - #460
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
rynfar
added a commit
that referenced
this pull request
Sep 11, 2026
Contributor
Thread transfer impact✅ Thread transfer remains within every enforced ceiling.
Baseline: Scenario and decoded snapshot size10 historical turns, 5 command tools per turn, 878.9 KiB retained MCP result per historical turn, and a 1.05 MiB retained result in the measured turn.
Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed. |
…ead list (#10260) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit c0bf35466c8aa1862572dfa84b51b6fe30fc82d6)
Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 8e129a0dfb35ac2c03a7320245b5bfb976f5d3bf)
(cherry picked from commit 95d99373b74edfb3bfd092c61a15999a95727423)
… (#10404) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 66a24d6c1a008430eebd855cd5640607d5aef38c)
…he outbox (#10405) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit d6aa179ad2afe0424e1410cbafbb119bbd5f7809)
(cherry picked from commit e1230d6031bc55a21668818d0b585d8887b88579)
…ed (#10435) Co-authored-by: Claude Fable 5 <noreply@anthropic.com> (cherry picked from commit 5b68b2c8e1e971e4ee6956157a1698646ef52a55)
(cherry picked from commit 7dda0b1c0a95603f1954b81a9fee699be92668f0)
(cherry picked from commit 71297974c666b0db50a3e3b1a861742f2cdd4d7d)
(cherry picked from commit b248f5ad566a8cd3ea2d7d678c1e8aa49c748879)
(cherry picked from commit c0d4e95c0d921b5960ad04c7f8abec459ee3c59e)
(cherry picked from commit e32dd42f8ba0daa2d0c6d6d2e474b7af6b3eb7b4)
(cherry picked from commit b7175371d9f32f3b759a922cdbf727a3214c99a2)
(cherry picked from commit dc39615aec702ea6d402168f80b4d1613f4f2e0f)
(cherry picked from commit 8d7f78121660eb8599d4c5ff40cb4394159abfab)
(cherry picked from commit 2c8e95a4b641898322c7312cb67535612606745e)
Co-authored-by: Ryan Hughes <ryan@heyoodle.com> (cherry picked from commit 3e6f856f2359421958a3aa046f2c393e00f3dc6a)
(cherry picked from commit 2a303535305d7d224a750fdee78c66e2a52ab3ab)
Documents the behavior adopted from the mobile-drafts lane in user docs: Unsent drafts and held tasks in the mobile thread list, the outbox icon, New thread on branch, account badges, the new-task setup pill and failure card, pending messages in the conversation, sending while uploads run on mobile, and Codex feedback notices.
Pylon marks restored provider picks as explicit so an existing thread's composer does not re-seed them from thread defaults. Editing a pending message from the timeline follows the held-send restore path.
Clearing a new-task draft on send or Discard kept its runtime and interaction modes, so every started or discarded task left a project-less entry on disk under an id nothing reuses. Clearing a new-task key now removes the whole entry; thread drafts keep their mode choices as before.
Edit task on a held new task opened the pending-task editor but left anything typed on the thread screen during setup under a thread id the server never created. Recovery now seeds the editor draft from the queued message, merges the thread composer's text and attachments after it, persists, and clears the thread draft, as a rejected creation already does. The editor's hydration is shared so both paths fill it identically. Also corrects the handler comment and user doc: the editor edits or retargets a held task, and deleting stays in the thread list's menu.
The thread list read the whole composer draft store, which changes on every keystroke in any composer, so typing a reply rebuilt and re-sorted the Home list and iPad sidebar. A derived atom now selects only stamped new-task drafts with content and keeps its previous value when those entries are unchanged, so unrelated edits no longer notify the lists. Queued tasks said Sends on reconnect even while connected. The label now follows this device's view of delivery: Sends on reconnect while disconnected, Waiting for upload while files still need uploading, Sending… otherwise, and Pylon's Held for held tasks, in both list layouts and their accessibility hints.
The Edit pending message button uses the pencil SF Symbol, which had no Android mapping, leaving a blank tap target.
A held follow-up waits for the user, not delivery, yet it reserved the floating status pill's space indefinitely, leaving an empty gap above the composer. Held messages no longer count toward that reservation. A held creation never delivers or fails on its own, so once it leaves the outbox (deleted or retargeted, for example from the iPad sidebar) the thread screen no longer keeps showing its Could not start task card.
Styling follows upstream; the sky meaning for active work is unchanged. Adopted from 357b8d5217cd62826767b6ce6d7c47915f2777d2
rynfar
force-pushed
the
upstream/2026-09-10-mobile-drafts
branch
from
September 11, 2026 01:27
b3e098f to
ccd94cb
Compare
This was referenced Sep 11, 2026
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.
On mobile, unsent work was hard to find and slow to hand off: new-task drafts were invisible outside their composer and limited to one per project, queued messages vanished from the conversation, an in-flight upload blocked Send, and submitting a task left you on the draft sheet through worktree setup. This ports T3 Code's finished mobile drafts and outbox work from the frozen upstream head
6c583620ff7ad3235b135af7107c0543467eecfa, plus the chat-feed, status-pill and thread-row fixes that landed alongside it.How it was ported
Each source was cherry-picked with
-xin upstream order, and every conflict was spliced into Pylon's version of the file. Later sources build on earlier ones, so the history reads as the upstream sequence. Pylon-specific adaptations are described below. Lockfile conflicts took Pylon'spnpm-lock.yamland regenerated it withvp i; only patch hashes changed.Sources
c0bf35466c8aa1862572dfa84b51b6fe30fc82d68e129a0dfb35ac2c03a7320245b5bfb976f5d3bf95d99373b74edfb3bfd092c61a15999a9572742366a24d6c1a008430eebd855cd5640607d5aef38cd6aa179ad2afe0424e1410cbafbb119bbd5f7809e1230d6031bc55a21668818d0b585d8887b885795b68b2c8e1e971e4ee6956157a1698646ef52a557dda0b1c0a95603f1954b81a9fee699be92668f071297974c666b0db50a3e3b1a861742f2cdd4d7db248f5ad566a8cd3ea2d7d678c1e8aa49c748879c0d4e95c0d921b5960ad04c7f8abec459ee3c59ee32dd42f8ba0daa2d0c6d6d2e474b7af6b3eb7b4b7175371d9f32f3b759a922cdbf727a3214c99a2dc39615aec702ea6d402168f80b4d1613f4f2e0f357b8d5217cd62826767b6ce6d7c47915f2777d2text-adaptive-sky-600-400onbg-primary/108d7f78121660eb8599d4c5ff40cb4394159abfab2c8e95a4b641898322c7312cb67535612606745eproviderInstanceDisplayin client-runtime; Prime and Antigravity labels come from contracts3e6f856f2359421958a3aa046f2c393e00f3dc6aeffect@4.0.0-beta.103.patch(same lines)2a303535305d7d224a750fdee78c66e2a52ab3abPylon adaptations
ComposerDraftSettingsUpdatekeepsproviderSelectionExplicit. Editing a pending message from the timeline marks its restored model as explicit, matching Pylon's held-send restore; a focused test pins this. Undoing a draft merge also restores the flag. The held-send Start a new thread action now writes a project-stampednew-task:restored-<messageId>draft and opens it bydraftId. The previous project-keyed draft would have been unreachable until the app restarted.onQueueFollowUpuploads files itself and bypasses the outbox, so it still waits for in-flight uploads. The composer shows "Attachment still uploading" on the follow-up action. Ordinary sends queue as upstream does.use-project-actions.tsis deleted as upstream deleted it. Pylon's copy differed only by releasing consumed uploads, and the outbox drain already does that.925785841b,pendingMaintainScrollAtEnd = shouldMaintainScrollAtEnd) is preserved. It is the only difference from upstream's final patch.getSetCookiefallback is added to Pylon's beta.103 patch (identical line numbers). Without it, readingcookieson a response whoseHeaderslacksgetSetCookiethrows, which is what the portedhttp-response.test.tsexercises.ShimmeringWorkContentaccepts upstream'sclassNameandtextClassNameprops. Pylon's container keeps its existing class, which has nooverflow-hidden.Nothing Pylon-original was removed. The direct
createProjectThreadsubmission path came from upstream and upstream removed it.Native and release impact
Every change is JavaScript, including the
@legendapp/listandeffectJS patches. The local@expo/fingerprintsource list (iOS,APP_VARIANT=preview, 87 sources) contains none of the changed files. The lockfile only re-keys JavaScript packages that depend on the two patch hashes (@legendapp/list,effect,@effect/*,drizzle-orm,alchemy,@distilled.cloud/*); no native module's resolved path moves. The native fingerprint should therefore be unchanged, and an OTA update is enough, with no new binary. Confirm with theship-pylon-mobilestatus script before publishing. The new Android icons (IconUpload,IconMenu2) come from the already bundled@tabler/icons-react-native.Docs
User docs describe the new mobile thread list (Unsent drafts, held tasks, outbox icon, New thread on branch, account badges), the new-task setup pill and failure card, pending messages in the conversation, sending during uploads on mobile, and Codex feedback notices. Upstream's Arrange threads text was merged into
docs/user/thread-sidebar.md.Verification
vp test runinapps/mobileacrosssrc/state,src/features/threads,src/features/home,src/features/showcase,src/features/archiveandsrc/lib: 107 files, 1,018 tests passed. New tests cover held-creation draft recovery against the real draft store, draft deletion through a persist and decode round-trip, the listed-drafts atom not notifying on a thread composer edit, delivery labels, and dropping a vanished held creation.vp test runforproviderInstanceDisplay.test.ts,threadFeedback.test.ts,orchestrationTiming.test.ts,MessagesTimeline.test.tsx,providerInstances.test.ts,session-logic.test.tsandscripts/legend-list-initial-reveal.test.ts: 7 files, 268 tests passed.@t3tools/mobile,@t3tools/web,@t3tools/client-runtimeand@t3tools/shared.vp lintandvp fmt --checkon every changed source and doc file are clean.knip --exportsfor web, client-runtime and shared reports nothing.vp run lint:mobileran, but SwiftLint, ktlint and detekt are not installed on this machine, so no native checks were exercised. No native files changed.vp iregenerated the lockfile after each patch change, and installed packages contain the patched code.PRIME_AGENT_DRIVER_KINDusages are unchanged (3 before and after).Upstream evidence
Screenshots and recordings are in the upstream PRs: #10260, #10327, #10398, #10404, #10405, #10449, #10435, #10359, #10479, #10484, #10483, #10487, #10492, #10486, #9899, #10496.
Tracking: #414.
Ported by Claude Opus 5 in Claude Code.