Add batched update_project_items writes via GraphQL#2903
Open
veralizeth wants to merge 3 commits into
Open
Conversation
|
go |
13 tasks
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 20, 2026 19:43
15ca2ee to
b8f5ca9
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 20, 2026 20:26
983d5f4 to
047505f
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 21, 2026 12:50
5ff24d6 to
669974c
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
3 times, most recently
from
July 21, 2026 14:04
ad9f0e4 to
85ec9ef
Compare
6 tasks
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 21, 2026 19:40
e55769d to
ef236d5
Compare
zwick
changed the base branch from
main
to
zwick-extract-projects-resolver-refactor
July 21, 2026 19:40
13 tasks
zwick
changed the base branch from
zwick-extract-projects-resolver-refactor
to
zwick-extract-projects-batch-mutation
July 21, 2026 20:04
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 21, 2026 20:04
ef236d5 to
f1a291e
Compare
zwick
force-pushed
the
zwick-extract-projects-batch-mutation
branch
from
July 21, 2026 20:32
a69dd2d to
a7b9cf3
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 21, 2026 20:33
f1a291e to
03efb11
Compare
SamMorrowDrums
pushed a commit
that referenced
this pull request
Jul 22, 2026
Split out of #2903 as a small prerequisite refactor. - Add a NodeID field to ResolvedField, populated for all three field variants in listAllProjectFields. - Refactor resolveProjectItemIDByIssueNumber into a thin wrapper over a new resolveProjectItemByIssueNumber that also returns the item node ID, delegating to resolveProjectItemByIssueNumberWithProjectID for an already-resolved project ID. The projectItems query now selects the item node ID alongside its full database ID. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 89f897b0-115f-4435-a071-46fb6c49be86
zwick
force-pushed
the
zwick-extract-projects-batch-mutation
branch
from
July 22, 2026 13:25
a7b9cf3 to
b9ecc1a
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
2 times, most recently
from
July 22, 2026 14:18
264d81d to
ee77343
Compare
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
2 times, most recently
from
July 22, 2026 17:02
baf940c to
aaad1b0
Compare
Resolve and validate shared field updates and item references before executing ordered, chunked GraphQL writes with explicit ambiguous outcomes. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7ae767ff-c1d0-46a9-b126-2e91403993a0
Add the public projects_write contract, routing, handler coverage, and generated documentation for shared field updates across batches of up to 50 items. Co-authored-by: Lizeth Vera <47796851+veralizeth@users.noreply.github.com> Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7ae767ff-c1d0-46a9-b126-2e91403993a0
zwick
force-pushed
the
veralizeth/mcp-batch-bulk-field-value
branch
from
July 22, 2026 17:08
aaad1b0 to
9928ec6
Compare
zwick
marked this pull request as ready for review
July 22, 2026 18:00
Contributor
There was a problem hiding this comment.
Pull request overview
Adds batched Project item field updates with ordered tri-state results.
Changes:
- Adds resolution, conversion, deduplication, and chunked GraphQL writes for up to 50 items.
- Extends the
projects_writeschema and routing. - Adds comprehensive tests, documentation, and toolsnap updates.
Show a summary per file
| File | Description |
|---|---|
| README.md | Documents batch-update parameters. |
| pkg/github/projects.go | Adds schema and handler routing. |
| pkg/github/projects_batch.go | Implements batch processing. |
| pkg/github/projects_batch_test.go | Tests batch behavior and failures. |
| pkg/github/projects_test.go | Tests the public schema. |
| pkg/github/__toolsnaps__/projects_write.snap | Updates the tool snapshot. |
Review details
- Files reviewed: 6/6 changed files
- Comments generated: 1
- Review effort level: Medium
Use a neutral code for non-structured lookup failures while preserving structured resolution details. Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> Copilot-Session: 7ae767ff-c1d0-46a9-b126-2e91403993a0
zwick
marked this pull request as draft
July 22, 2026 18:11
zwick
marked this pull request as ready for review
July 22, 2026 18:30
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Adds batched field-value writes to
update_project_itemsusing chunked, aliased GraphQL mutations with input-orderedsucceeded,failed, orunknownresults. One required top-levelupdated_fieldapplies to every item in the batch.Why
Implements the MCP portion of github/planning-tracking#3331. It builds on the issue-membership pagination merged in #2914; CLI support will follow separately.
What changed
items[]as three closedoneOfreference variants:node_id, numericitem_id, oritem_owner+item_repo+issue_number. The top-level field is a closed ID-or-name variant;nullclears it for all items. Tool guidance directs bulk callers here instead of loopingupdate_project_item.githubv4.Client, with a 50-item call cap (at most three requests) and no automatic retries or per-item fallbacks.unknownwhen mutation outcomes are ambiguous.Review guide
101563c0— internal batch engine and direct parsing, resolution, conversion, and execution tests.9928ec60— publicprojects_writecontract/routing, handler and schema coverage, toolsnap, and README.86810292— neutral resolution-failure classification with focused fallback and structured-error coverage.Automated tests are 1,378 of 2,336 added lines; production code is 859 and generated output is 99.
MCP impact
update_project_itemsadds reference-only batch items, one shared field/value,node_idreferences, and structured tri-state results. Existing single-item runtime behavior is unchanged.Prompts tested (tool changes only)
No live prompts were run. Automated handler tests cover equivalent scenarios:
Security / limits
The implementation uses the existing injected REST and GraphQL clients and their permissions. The tool is capped at 50 items; numeric reads use at most five concurrent lookups, and writes remain sequential in chunks of 20 with no automatic retry.
Tool renaming
deprecated_tool_aliases.goNote: if you're renaming tools, you must add the tool aliases. For more information on how to do so, please refer to the official docs.
Lint & tests
./script/lint./script/testFocused schema, field conversion/resolution, item resolution, mutation execution, and handler tests also pass.
Docs