Repository navigation
feat(linear): add complete issue relations - #9674
Conversation
|
Warning Review limit reached
Next review available in: 10 minutes Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available. How can I continue?After more reviews become available, a review can be triggered using the To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews. How do review limits work?CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability. For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window. Please refer docs for additional details. Review details⚙️ Run configurationConfiguration used: Repository UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (31)
📝 WalkthroughWalkthroughAdds Linear issue relation discovery and mutation for outbound and inverse relations, including shared request/result types, GraphQL reads and writes, duplicate detection, and pagination metadata. Exposes the functionality through runtime RPC methods, local and remote CLI commands, validation, help text, formatting, tests, linked-worktree notifications, and skill guides. Updates relation result typing and records new Linear skill revisions in release metadata and manifests. 🚥 Pre-merge checks | ✅ 3 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (3 passed)
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. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
🧹 Nitpick comments (2)
src/cli/handlers/linear-relation-write.ts (1)
32-46: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueType the lookup map so strict-mode indexing doesn't trip TS7053.
Indexing the inline object withvalue: stringcan fail in strict mode because there’s no string index signature. ARecord-typed map avoids the implicit-anyerror.src/main/ssh/ssh-remote-linear-output.ts (1)
206-211: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueImprove phrasing for idempotent removals.
When
operationisremoveandalreadySetis true, the output will readRemoved ... (already set).This phrasing is slightly contradictory since the relation was already absent. Consider adjusting the phrasing based on the operation.💬 Proposed fix for the phrasing
function formatLinearRelationWrite(result: LinearIssueRelationWriteResult): string { const verb = result.operation === 'add' ? 'Added' : 'Removed' - const suffix = result.meta.alreadySet ? ' (already set)' : '' + const suffix = result.meta.alreadySet ? (result.operation === 'add' ? ' (already set)' : ' (already removed)') : '' return `${verb} ${result.issue.identifier} ${result.relation.relationship} ${result.relatedIssue.identifier}${suffix}.` }
ℹ️ Review info
⚙️ Run configuration
Configuration used: Repository UI
Review profile: CHILL
Plan: Pro
Run ID: ab061afa-c6dc-47ed-978c-8aa5c9bffac0
📒 Files selected for processing (31)
resources/skills/current-manifest.jsonresources/skills/release-mapping.jsonresources/skills/snapshot-registry.jsonskill-guides/orca-linear.mdskills/orca-linear/SKILL.mdsrc/cli/bundled-skill-guides.tssrc/cli/handlers/linear-relation-write.tssrc/cli/handlers/linear.test.tssrc/cli/handlers/linear.tssrc/cli/linear-format.tssrc/cli/specs/linear.tssrc/main/linear/issue-context-includes.test.tssrc/main/linear/issue-context-includes.tssrc/main/linear/issue-context-raw.tssrc/main/linear/issue-context-relations.test.tssrc/main/linear/issue-context-relations.tssrc/main/linear/issue-relation-write.test.tssrc/main/linear/issue-relation-write.tssrc/main/runtime/orca-runtime.tssrc/main/runtime/rpc/methods/linear-agent-access.test.tssrc/main/runtime/rpc/methods/linear-agent-access.tssrc/main/ssh/ssh-remote-linear-output.tssrc/main/ssh/ssh-remote-linear-read-help.tssrc/main/ssh/ssh-remote-linear-relation-write.test.tssrc/main/ssh/ssh-remote-linear-relation-write.tssrc/main/ssh/ssh-remote-linear-result-guards.tssrc/main/ssh/ssh-remote-linear-write-cli.tssrc/main/ssh/ssh-remote-linear-write-help.tssrc/shared/linear-agent-access.tssrc/shared/linear-agent-result-types.tssrc/shared/linear-issue-relation-write.ts
564fc9f to
d20aabd
Compare
* feat(linear): add complete issue relations * fix(linear): harden relation reads and writes * fix(linear): classify ambiguous relation writes
Summary
orca linear relation add|removecommands andlinear.issueRelationWriteRPCDesign
relationshipis always expressed from the requested issue:blocks,blockedBy,relatedTo,duplicateOf, or read-onlyduplicatedBy/similardirectionpreserves the underlying relation direction (outboundorinbound)Validation
pnpm run typecheck:nodepnpm run typecheck:clipnpm exec oxlint(pre-existing warnings only)pnpm run check:max-lines-ratchetpnpm run verify:bundled-skill-guidespnpm run verify:skill-bundle-manifestLive Electron agent validation (2026-07-21)
orca-linearskill and ran a real Codex agent against the disposableorca test workspaceORC-5 blocks ORC-6reads as outboundblocksfrom ORC-5 and inboundblockedByfrom ORC-6; an identical add returned the same relation withalreadySet: true, and inverse-side removal cleared both viewsrelatedToreads from both ORC-5 and ORC-7 and removal from the inverse sideORC-7 duplicateOf ORC-6reads as inboundduplicatedByfrom ORC-6; removing from the writable duplicate source cleared both views