Skip to content

feat(issues): browse a project's Linear issues on the Issues page - #18682

Closed
Bombatomica64 wants to merge 2 commits into
pingdotgg:mainfrom
Bombatomica64:issue-11067-linear-issues
Closed

Bombatomica64 wants to merge 2 commits into
pingdotgg:mainfrom
Bombatomica64:issue-11067-linear-issues

Conversation

@Bombatomica64

@Bombatomica64 Bombatomica64 commented Oct 12, 2026 •

Copy link
Copy Markdown
Contributor

Stacked on #18681. This branch contains that PR's commit; review only the last commit, e35d19f08a (diff). Draft until #18681 lands.

Problem

Many teams track work in Linear, not in their code host. With #18681 they can read GitHub issues in T3 Code, but not their Linear ones.

Change

Linear joins GitHub behind the issue provider interface from #18681. The GitHub provider is unchanged (0-line diff).

  • API key: a Linear personal API key in Settings → Integrations. It goes through the settings secret store (settingsSecrets.ts) like other credentials: stored outside settings.json and redacted for clients.
  • Team per project: each project picks its Linear team on the Issues page or in a thread's Issues panel. A picker appears when none is set, and a menu beside the filters switches team or stops showing Linear for that project. The choice is the project-scoped linearTeamId setting.
  • Same features as GitHub: list, search, state/assignee/label filters, detail and Open in Linear. When a project has both trackers, a toggle switches between them.
  • Links: linear.app/<workspace>/issue/ENG-123 links in a thread open the issue beside it, read through the thread's project. The server rejects an issue from another team.
  • Fresh reads after settings changes: cached issue reads are dropped when settings change, so a new key or team applies at once.

Interface and contract changes:

  • IssueProviderApi gains an optional sourceOptions (the team picker's choices), exposed as issues.sourceOptions.
  • IssueListEntry.commentCount becomes nullable, because Linear's list has no comment count.
  • IssueDetail gains moreComments.

Scope and approval

The maintainer comment on #17977 (#17977 (comment)) asks for a provider-aware first slice and lists other providers as follow-ups. It doesn't specifically approve Linear. This PR is that follow-up for one provider, kept separate so it can be judged on its own. #6315 also covers Linear, as part of a much larger change. This PR takes no code from it.

Verification

  • Typecheck: contracts, shared, client-runtime, server and web report 0 errors.
  • vp test run:
    • Server, 81 tests: LinearIssueProvider.test.ts covers filters, failure mapping, the team checks, missing key or team, and pagination, against mocked Linear GraphQL responses. IssueService.test.ts and serverSettings.test.ts cover the key's round trip: stored, redacted for clients, kept when the client sends the marker back, removed when cleared.
    • Web, 129 tests: Linear URL parsing and project override entries.
    • All pass.
  • Manual check in a local dev build: the settings row saves and removes a key, and GitHub projects behave as in feat(issues): browse a project's GitHub issues beside pull requests #18681.
  • Not checked against a live Linear workspace, because I had none. The list, team picker and Linear links are covered only by the mocked tests above.

Before: Settings → Integrations has no Linear entry.

After:

Linear API key in Settings → Integrations

Model and harness: Claude Opus 5.5 in Claude Code, run from T3 Code.

🤖 Generated with Claude Code

@github-actions github-actions Bot added vouch:unvouched PR author is not yet trusted in the VOUCHED list. size:XXL 1,000+ changed lines (additions + deletions). labels Oct 12, 2026
Bombatomica64 and others added 2 commits October 12, 2026 15:16
Adds an Issues page (sidebar, command palette) that lists a project's
issues with search, state, assignee and label filters, and opens one to
read its description, labels, assignees, state and comments, with Open in
GitHub for everything else (pingdotgg#11067).

In a thread, the panel's surface menu gains Issues (I): the thread
project's issues beside the conversation, each selected issue opening as
its own tab. GitHub issue links in chat and pull request descriptions open
there too, including `pingdotgg#123` references that turn out to be issues rather
than pull requests; outside a thread they open the Issues page.

Issue trackers sit behind their own provider interface
(apps/server/src/issue/IssueProvider.ts) rather than the source control
driver, so a tracker that is not a git host can be added beside GitHub.
GitHub reads through the existing GitHub API client, sharing its
credentials, quota reserve and rate-limit pause with pull requests.
Listings are cursor-paginated per page, cached on the server for 30s
(identical reads coalesce, failures are not kept) and per page on the
client.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds Linear beside GitHub behind the issue provider interface. A Linear
personal API key saved in Settings -> Integrations is kept in the secret
store and redacted for clients, like a hub management key. Each project
picks its Linear team on the Issues page or in a thread's Issues panel;
the choice is the project-scoped `linearTeamId` setting, and a menu
beside the filters switches team or stops showing Linear for the project.

Lists, search, state/assignee/label filters, detail and Open in Linear
match GitHub. Linear issue links in a thread's chat and pull request
descriptions open the issue beside the thread, read through the thread's
project. Linear has no comment counts, so `commentCount` is nullable and a
detail says when more comments remain. The provider interface gains an
optional `sourceOptions` (the team picker's choices); GitHub code is
unchanged. Cached issue reads are dropped when settings change, so a new
team or key applies at once.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@Bombatomica64
Bombatomica64 force-pushed the issue-11067-linear-issues branch from 3157c41 to e35d19f Compare October 12, 2026 15:20
@Bombatomica64

Copy link
Copy Markdown
Contributor Author

Closing along with #18681: Linear is covered by #19274 in the same stack. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:XXL 1,000+ changed lines (additions + deletions). vouch:unvouched PR author is not yet trusted in the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant