Repository navigation
feat(tasks): browse Jira and start workspaces on mobile - #28616
Conversation
Reuse the shared task provider definitions and existing mobile task/composer owners for Jira reads, local site selection, issue details and linked host workspaces. Keep credentials on the paired desktop and handle older hosts. Co-authored-by: Minho Yi <tisohjung@gmail.com>
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 11 minutes. View limit details
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info
📝 Walkthrough
Priority: ➖ Normal Merge Risk: ⚪ Minimal · up to
|
There was a problem hiding this comment.
Actionable comments posted: 2
ℹ️ Review info
⚙️ Run configuration
- Configuration used: Repository UI
- Review profile: CHILL
- Plan: Advanced
- Run ID:
e24c0066-0838-4af9-94b7-df0a4f0fcbfa
📒 Files selected for processing: 120
mobile/rpc-foundation/goldens/lifecycle-settings-task-hydration-fulfilled.jsonmobile/rpc-foundation/goldens/lifecycle-settings-workspace-context-fulfilled.jsonmobile/rpc-foundation/goldens/matrix-settings.home-providers-settings.get-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-jira.status-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-linear.status-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-preflight.check-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-settings.get-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-status.get-1.jsonmobile/rpc-foundation/goldens/matrix-settings.task-hydration-ui.get-1.jsonmobile/rpc-foundation/goldens/matrix-settings.workspace-context-jira.status-1.jsonmobile/rpc-foundation/goldens/matrix-settings.workspace-context-linear.status-1.jsonmobile/rpc-foundation/goldens/matrix-settings.workspace-context-preflight.check-1.jsonmobile/rpc-foundation/goldens/matrix-settings.workspace-context-settings.get-1.jsonmobile/rpc-foundation/goldens/matrix-settings.workspace-context-ui.get-1.jsonmobile/rpc-foundation/goldens/schedules-settings-task-hydration-fulfilled.jsonmobile/rpc-foundation/goldens/schedules-settings-workspace-context-fulfilled.jsonmobile/rpc-foundation/goldens/settings-home-providers-refuse-after-data.jsonmobile/rpc-foundation/goldens/settings-home-providers-refused.jsonmobile/rpc-foundation/goldens/settings-task-hydration-fulfilled.jsonmobile/rpc-foundation/goldens/settings-task-hydration-refuse-after-data.jsonmobile/rpc-foundation/goldens/settings-task-hydration-refused.jsonmobile/rpc-foundation/goldens/settings-task-hydration-transport-error.jsonmobile/rpc-foundation/goldens/settings-workspace-context-fulfilled.jsonmobile/rpc-foundation/goldens/settings-workspace-context-refuse-after-data.jsonmobile/rpc-foundation/goldens/settings-workspace-context-refused.jsonmobile/rpc-foundation/goldens/settings-workspace-context-transport-error.jsonmobile/rpc-foundation/pilot-scenarios.jsonmobile/src/components/JiraConnectPrompt.tsxmobile/src/components/JiraDetailMeta.tsxmobile/src/components/NewWorktreeModal.tsxmobile/src/components/NewWorktreeModalDrawers.tsxmobile/src/components/SmartWorkspaceSourceDrawer.tsxmobile/src/components/SmartWorkspaceSourceRow.tsxmobile/src/components/TaskProviderLogo.tsxmobile/src/components/use-new-workspace-runtime-context.test.tsmobile/src/components/use-new-workspace-runtime-context.tsmobile/src/home/MobileHomeListFooter.tsxmobile/src/home/MobileHomeScreen.tsxmobile/src/home/MobileHomeTasksCard.tsxmobile/src/home/mobile-home-host-requests.tsmobile/src/home/use-mobile-home-data.tsmobile/src/tasks/MobileTasksLegacySurface.tsxmobile/src/tasks/composer-linked-work-item.tsmobile/src/tasks/composer-source-base-resolve.tsmobile/src/tasks/jira-mobile-connection.test.tsmobile/src/tasks/jira-mobile-connection.tsmobile/src/tasks/jira-mobile-issue-read.test.tsmobile/src/tasks/jira-mobile-issue-read.tsmobile/src/tasks/jira-mobile-url-lookup.test.tsmobile/src/tasks/jira-mobile-url-lookup.tsmobile/src/tasks/jira-reply-schema.tsmobile/src/tasks/mobile-composer-source-types.tsmobile/src/tasks/mobile-jira-issue-filters.tsmobile/src/tasks/mobile-jira-operations.tsmobile/src/tasks/mobile-jira-task-source.test.tsmobile/src/tasks/mobile-jira-task-source.tsmobile/src/tasks/mobile-smart-source-modes.test.tsmobile/src/tasks/mobile-smart-source-modes.tsmobile/src/tasks/mobile-task-navigation.tsmobile/src/tasks/mobile-task-providers.tsmobile/src/tasks/mobile-task-view-options.tsxmobile/src/tasks/mobile-tasks-chrome-styles.tsmobile/src/tasks/mobile-tasks-dependencies.tsmobile/src/tasks/mobile-tasks-filter-pickers.tsxmobile/src/tasks/mobile-tasks-hydrated-view-state.tsmobile/src/tasks/mobile-tasks-item-actions.tsxmobile/src/tasks/mobile-tasks-item-comments.tsxmobile/src/tasks/mobile-tasks-item-detail-content.tsxmobile/src/tasks/mobile-tasks-item-mapping.tsmobile/src/tasks/mobile-tasks-item-review-sections.tsxmobile/src/tasks/mobile-tasks-jira-view-controls.tsxmobile/src/tasks/mobile-tasks-list-surface.tsxmobile/src/tasks/mobile-tasks-options.tsxmobile/src/tasks/mobile-tasks-project-workspace-types.tsmobile/src/tasks/mobile-tasks-provider-controls.tsxmobile/src/tasks/mobile-tasks-provider-detail-types.tsmobile/src/tasks/mobile-tasks-provider-pickers.tsxmobile/src/tasks/mobile-tasks-repository-presentation.tsmobile/src/tasks/mobile-tasks-search-control.tsxmobile/src/tasks/mobile-tasks-view-state-types.tsmobile/src/tasks/smart-source-fan-out.test.tsmobile/src/tasks/smart-source-fan-out.tsmobile/src/tasks/smart-source-paste-concurrency.test.tsmobile/src/tasks/smart-source-search-requests.tsmobile/src/tasks/source-workspace-create.tsmobile/src/tasks/use-mobile-composer-source.tsmobile/src/tasks/use-mobile-tasks-connection-presentation.tsxmobile/src/tasks/use-mobile-tasks-item-detail-loading.tsxmobile/src/tasks/use-mobile-tasks-item-detail-metadata-effects.tsxmobile/src/tasks/use-mobile-tasks-jira-direct-entry.test.tsmobile/src/tasks/use-mobile-tasks-jira-status-refresh.test.tsmobile/src/tasks/use-mobile-tasks-list-and-detail-effects.tsxmobile/src/tasks/use-mobile-tasks-picker-projection.tsxmobile/src/tasks/use-mobile-tasks-provider-load-actions.tsxmobile/src/tasks/use-mobile-tasks-provider-view-projection.test.tsxmobile/src/tasks/use-mobile-tasks-provider-view-projection.tsxmobile/src/tasks/use-mobile-tasks-route-and-item-state.tsxmobile/src/tasks/use-mobile-tasks-runtime-hydration.tsxmobile/src/tasks/use-mobile-tasks-server-repos.test.tsxmobile/src/tasks/use-mobile-tasks-task-list-loading.tsxmobile/src/tasks/use-mobile-tasks-workspace-and-project-state.tsxmobile/src/tasks/use-mobile-tasks-workspace-create-projection.tsxmobile/src/tasks/use-open-mobile-tasks.tsmobile/src/tasks/use-smart-workspace-source.tsmobile/src/tasks/workspace-create-params.test.tsmobile/src/tasks/workspace-create-params.tsmobile/src/test-support/bridged-parity/c1-page-closure.test.tsmobile/src/test-support/bridged-parity/c1-page-closure.tsmobile/src/test-support/bridged-parity/c2-task-source-closure-families.tsmobile/src/test-support/bridged-parity/c5-page-closure.test.tsmobile/src/test-support/bridged-parity/c5-page-closure.tsmobile/src/test-support/bridged-parity/c6-browser-closure-families.tsmobile/src/test-support/bridged-parity/divergence-classes.test.tsmobile/src/test-support/bridged-parity/divergence-classes.tsmobile/src/test-support/rpc-recording/adapters/task-item-metadata-mount-adapters.tsmobile/src/test-support/rpc-recording/adapters/task-list-mount-adapters.tsmobile/src/test-support/rpc-recording/rpc-recording-through-bridge.test.tssrc/main/runtime/mobile-rpc-allowlist.test.tssrc/main/runtime/runtime-rpc/runtime-rpc-mobile-paired-desktop-methods.tssrc/main/runtime/structured-agent-launch-support.ts
Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 0 remain after this review.
Keep the optional composer probe separate from required provider hydration, discard status across host/session changes, and reject older same-host refreshes.
# Conflicts: # mobile/src/tasks/mobile-tasks-item-mapping.ts
ELI5
You can browse Jira from your phone, open an issue, and start a linked workspace on the paired Orca host. Connect Jira on desktop first.
What Changed
Mobile previously omitted Jira from Tasks and the new-workspace source picker. It now uses the shared provider definitions and offers Jira filters, site selection, JQL search, issue descriptions, metadata, comments, and external links. The composer also searches issue keys/text and resolves pasted Jira URLs through matching connected sites.
The paired desktop permits five existing read methods: status, list, search, issue, and comments. Phone site selection stays local and accompanies subsequent reads; it never changes the desktop selection. Workspace creation reuses the host's existing
linkedWorkItempath. An older or refusing desktop shows an update prompt; an unconnected current desktop shows connection instructions. Optional comments and the initial Jira probe can fail without hiding an issue or breaking other providers.Why
Reusing the shared provider list and current mobile screen owners removes the missing-provider fork without adding a parallel task screen. Existing host-owned Jira and workspace operations preserve desktop credential ownership and the established SSH/setup flow. Jira issue editing, creation, and comment posting remain outside this read-and-start-work feature.
Adapted the mobile Jira work from #13126 by @tisohjung (Minho Yi), with current module boundaries, checked reply schemas, local phone selection, and older-host handling. Minho is credited in the commit trailer.
Linked Issue
Fixes #14512.
Addresses the shared-provider/Jira portion of #10950. Companion #28580 fixes the query/preset drift; both changes are needed to resolve that issue. References #13126.
Visual Proof
The attached before/after screenshots show the picker without Jira and the Jira Tasks list. Additional images show issue details/start-work and the older-host update prompt.
Verified through Playwright CDP in a hidden Electron renderer on macOS. A React Native Web fixture mounts the production toolbar, search, list, actions, and metadata components with fixture transport plus modal/Markdown adapters. It exercises Reported, the Lab site, JQL search, issue/comment reads, and workspace creation; it asserts the selected site and durable Jira link and verifies no desktop
selectSiterequest. The before image is a before-equivalent provider picker. This is rendered source verification, not physical iOS/Android or live Jira validation.Testing
Focused tests cover checked replies, site/origin isolation, old-host refusal, comments failure, stable detail hydration, workspace link parameters, composer naming, and stale-host status replies. The full recorded bridge corpus passed 801 tests before the final repository-preload correction; its three affected task-list bridge scenarios pass again after that correction. Read-only paired-desktop allowlist coverage passes: 7 tests. The final six focused suites passed 34 tests, and detail/projection/source suites passed 35. Nearby mobile suites passed apart from stale settings goldens, which were re-recorded and then passed. Mobile product typecheck and the native test typecheck ratchet passed before the final repository-preload correction, with 999 test files in the program and the unchanged 122-file baseline. The feature quality gate passed across 89 files; the correction quality gate passed across its two changed files, and
git diff --checkpassed. Final correction/test typechecking remains for coordinated validation or CI under the shared-machine resource policy.Final review reproduced direct Jira entry leaving the lazy repository list unloaded and workspace creation disabled. Jira now starts the existing cached repository load without waiting on it. Two production-hook regressions fail before that correction; 18 focused tests pass afterward, including slow and failing repository reads. The Jira list remains readable while the background repository request settles.
Recorded settings/hydration goldens account for much of the diff: the added optional status request changes subsequent request ordinals. No recording fixtures contain real Jira credentials.
The branch now includes main snapshot
9473e73d878e, including the clock fix that previously blocked standalone checks. Final standalone node, renderer, CLI and process-host typechecks pass. Mobile product typecheck passes. CI covers the full build and remaining platform checks.Final integration corrections
The branch preserves the newer desktop/server repository-selection behavior: saved choices remain intact while readers derive which repositories are available, and late server lists refresh the dependent providers. Direct Jira entry still loads workspace repositories without delaying Jira issues.
A new regression reproduced a pending optional
jira.statusrequest blocking every task provider. The Jira probe now runs independently of required hydration reads and ignores replies from a previous host. The regression fails before the change and passes afterward.Final checks pass: 38 focused mobile tests, 12 re-recorded hydration scenarios verified again without recording, paired-desktop routing tests, mobile product typecheck, all four standalone root typecheck projects, and the full changed-code quality gate across 92 source files. The current main snapshot is
9473e73d878e; later main changes still require normal merge validation.CI test correction
The latest CI run found a test signature mismatch and recordings that had captured an operation-loader error containing a developer path. The deferred Jira reply now uses the existing desktop fixture, preserving request routing and its checked types. Hydration imports the provider predicate directly from its shared owner, so the recording loader reaches the real function. Eleven goldens were regenerated from successful hydration; an explicit
hydrated: trueassertion now prevents a fixture failure from becoming the expected recording.On this final correction: all 1,620 pilot, family, bridge-parity and mutation tests pass (three archived-reference checks skipped); 47 focused Jira/repository tests pass; the exact CI native test typecheck ratchet passes with 1,005 test files in its program and the unchanged 122-file baseline; formatting,
git diff --check, and changed-code quality across the three changed source files pass. No test exclusions or baseline entries were added. The new GitHub CI run remains pending; these results are local checks.Review
Merge risk: Medium. The change reaches several mobile task/composer owners and broadens the read-only mobile allowlist. Checked schemas, host/site guards, bridge coverage, and explicit older-host behavior reduce those risks. Native devices and real Jira accounts still need integration testing.
Agent skill upstream boundary
Notes
Credentials, connection changes, and Jira issue mutations stay on desktop. No new stream opcode or RPC parameter is introduced. Older clients are unaffected; older hosts can refuse Jira while the remaining mobile task providers stay usable. The current mobile route/web-shell choice is preserved.
Jira reads do not require a repository. Starting work still uses the existing selected repository/folder and host workspace flow, including SSH connection checks and setup approvals. This change introduces no platform-specific paths, shortcuts, process enumeration, or Git commands. Validation ran on macOS; Linux/Windows, physical phones, SSH, and live Jira were not exercised end-to-end.
Checklist