feat: teams within a project

Projects keep teams of members in their settings (settings.teams; people
outside the project are dropped, teams are archived, not removed; absent
when saving means unchanged). Tickets go to a team (`team`, also filtered
in the list and in MCP search_issues), and a comment mentioning
@[Frontend](team-FRONT) tells each of its members. Settings has the teams
with their members, the ticket a «Equipo» select, the list a team filter,
and «@» offers the teams after the people.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-15 16:20:35 +02:00
parent 4acf629106
commit 869acd3f1f
41 changed files with 895 additions and 13 deletions

View File

@@ -2654,6 +2654,18 @@
}
}
},
{
"name": "team",
"required": false,
"in": "query",
"description": "Team ids",
"schema": {
"type": "array",
"items": {
"type": "string"
}
}
},
{
"name": "priority",
"required": false,
@@ -11152,6 +11164,34 @@
"archived"
]
},
"TeamDto": {
"type": "object",
"properties": {
"id": {
"type": "string",
"example": "FRONTEND"
},
"name": {
"type": "string",
"example": "Frontend"
},
"memberIds": {
"type": "array",
"items": {
"type": "string"
}
},
"archived": {
"type": "boolean"
}
},
"required": [
"id",
"name",
"memberIds",
"archived"
]
},
"ProjectSettingsDto": {
"type": "object",
"properties": {
@@ -11189,6 +11229,12 @@
"checklistBeforeDone": {
"type": "boolean",
"description": "Definition of done: tickets reach DONE only with their checklist ticked"
},
"teams": {
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamDto"
}
}
},
"required": [
@@ -11197,7 +11243,8 @@
"issueTypes",
"areas",
"customFields",
"checklistBeforeDone"
"checklistBeforeDone",
"teams"
]
},
"ProjectDto": {
@@ -11560,6 +11607,35 @@
"type"
]
},
"TeamBodyDto": {
"type": "object",
"properties": {
"id": {
"type": "string",
"example": "FRONTEND"
},
"name": {
"type": "string",
"example": "Frontend",
"maxLength": 40
},
"memberIds": {
"description": "Pireon user ids of project members (others are dropped)",
"type": "array",
"items": {
"type": "string"
}
},
"archived": {
"type": "boolean",
"default": false
}
},
"required": [
"id",
"name"
]
},
"ProjectSettingsBodyDto": {
"type": "object",
"properties": {
@@ -11595,6 +11671,13 @@
"$ref": "#/components/schemas/CustomFieldDefinitionBodyDto"
}
},
"teams": {
"description": "Absent: unchanged. Teams cannot be removed: archive them.",
"type": "array",
"items": {
"$ref": "#/components/schemas/TeamBodyDto"
}
},
"checklistBeforeDone": {
"type": "boolean",
"description": "Definition of done: tickets reach a DONE status only with their checklist ticked (owners and admins may override). Absent: unchanged"
@@ -11899,6 +11982,11 @@
"nullable": true,
"example": "FRONTEND"
},
"team": {
"type": "string",
"nullable": true,
"description": "A team id"
},
"title": {
"type": "string"
},
@@ -12088,6 +12176,7 @@
"key",
"type",
"area",
"team",
"title",
"description",
"status",
@@ -13199,6 +13288,12 @@
"example": "FRONTEND",
"description": "An area id of the project's settings"
},
"team": {
"type": "string",
"nullable": true,
"example": "FRONTEND",
"description": "A team id of the project's settings"
},
"priority": {
"allOf": [
{
@@ -13337,6 +13432,12 @@
"example": "FRONTEND",
"description": "An area id of the project's settings"
},
"team": {
"type": "string",
"nullable": true,
"example": "FRONTEND",
"description": "A team id of the project's settings"
},
"priority": {
"allOf": [
{