Skip to content

[Bug]: iPad only: drafts can't be opened or sent; long-press only offers Discard #13943

Closed

Description

@scriptease

Before submitting

  • I searched existing issues and did not find a duplicate.
  • I included enough detail to reproduce or investigate the problem.

Area

apps/mobile

Steps to reproduce

  1. On the T3 Code iPad app (1.3.0), type a prompt in a thread and leave it unsent, so it shows under Unsent in the sidebar with the Draft badge.
  2. Tap the draft row.
  3. Long-press the draft row.

Expected behavior

Tapping a draft opens it in the composer so it can be edited and sent. Long-press offers at least an Open/Send action alongside Discard.

Actual behavior

  • Tapping the draft does nothing; it cannot be selected or opened.
  • Long-press shows a context menu with only Discard.
  • The only way to act on a draft is to delete it, so the draft cannot be sent.

Impact

Major degradation or frequent failure

Version or commit

T3 Code iPad app 1.3.0

Environment

iPadOS, T3 Code mobile app 1.3.0

iPad only. On iPhone (same app version) tapping a draft works: it opens the modal with the draft, ready to send.

Screenshots, recordings, or supporting files

Screenshot: long-press on a draft under "Unsent" shows only "Discard".

Image

Workaround

None in the iPad app. Send the draft from the iPhone app or another client.

Regression

Worked in earlier versions: drafts could be opened and sent from the sidebar.

Activity

  1. changed the title [-][Bug]: iPad app drafts can't be opened or sent; long-press only offers Discard[/-] [+][Bug]: iPad only: drafts can't be opened or sent; long-press only offers Discard[/+] on Sep 27, 2026
  2. juliusmarminge commented on Sep 27, 2026

    @juliusmarminge
    Member

    Triage

    Confirmed on main (a727d1d976). Still present. Checked from source only; this was not re-run on an iPad.

    Tapping an Unsent draft is a no-op only in the iOS split sidebar. The iPhone path is fine, and the Discard-only long-press menu is the menu that ships on both.

    The split sidebar (window at least 720×600, so a normal iPad, not an iPhone) is not in the root navigation tree. SidebarNavigationShell wraps that column in NavigationIndependentTree with a single route, SidebarThreads. The comment there says the stack is navigation-inert and that real navigation goes through callbacks created in AdaptiveWorkspaceLayout. Thread selection and “new thread on this branch” do that. Opening a draft does not.

    ThreadNavigationSidebar calls usePendingTaskListActions() inside that isolated tree. openPendingTask then does navigation.navigate("NewTaskSheet", { screen: "NewTaskDraft", ... }). That navigator has no NewTaskSheet screen and no parent to bubble to, so the action is dropped. The same handler covers “Sends on reconnect” rows, so those cannot be opened from the iPad sidebar either.

    On iPhone, HomeRouteScreen calls the same hook from the root stack, which does own NewTaskSheet. That is why the same 1.3.0 build opens the draft there. Android split view skips SidebarNavigationShell, so this isolation is iOS-only.

    Long-press is working as written. DRAFT_TASK_MENU_ACTIONS is only Discard, on phone and iPad. Discard still runs because it clears local draft state and never navigates. An Open item in that menu would hit the same dead navigate until the tap path is fixed.

    This is not a recent 1.3.0 regression of a previously working iPad tap. The independent sidebar tree landed in #3514, and the pending-row handler was wired with useNavigation inside it in #3670. Draft rows (#10260) reuse that handler. A window narrow enough to leave split view (under 720×600) uses the compact home list and should open the draft.

    Fix is to mint openPendingTask next to handleNewThreadOnBranch in AdaptiveWorkspaceLayout and pass it into the sidebar. confirmDeletePendingTask can stay where it is.

  3. added
    bugSomething is broken or behaving incorrectly.
    acceptedfeature request accepted
    via-triageFiled through npx t3 triage
    on Sep 27, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    acceptedfeature request acceptedbugSomething is broken or behaving incorrectly.via-triageFiled through npx t3 triage

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions