Summary
linearis issues reply <root-thread-id> --body "..." always fails with a GraphQL validation error. The reply mutation builds a CommentCreateInput with only parentId + body, omitting the parent entity id (issueId/projectId/initiativeId) that Linear requires even on threaded replies.
Repro
linearis issues reply f94ee0d6-b8d1-4f84-82c3-87076c40ede0 --body "hello"
Actual
{
"error": "GraphQL request failed: Argument Validation Error - Exactly one of projectUpdateId, initiativeUpdateId, postId, documentContentId, projectId, initiativeId or issueId must be defined."
}
issues discuss (root comment) works fine, because startIssueDiscussion passes issueId. Only the reply path is broken.
Root cause
dist/services/discussion-service.js -> replyToDiscussion:
export async function replyToDiscussion(client, input) {
await assertRootDiscussionThread(client, input.threadId, input.entityKind);
const result = await client.request(StartDiscussionDocument, {
input: {
parentId: input.threadId, // no entity id alongside parentId
body: input.body,
},
});
...
}
Linear's CommentCreateInput requires exactly one entity id (issueId etc.) in addition to parentId for a threaded reply. The CLI sends only parentId.
Suggested fix (low effort - the data is already fetched)
assertRootDiscussionThread already returns the comment via GetDiscussionCommentContext, which selects issueId, projectId, and initiativeId. Capture its return value and forward the entity id:
export async function replyToDiscussion(client, input) {
const thread = await assertRootDiscussionThread(client, input.threadId, input.entityKind);
const result = await client.request(StartDiscussionDocument, {
input: {
parentId: input.threadId,
issueId: thread.issueId ?? undefined,
projectId: thread.projectId ?? undefined,
initiativeId: thread.initiativeId ?? undefined,
body: input.body,
},
});
...
}
No extra network call needed - the context query already returns all three ids. Same applies to project/initiative reply paths.
Version
linearis 2026.4.9
Summary
linearis issues reply <root-thread-id> --body "..."always fails with a GraphQL validation error. The reply mutation builds aCommentCreateInputwith onlyparentId+body, omitting the parent entity id (issueId/projectId/initiativeId) that Linear requires even on threaded replies.Repro
Actual
{ "error": "GraphQL request failed: Argument Validation Error - Exactly one of projectUpdateId, initiativeUpdateId, postId, documentContentId, projectId, initiativeId or issueId must be defined." }issues discuss(root comment) works fine, becausestartIssueDiscussionpassesissueId. Only the reply path is broken.Root cause
dist/services/discussion-service.js->replyToDiscussion:Linear's
CommentCreateInputrequires exactly one entity id (issueIdetc.) in addition toparentIdfor a threaded reply. The CLI sends onlyparentId.Suggested fix (low effort - the data is already fetched)
assertRootDiscussionThreadalready returns the comment viaGetDiscussionCommentContext, which selectsissueId,projectId, andinitiativeId. Capture its return value and forward the entity id:No extra network call needed - the context query already returns all three ids. Same applies to project/initiative reply paths.
Version
linearis 2026.4.9