projects_write: add iterations to an existing iteration field (currently impossible without wiping item assignments)
Personne n'a encore pris cette issue.
Évaluation
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Accessibilité débutants
- 35/100
- Type d'issue
- Fonctionnalité
- Clarté
- Plutôt claire
- Activité
- Active
- Stack technique
- github, go, graphql
- Domaine
- api, backend-api-design, tooling
Piste de recherche
Commencez par l’implémentation de projects_write, en particulier par le chemin create_iteration_field existant, et examinez comment les mises à jour de GraphQL ProjectV2Iteration sont assemblées. Comparez le schéma d’entrée public avec le type d’itération côté lecture et avec le comportement d’identité des options à sélection unique décrit dans l’issue. La tâche est terminée lorsqu’un champ d’itération existant peut recevoir en toute sécurité des itérations ajoutées sans perdre les affectations d’éléments, et que la limitation de l’API externe ainsi que tout fallback destructif sont explicitement pris en charge.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
Describe the feature or problem you’d like to solve
projects_write supports create_iteration_field (added in #2232, closing #1854), but there is no way to add an iteration to an existing iteration field — the single most common sprint operation ("add the next sprint").
Today, when an agent is asked to "add the next sprint to the Sprint field", the only iteration-related method available is create_iteration_field, so agents end up creating a duplicate field instead of appending to the existing one.
The underlying blocker is a public API asymmetry, which I verified empirically (2026-07-27):
- GraphQL: the only way to modify iterations is
updateProjectV2FieldwithiterationConfiguration, whose docs state "provided values overwrite the existing configuration". ItsProjectV2Iterationinput accepts only{startDate, duration, title}— noid, while the read-side typeProjectV2IterationFieldIterationdoes exposeid. - Consequence (tested on a disposable project): rebuilding the list with identical titles/dates regenerates all iteration ids (e.g.
18dd8506→3038b65f), and every item's iteration field value is silently cleared — for completed and active iterations alike. - REST: the new
projectsV2REST endpoints only allow creating fields (POST .../fields);fields/{field_id}has no PATCH/PUT, and the iteration items schema isadditionalProperties: falsewith noideither. - Precedent in the same mutation:
ProjectV2SingleSelectFieldOptionInputdoes have an optionalid, documented as "Include this to preserve the option's identity during updates, preventing item field values from being cleared". The GitHub web UI's internal endpoint uses exactly this pattern for iterations (existing entries carryid, new entries sendid: ""). Iterations appear to be the one place this mechanism was left out of the public schema.
Proposed solution
Two complementary parts:
- (Root fix, likely needs routing to the Projects/GraphQL team) Add an optional
id: Stringto theProjectV2Iterationinput, with the same preserve-identity semantics asProjectV2SingleSelectFieldOptionInput.id. This would make read-modify-write appends safe for any API consumer, not just MCP. - (This repo) Add an
add_iterationmethod toprojects_writethat appends an iteration to an existing iteration field (auto-computing the next start date from the last iteration when omitted). If/while the schema lacksid, the method could either (a) be gated with an explicit destructive warning, or (b) mitigate by snapshotting item assignments before the rewrite and re-assigning them to the regenerated ids afterwards.
This would benefit every team running sprint workflows through the MCP server: sprint planning is a recurring, high-frequency operation, and it is currently the one Projects v2 write that agents cannot perform safely at all.
Example prompts or workflows (for tools/toolsets only)
- "Add the next sprint to the Sprint field in project 14"
- "Extend our Sprint iterations through the end of Q4, two weeks each"
- "Create 'Sprint 23' starting 2026-10-03 with a duration of 14 days"
- "Our sprints ran out — add six more iterations matching the current cadence"
- "Insert next sprint and move all unfinished items from the current one into it"
Additional context
- Verification was done via schema introspection (
__typeonProjectV2Iteration,ProjectV2IterationFieldIteration,ProjectV2SingleSelectFieldOptionInput) and a live experiment on a throwaway user project; happy to share the exact GraphQL calls and before/after output. - Related: #1854 (closed by #2232, which covers field creation only).
- Public schema references (docs.github.com
schema.docs.graphql):input ProjectV2Iteration(no id) vstype ProjectV2IterationFieldIteration(has id);UpdateProjectV2FieldInput.iterationConfigurationoverwrite note;ProjectV2SingleSelectFieldOptionInput.idpreserve-identity note.
- Langage dominant
- Go
- Étoiles
- 33.1k
- Forks
- 5k
- Merge moyen
- 2 j 1 h
- PR mergées (30 j)
- 25
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de github/github-mcp-server
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 84/100
github/github-mcp-server#3235 ·
-
enhancement
Difficulté 1/5 Moins d'une heure Accessibilité débutants 88/100
github/github-mcp-server#3042 · 2 commentaires ·
-
bug
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
github/github-mcp-server#3032 · 1 réaction ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 74/100
github/github-mcp-server#2803 · 1 commentaire ·
-
Difficulté 2/5 1-3 heures Accessibilité débutants 76/100
github/github-mcp-server#2740 ·
Toutes les issues de github/github-mcp-server
Issues similaires
-
Difficulté 1/5 Moins d'une heure Accessibilité débutants 60/100
github/gh-aw-mcpg#13748 ·
-
agentic-workflows
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
needs-triage
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 65/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 75/100
googleapis/librarian#7670 · 2 commentaires ·