Skip to content

feat(linear): expose formal issue relations (blocks / blocked-by) - #13

Merged
figassis merged 2 commits into
sync/upstream-2026-07from
feat/linear-issue-relations
Aug 1, 2026
Merged

feat(linear): expose formal issue relations (blocks / blocked-by)#13
figassis merged 2 commits into
sync/upstream-2026-07from
feat/linear-issue-relations

Conversation

@figassis

@figassis figassis commented Aug 1, 2026

Copy link
Copy Markdown

Adds Linear issue relation support so agents can express and discover formal blocked-by dependencies (previously unavailable).

Backed by Linear's issueRelation GraphQL API. Three new MCP tools / dispatch commands:

  • create_linear_issue_relation(projectId, issueId, relatedIssueId, type) — issueRelationCreate; type ∈ blocks|related|duplicate. Semantics: issueId <type> relatedIssueId. "A blocked by B" → issueId=B, relatedIssueId=A, type=blocks.
  • delete_linear_issue_relation(projectId, relationId) — issueRelationDelete.
  • list_linear_issue_relations(projectId, issueId) — returns relations (this issue blocks…) + inverseRelations (…blocks this issue = blocked-by). Each node's id is the relationId for delete.

Wiring (post-refactor pattern): jean-core/src/projects/linear_pm.rs (reuses mutate/query_data) → dispatch.rs arms → jean_mcp_core.rs tool defs + run_tool forwarding group. No struct/UI changes.

Stacked on the upstream sync (#12) since it needs the jean-core crate; base is sync/upstream-2026-07. Retarget to main once #12 lands.

Verify

  • make docker-build → clean (done).
  • After restarting Jean on the new jean:dev: list_linear_issue_relations on an issue, create_linear_issue_relation with type=blocks, confirm the blocked-by shows in Linear, then delete_linear_issue_relation.

🤖 Generated with Claude Code

Jean's Linear tools had no way to read or write formal issue relations, so
agents couldn't express or discover blocked-by dependencies. Add three MCP
tools/commands backed by Linear's issueRelation API:

- create_linear_issue_relation(issueId, relatedIssueId, type) — issueRelationCreate;
  type is blocks|related|duplicate. "A blocked by B" = issueId=B, relatedIssueId=A,
  type=blocks.
- delete_linear_issue_relation(relationId) — issueRelationDelete.
- list_linear_issue_relations(issueId) — returns relations + inverseRelations;
  inverseRelations with type=blocks are this issue's blocked-by edges.

Wired via linear_pm.rs (mutate/query_data helpers) → dispatch.rs arms → MCP
tool_registry defs + run_tool forwarding group. No struct/UI changes.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: ede159f6-82cc-4d37-8dd9-a8b3d56bcd3f

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Add a Dependencies (blocks / blocked-by) bullet to the Linear section of the
Jean MCP server instructions so agents discover create/list/delete_linear_issue_relation
without prior knowledge.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@figassis
figassis merged commit 13fc4ea into sync/upstream-2026-07 Aug 1, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Development

Successfully merging this pull request may close these issues.

1 participant