feat: replies to comments
A comment can answer another one (replyTo), one level deep: answering a reply joins the same thread, and it must be on the same ticket. Whoever wrote the comment gets a new REPLIED notification, and the activity says "respondió a un comentario". A comment deleted while it has replies stays, without its text (deleted: true), so the thread still reads; it goes with its last reply and does not count in commentCount. The ticket page shows threads with their replies indented and a "Responder" box; REST, GraphQL and the MCP (add_comment, get_issue) take and show replyTo. Existing comments are unchanged. Docs, Word and PDF updated. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -212,6 +212,7 @@ export type NotificationKind =
|
||||
| 'MENTIONED'
|
||||
| 'QA_FAILED'
|
||||
| 'REMINDER'
|
||||
| 'REPLIED'
|
||||
| 'STATUS_CHANGED'
|
||||
| 'WATCHED';
|
||||
|
||||
@@ -554,6 +555,8 @@ export type CommentFieldsFragment = {
|
||||
id: string;
|
||||
issueId: string;
|
||||
body: string;
|
||||
replyTo: string | null;
|
||||
deleted: boolean;
|
||||
createdAt: string;
|
||||
editedAt: string | null;
|
||||
author: { id: string; name: string };
|
||||
@@ -875,6 +878,8 @@ export type IssueCommentsQuery = {
|
||||
id: string;
|
||||
issueId: string;
|
||||
body: string;
|
||||
replyTo: string | null;
|
||||
deleted: boolean;
|
||||
createdAt: string;
|
||||
editedAt: string | null;
|
||||
author: { id: string; name: string };
|
||||
@@ -886,6 +891,7 @@ export type IssueCommentsQuery = {
|
||||
export type AddCommentMutationVariables = Exact<{
|
||||
issueId: string;
|
||||
body: string;
|
||||
replyTo?: string | null | undefined;
|
||||
}>;
|
||||
|
||||
export type AddCommentMutation = {
|
||||
@@ -1853,6 +1859,8 @@ export type CommentChangedSubscription = {
|
||||
id: string;
|
||||
issueId: string;
|
||||
body: string;
|
||||
replyTo: string | null;
|
||||
deleted: boolean;
|
||||
createdAt: string;
|
||||
editedAt: string | null;
|
||||
author: { id: string; name: string };
|
||||
@@ -2698,6 +2706,8 @@ export const CommentFieldsFragmentDoc = {
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'issueId' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'body' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'replyTo' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'deleted' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'createdAt' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'editedAt' } },
|
||||
{
|
||||
@@ -5477,6 +5487,8 @@ export const IssueCommentsDocument = {
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'issueId' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'body' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'replyTo' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'deleted' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'createdAt' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'editedAt' } },
|
||||
{
|
||||
@@ -5527,6 +5539,14 @@ export const AddCommentDocument = {
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
kind: 'VariableDefinition',
|
||||
variable: {
|
||||
kind: 'Variable',
|
||||
name: { kind: 'Name', value: 'replyTo' },
|
||||
},
|
||||
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
|
||||
},
|
||||
],
|
||||
selectionSet: {
|
||||
kind: 'SelectionSet',
|
||||
@@ -5551,6 +5571,14 @@ export const AddCommentDocument = {
|
||||
name: { kind: 'Name', value: 'body' },
|
||||
},
|
||||
},
|
||||
{
|
||||
kind: 'Argument',
|
||||
name: { kind: 'Name', value: 'replyTo' },
|
||||
value: {
|
||||
kind: 'Variable',
|
||||
name: { kind: 'Name', value: 'replyTo' },
|
||||
},
|
||||
},
|
||||
],
|
||||
selectionSet: {
|
||||
kind: 'SelectionSet',
|
||||
@@ -11232,6 +11260,8 @@ export const CommentChangedDocument = {
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'id' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'issueId' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'body' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'replyTo' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'deleted' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'createdAt' } },
|
||||
{ kind: 'Field', name: { kind: 'Name', value: 'editedAt' } },
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user