feat: move unfinished tickets between releases

- Bulk editing gets «Release…» (open releases or none), and the list
  view a release filter, also reachable from each release («Ver en la
  lista», ?release=).
- Archiving a release asks where its unfinished tickets go, as closing
  a sprint does: ReleaseArchivedEvent carries `moveTo` (an open release
  of the same project, or none) and the saga moves them there; finished
  ones stay. In GraphQL, REST and the MCP's archive_release.
- Chapter 10 lists the next features and the ideas to weigh.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-14 21:55:45 +02:00
parent 0a73eda9b2
commit 993f80b4b9
34 changed files with 408 additions and 48 deletions

View File

@@ -1676,6 +1676,7 @@ export type PublishReleaseMutation = {
export type ArchiveReleaseMutationVariables = Exact<{
releaseId: string;
moveTo?: string | null | undefined;
}>;
export type ArchiveReleaseMutation = {
@@ -10488,6 +10489,14 @@ export const ArchiveReleaseDocument = {
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
},
{
kind: 'VariableDefinition',
variable: {
kind: 'Variable',
name: { kind: 'Name', value: 'moveTo' },
},
type: { kind: 'NamedType', name: { kind: 'Name', value: 'ID' } },
},
],
selectionSet: {
kind: 'SelectionSet',
@@ -10504,6 +10513,14 @@ export const ArchiveReleaseDocument = {
name: { kind: 'Name', value: 'releaseId' },
},
},
{
kind: 'Argument',
name: { kind: 'Name', value: 'moveTo' },
value: {
kind: 'Variable',
name: { kind: 'Name', value: 'moveTo' },
},
},
],
selectionSet: {
kind: 'SelectionSet',