Skip to content

fix(issues): Linear issues on host-less projects, plus Linear UI fixes - #1

Merged
nSimonFR-ai merged 3 commits into
nicos/issues-nightlyfrom
nicos/linear-link-hostless-project
Oct 8, 2026
Merged

nSimonFR-ai merged 3 commits into
nicos/issues-nightlyfrom
nicos/linear-link-hostless-project

Conversation

@nSimonFR-ai

@nSimonFR-ai nSimonFR-ai commented Oct 8, 2026 •

Copy link
Copy Markdown
Owner

A thread in a project with no git remote (e.g. TRUSK, a folder of repos with repositoryIdentity: null) could never link or read a Linear issue. link_issue {repository:"CO", number:130, provider:"linear"} failed with "Issues cannot be browsed for this project's host yet.", because IssueService.requireProject only accepts references that match the project's own issue sources, which come from its git remote or a per-project Linear team binding. A project with neither has no sources at all.

Fix

  • IssueAdapter.resolveReference (optional): an adapter may resolve a repository the caller names outright. Linear implements it by mapping a team key to the connected account that can see that team (environment account first, then saved accounts). Matches are cached for 10 minutes.
  • IssueProviderRegistry.resolveReference asks those adapters, filtered by provider/host. IssueService.requireProject uses it only after the project's own sources miss, so GitHub/GitLab/Bitbucket/Azure routing is unchanged. An unknown team now fails with "No connected linear account can read OPS." instead of the misleading host message.
  • MCP tool contract: repository is the Linear team key (CO for CO-130), number is the trailing digits, and provider is linear. This is documented on the fields and on read_issue/link_issue. read_issue's url still never selects an unlinked issue, which existing tests guard. Once the issue is linked, the Linear URL matches.
  • User docs: a thread can link any Linear issue a connected account can see.

Linear UI follow-ups (web)

  • Settings → Linear accounts: the account name and email kept collapsing to "N…" next to a long team list. The teams now sit on their own truncating line, and hovering shows the full list.
  • Linked items panel: a pull request attached to a linked issue appeared twice (once in the thread list, once under the issue) and was never nested under its issue. An unstacked thread pull request that the tracker also reports now renders once, with its full row, under that issue. Stacked layers stay in the list. The matching rule is tested in pullRequestListLines.test.ts.

Tests: host-less project + Linear issue (plus an unbound Linear team on a GitHub project) in IssueService.test.ts, and team→account resolution and caching in LinearIssueProvider.test.ts. vp test run apps/server/src/issue apps/server/src/mcp/toolkits/issues apps/server/src/workItems passes (361 tests), and tsc --noEmit passes for apps/server. Web: vp test run apps/web/src/components/pullRequest/pullRequestListLines.test.ts apps/web/src/components/issue passes (115 tests), and tsc --noEmit passes for apps/web.

UI changes have not been checked in a running client yet.

Claude Opus 5.5 via Claude Code (T3 Code)

🤖 Generated with Claude Code

A thread in a project with no repository identity (or no Linear team
binding) could never link or read a Linear issue: IssueService resolved
every issue reference against the project's own sources, which come from
its git remote or a per-project Linear binding, and failed with
"Issues cannot be browsed for this project's host yet."

Adapters may now resolve a repository named outright. Linear maps a team
key to the connected account that can see it (environment account first),
cached for ten minutes. IssueService falls back to it only after the
project's own sources miss, so GitHub/GitLab routing is unchanged. The MCP
issue tools now spell out the Linear contract: repository is the team key
(CO for CO-130), number the trailing digits, provider linear.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@github-actions github-actions Bot added vouch:trusted PR author is trusted by repo permissions or the VOUCHED list. size:L labels Oct 8, 2026
nSimonFR-ai and others added 2 commits October 8, 2026 12:04
The account name, email and team list shared one row and all shrank, so a
workspace with many teams squeezed the name and email down to a letter. The
teams now take their own truncating line, with the full list in a tooltip.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…s it

The Linked items panel drew the thread's pull requests and the linked issue
trees as two separate lists, so a pull request attached to a linked issue
showed twice and never under its issue. An unstacked thread pull request the
tracker also reports now renders once, with its full row, nested under that
issue. Stacked layers stay in the list so their chain reads as one piece.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@nSimonFR-ai nSimonFR-ai changed the title fix(issues): link Linear issues from projects without a git host fix(issues): Linear issues on host-less projects, plus Linear UI fixes Oct 8, 2026
nSimonFR-ai added a commit to nSimonFR/nic-os that referenced this pull request Oct 8, 2026
Linear issues link from projects without a git host or team binding, the
Linear accounts row stays readable, and a thread pull request nests under
the linked issue that lists it (nSimonFR-ai/t3code#1). The rpi5 server stays
on -issues.1.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
nSimonFR-ai added a commit to nSimonFR/nic-os that referenced this pull request Oct 8, 2026
-issues.1 and -issues.2 were built without T3 Connect's public config, so
the Mac app ran with T3 Connect off too. -issues.3 is -issues.2 (Linear
links from host-less projects, nSimonFR-ai/t3code#1) rebuilt with it.

Allowlist the two public Clerk values for gitleaks, like the GPG
fingerprint: they ship in every official T3 Code build.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
github-actions Bot pushed a commit to nSimonFR/nic-os that referenced this pull request Oct 8, 2026
-issues.1 and -issues.2 were built without T3 Connect's public config, so
the Mac app ran with T3 Connect off too. -issues.3 is -issues.2 (Linear
links from host-less projects, nSimonFR-ai/t3code#1) rebuilt with it.

Allowlist the two public Clerk values for gitleaks, like the GPG
fingerprint: they ship in every official T3 Code build.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@nSimonFR-ai
nSimonFR-ai marked this pull request as ready for review October 8, 2026 13:39
@nSimonFR-ai
nSimonFR-ai merged commit 06fab3e into nicos/issues-nightly Oct 8, 2026
12 of 14 checks passed
@nSimonFR-ai
nSimonFR-ai deleted the nicos/linear-link-hostless-project branch October 8, 2026 13:40
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

size:L 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