Skip to content

feat(desktop): choose a New task's Linear issue from its own chip, not the name field - #3697

Merged
luke-agent[bot] merged 5 commits into
mainfrom
luke/feat-new-task-linear-chip
Oct 18, 2026
Merged

luke-agent[bot] merged 5 commits into
mainfrom
luke/feat-new-task-linear-chip

Conversation

@dastratakos

@dastratakos dastratakos commented Oct 18, 2026 •

Copy link
Copy Markdown
Contributor

Summary

PR 1 of the New task redesign ("New task, prompt first"). Linear moves out of the name field and into a Linear chip of its own.

  • The name field is plain again. It is a TextField, its placeholder is always "Task name (optional)", and typing in it lists no issues and searches nothing. Return creates the task under the name as typed, with any modifier held.
  • Linear chip (tasks/linear-issue-chip.tsx, new). It stands after the repository chip in the card's foot, but only where the workspace the task starts in has Linear connected (linearIssuesIn(startsIn) !== undefined). Pressing it opens the shared SearchableMenu with its own search field:
    • With nothing typed it lists the issues read as the card opened, in the order they were read. Nothing in the issue summary says which issues are the developer's own, so it can't put them first.
    • Typing narrows the list at once (offeredIssues). Once typing rests, Linear itself is searched (the debounced search atom). A pasted key or link asks for that one issue (linearIssuesAskOf). useLinearIssues, useLinearSearch and the atom moved out of the dialog unchanged.
    • ↑/↓ move, Return chooses, and Escape closes the menu but not the card. Focus goes back to whatever opened the menu.
    • ⌘L opens it from the card. No app command holds ⌘L, so this PR adds L to SHORTCUT_KEY and exports shortcutMatches to read the chord.
    • Switching workspace closes the menu and reads that workspace's issues.
  • Choosing an issue works as it does today. The task starts at once, named by the issue's title, with linearIssueId, the repository, the workspace and the planning the card shows. (PR 2 changes this to attaching the issue above the prompt.)
  • SearchableMenu takes an optional onSearch. It lets the owner answer the search itself: the owner hears each query, and the menu shows the rows it hands back without filtering them. This is needed so issues that Linear's search finds outside the title still show. It also remembers a highlighted row by its id as well as its position, so rows that arrive late don't move the highlight onto another issue.
  • A card opened from one of the workspace's own issues offers no Linear chip, as its name searched no Linear before.
  • new-task-dialog.tsx's header comment now describes the new behavior.

Evidence

  • pnpm check:affected ran out of memory in this sandbox (8 GB) when its typechecks ran in parallel, so I ran each of its steps on its own. All passed:
    • scripts/repository-checks.sh: passed
    • pnpm lint (biome + oxlint): 0 errors
    • pnpm knip: clean
    • pnpm discarded-effect: clean
    • tsc for @luke/desktop and @luke/settings: clean
    • vitest run --project desktop --project settings --project ui: 302 files, 2643 tests passed
  • Not inspected visually: there is no Mac or packaged app in this sandbox, and scripts/evidence.sh runs only on macOS.

Invariants

  • ./scripts/check.sh green. (CI)
  • JSON Schema goldens unchanged.
  • Every behavior change has, in this PR, the test that fails without it; no change-detector test added.
  • Gateway envelope goldens unchanged.
  • No new as type assertion outside the allowlisted files.
  • No Effect.runPromise/runSync/runFork outside the runtime edges.
  • No new raw async primitives.
  • No Effect, Stream, or Layer dropped.
  • Test count: new-task-dialog.test.ts goes from 24 to 26. Its Linear cases are rewritten: typing never lists or searches issues; the chip stands only with Linear connected; the chip lists, the arrows move, and Return starts; search narrows, then Linear is searched; a pasted link looks up one issue; Escape closes the menu and not the card; ⌘L opens it, but not while an input method is composing; a Linear result that sorts ahead of the highlighted issue leaves the highlight on the chosen issue; opening from a workspace issue shows no chip. new-task-workspace.test.ts goes from 6 to 7 tests: its Linear case now checks that a workspace switch closes the search and the chip lists the chosen workspace's issues, and a new case checks that Linear disconnecting and reconnecting doesn't reopen the search.
  • No hand-rolled file replaced.
  • No CLAUDE.md/AGENTS.md sentence names a changed part.
  • PRIVACY.md unchanged.
  • Package deps unchanged.
  • Barrel/door rule unaffected.

Notes

Made with Luke


Devin Review

View guided diff Turn on auto-fix

…t the name field

The name field is a plain name again: typing in it lists no Linear issues
and searches nothing. Where the workspace the task starts in has Linear
connected, a Linear chip stands after the repository chip, and a press on
it, or Command-L from the card, opens the shared searchable menu over the
workspace's issues: those read as the card opened with nothing typed, the
same narrowing, rested Linear search, and key or link lookup as before
(moved unchanged into linear-issue-chip.tsx). Choosing an issue starts its
task at once, as choosing one did; Escape closes the menu and not the card;
a switch of workspace closes it and reads that workspace's issues.

SearchableMenu takes an onSearch for an owner that answers the search
itself, listing its rows unfiltered.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@vercel

vercel Bot commented Oct 18, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
luke-web Ready Ready Preview Oct 18, 2026 9:37pm UTC

Request Review

@luke-agent
luke-agent Bot enabled auto-merge October 18, 2026 20:30
Resolves the conflicts with main's SearchableMenu move onto SearchField and
ComboboxList: onSearch now rides the SearchField's onChange, and the Linear
chip caps its list with --luke-combobox-list-max as the repository chip does.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
Resolves the conflict with #3694's move of the renderer runtime into
@luke/panel: the Linear chip's search atom reads it from there.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>

@devin-ai-integration devin-ai-integration Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Devin Review found 3 potential issues.

1 flag not posted on this PR by your GitHub settings — view it in Devin Review. (Configure)

Devin Review

Comment thread apps/desktop/src/renderer/tasks/linear-issue-chip.tsx
Comment thread apps/desktop/src/renderer/tasks/linear-issue-chip.tsx
Comment thread apps/desktop/src/renderer/tasks/new-task-dialog.tsx
dastratakos and others added 2 commits October 18, 2026 20:58
…s menu shut across a reconnect or a composing key

- SearchableMenu holds a moved highlight by its row's id as well as its
  place, so an owner's search answering after the arrows moved, with an
  issue sorted ahead, leaves the highlight and Return on the issue chosen.
- The Linear chip closes its menu when Linear is let go, so its coming back
  draws nothing until the chip is pressed.
- Command-L opens nothing while an input method is composing.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
Resolves the conflict with #3693's Start agent card and #3700's move of the
panel's leaf modules into @luke/panel: the Linear chip stands beside both,
and Create reads Start agent for an agent's card.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>
@luke-agent
luke-agent Bot added this pull request to the merge queue Oct 18, 2026
Merged via the queue into main with commit f60e1a4 Oct 18, 2026
11 checks passed
@luke-agent
luke-agent Bot deleted the luke/feat-new-task-linear-chip branch October 18, 2026 21:56
luke-agent Bot added a commit that referenced this pull request Oct 18, 2026
Brings #3717 up to date after #3697 was squash-merged into main.

Co-authored-by: luke-agent[bot] <339870089+luke-agent[bot]@users.noreply.github.com>

This branch was successfully deployed

1 active deployment
Preview — 8137ffdf Deployed Oct 18, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant