feat: tickets I follow, and more news for followers

"Que sigo" on the home page lists the open tickets I follow, whoever
works on them; `watching` filters my issues (REST, GraphQL, MCP) and a
project's search (none without a session).

Followers now also hear when a ticket's priority or due date changes,
and when it enters or leaves a sprint. Smaller edits (title, labels…)
still do not notify.

Docs (with the REPLIED row the replies change missed), Word and PDF
updated.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-09 11:29:17 +02:00
parent ea4ef82239
commit f6417248c7
29 changed files with 636 additions and 11573 deletions

View File

@@ -67,9 +67,15 @@ export class IssuesResolver {
@Tool({
name: 'my_issues',
description:
"Tickets across all the user's projects: assigned to them (default) or anyone's, filtered by status category (e.g. QA to see what waits for testing).",
"Tickets across all the user's projects: assigned to them (default) or anyone's, filtered by status category (e.g. QA to see what waits for testing); watching: only the ones they follow.",
paramsSchema: z.object({
assignedToMe: z.boolean().default(true),
watching: z
.boolean()
.default(false)
.describe(
'Only the tickets the user follows (use with assignedToMe false)',
),
categories: z
.array(CATEGORY)
.optional()
@@ -81,6 +87,7 @@ export class IssuesResolver {
mine(
params: {
assignedToMe: boolean;
watching: boolean;
categories?: z.infer<typeof CATEGORY>[];
limit: number;
},
@@ -92,6 +99,7 @@ export class IssuesResolver {
params: {
query: {
assignedToMe: params.assignedToMe,
watching: params.watching,
category: params.categories ?? ['TODO', 'IN_PROGRESS', 'QA'],
limit: params.limit,
},
@@ -127,6 +135,10 @@ export class IssuesResolver {
.boolean()
.optional()
.describe('Only tickets in no sprint (the backlog)'),
watching: z
.boolean()
.optional()
.describe('Only the tickets the user follows'),
dueFrom: z.string().optional().describe('Due on or after (ISO date)'),
dueTo: z.string().optional().describe('Due on or before (ISO date)'),
sort: z
@@ -154,6 +166,7 @@ export class IssuesResolver {
parent?: string;
sprintId?: string;
noSprint?: boolean;
watching?: boolean;
dueFrom?: string;
dueTo?: string;
sort: 'RECENT' | 'RANK';
@@ -181,6 +194,7 @@ export class IssuesResolver {
parent: params.parent,
sprintId: params.sprintId,
noSprint: params.noSprint,
watching: params.watching,
dueFrom: params.dueFrom,
dueTo: params.dueTo,
sort: params.sort,