Skip to content

feat(issues): add Linear as a standalone issue tracker - #19274

Draft
juliusmarminge wants to merge 5 commits into
issues/5-threadsfrom
issues/5-linear
Draft

juliusmarminge wants to merge 5 commits into
issues/5-threadsfrom
issues/5-linear

Conversation

@juliusmarminge

@juliusmarminge juliusmarminge commented Oct 14, 2026 •

Copy link
Copy Markdown
Member

Problem

Linear and Jira track issues without hosting repositories, so the git-host trackers in #19259–#19261 can't reach them.

Change

  • Standalone trackers: StandaloneIssueTrackerApi in issue-tracker-core adds a descriptor (display name, host, scope noun such as "team" or "project", credential label) and probeCredential. The server stores one token per tracker in the secret store and checks it before saving.
  • Project binding: a project can bind one scope of a standalone tracker (migration 063, issue_tracker_bindings). The bound tracker sits beside the git host's, so a GitHub repository planned in Linear lists both, and both are writable. A project without a remote can use a standalone tracker alone. Disconnecting a tracker removes its bindings.
  • Linear (packages/issue-tracker-linear, GraphQL over HttpClient): keys such as ENG-123, scoped to a team. Workflow states keep their names; completed and canceled count as closed and double as close reasons. Plain templates open as drafts; form and rich templates link out to Linear, since its API can't submit them.
  • Settings → Source control → Issue trackers: connect or disconnect each standalone tracker the server reports, and bind or unbind projects. The UI iterates trackers generically.

Adding Jira takes a packages/issue-tracker-jira driver, one row in builtInIssueTrackers.ts, and an optional settings icon. Contracts, RPCs, services, and the settings UI need no change.

Verification

Linear tracker fixture tests, the issue service binding test, and RPC and client permission tests pass. Typecheck is clean for contracts, both tracker packages, client-runtime, server, and web. Untested against a live Linear workspace.

Rebuilt from #6315 by @Bil0000, which this stack uses as its reference for host APIs and UX.

Implemented with Claude Opus 5.5 and Claude Fable 5.1 in T3 Code, using the Claude Code harness.

🤖 Generated with Claude Code

@juliusmarminge
juliusmarminge added this pull request to stack #19262 October 14, 2026 06:48
@juliusmarminge juliusmarminge changed the title issues/5 linear feat(issues): add Linear as a standalone issue tracker Oct 14, 2026
@github-actions github-actions Bot added the vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. label Oct 14, 2026
@github-actions github-actions Bot added the size:XXL 1,000+ changed lines (additions + deletions). label Oct 14, 2026
@juliusmarminge juliusmarminge added the macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews label Oct 14, 2026
@github-actions

github-actions Bot commented Oct 14, 2026 •

Copy link
Copy Markdown
Contributor

Thread transfer impact

✅ Thread transfer remains within every enforced ceiling.

ℹ️ No successful main baseline artifact is available yet. This run establishes the initial measurement.

Provider Metric Main baseline This PR Impact PR ceiling
Codex Total thread wire — 4.9 KiB — 6.8 KiB ✅
Codex Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Codex Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Codex Live turn WebSocket decoded — 20.8 KiB — 29.3 KiB ✅
Codex Live turn messages — 1 — 8 ✅
Claude Total thread wire — 5.0 KiB — 6.8 KiB ✅
Claude Thread snapshot wire — 3.8 KiB — 4.9 KiB ✅
Claude Live turn WebSocket wire — 1.2 KiB — 2.0 KiB ✅
Claude Live turn WebSocket decoded — 21.2 KiB — 29.3 KiB ✅
Claude Live turn messages — 2 — 8 ✅

Baseline: unavailable · PR result: 322107b · Source CI: success

Scenario and decoded snapshot size

10 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.

  • Codex decoded thread snapshot: 108.5 KiB
  • Claude decoded thread snapshot: 108.8 KiB

Updated in place by a trusted workflow. PR artifacts are strictly validated and never executed.

juliusmarminge and others added 5 commits October 14, 2026 02:31
Linear is an issue tracker without a git host, so a project opts into it by binding one of its
teams in settings instead of being resolved from a remote. The new issue-tracker-linear package
talks to Linear's GraphQL API over the platform HttpClient with the personal API key the user
saved, and ships an issueTrackerDriver the registry picks up like the git hosts' drivers.

The core package gains the generic parts a standalone tracker needs: a descriptor (display name,
host, scope noun, credential label) so clients can draw any such tracker's connect flow without
knowing which one it is, a probeCredential method, and an IssueTrackerHost port the server
provides for the stored credential. IssueTrackerConnections stores one credential per tracker
kind in the secret store and keeps per-project bindings in a new issue_tracker_bindings table;
IssueService resolves a bound project to both its git host's tracker and the standalone one, so
a GitHub repository planned in Linear lists both.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tings

Settings → Source control gains an Issue trackers section listing every standalone tracker the
server ships (today Linear), drawn from the server's descriptor rather than a per-tracker
component: connect with the tracker's credential, see which account it signs in as, disconnect,
and bind each of the environment's projects to one of the tracker's scopes or unbind it. Only
the icon is web-side per tracker.

Client mutations go through createEnvironmentRpcCommand under the settings:write grant, and the
command permission tests cover the two new guarded methods.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…ker-kind casts

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

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

Labels

macroscope-review Opt PRs made by unvouched contributors in for Macroscope review. Vouched contributors auto-reviews size:XXL 1,000+ changed lines (additions + deletions). vouch:trusted PR author is trusted by repo permissions or the VOUCHED list.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant