Correction to a documented landmine, with evidence. Found while commissioning a board (private repo,
2026-07-20).
Context
org-migration-checklist.md,
under Board rebuild, says:
Replacing a Project's status options breaks the built-in workflows silently. A new column set
via API leaves every default workflow ("item closed → status X", "auto-close", "PR merged")
pointing at deleted option ids — they show a warning icon and dangle until each is re-edited by
hand in the UI. Budget the click-through.
The failure is real, but the rule drawn from it is too strong, and it is expensive: taken at
face value it says the Status field is API-forbidden, so every column change becomes manual UI work
— and an agent that has internalised it will refuse the operation (mine did, correctly, having
copied the rule into a project's AGENTS.md).
The finding: ProjectV2SingleSelectFieldOptionInput has an optional id field.
query { __type(name:"ProjectV2SingleSelectFieldOptionInput"){ inputFields{ name } } }
# -> id (String, nullable), name (String!), color (enum!), description (String!)
Omitting id for an option that already exists is what mints a new id — which orphans every item's
stored value and leaves the built-in workflows pointing at a dead option. Passing the existing id
through preserves both. The landmine is specific to a replacement; an additive, id-echoing
edit is safe.
Verified in practice. A live board's three stock options were expanded to six in one mutation,
echoing the ids of the three that were kept (one of them renamed):
Todo's id was reused for the renamed first column, so the Item added to project workflow kept
firing at the right option;
In Progress and Done kept theirs, so Item closed, Auto-close issue, PR merged and
PR linked to issue all stayed pointed at live options;
- the three genuinely new options were passed without
id.
Afterwards: all six enabled workflows still enabled and correctly targeted, and all item values
preserved (75 items, verified by re-reading every item's Status). Zero click-through.
Note the ordering consequence, which is the useful design lever: options render in array order, so
"insert a column in the middle" and "rename a column while keeping its automation" are both
achievable in one call — you just have to read the current ids first.
Proposal
Rewrite the bullet in symptom → cause → fix form, matching the rest of that checklist:
Tasks
Acceptance criteria
- The checklist tells an agent how to change status options safely, instead of implying it must not.
- The verification step (workflows enabled + item values intact) is part of the fix, not left to
taste.
— 🤖 Claude, on behalf of @PBNZ
Correction to a documented landmine, with evidence. Found while commissioning a board (private repo,
2026-07-20).
Context
org-migration-checklist.md,under Board rebuild, says:
The failure is real, but the rule drawn from it is too strong, and it is expensive: taken at
face value it says the Status field is API-forbidden, so every column change becomes manual UI work
— and an agent that has internalised it will refuse the operation (mine did, correctly, having
copied the rule into a project's
AGENTS.md).The finding:
ProjectV2SingleSelectFieldOptionInputhas an optionalidfield.Omitting
idfor an option that already exists is what mints a new id — which orphans every item'sstored value and leaves the built-in workflows pointing at a dead option. Passing the existing id
through preserves both. The landmine is specific to a replacement; an additive, id-echoing
edit is safe.
Verified in practice. A live board's three stock options were expanded to six in one mutation,
echoing the ids of the three that were kept (one of them renamed):
Todo's id was reused for the renamed first column, so the Item added to project workflow keptfiring at the right option;
In ProgressandDonekept theirs, so Item closed, Auto-close issue, PR merged andPR linked to issue all stayed pointed at live options;
id.Afterwards: all six enabled workflows still enabled and correctly targeted, and all item values
preserved (75 items, verified by re-reading every item's Status). Zero click-through.
Note the ordering consequence, which is the useful design lever: options render in array order, so
"insert a column in the middle" and "rename a column while keeping its automation" are both
achievable in one call — you just have to read the current ids first.
Proposal
Rewrite the bullet in symptom → cause → fix form, matching the rest of that checklist:
Tasks
standard/org-migration-checklist.md.construction.
Acceptance criteria
taste.
— 🤖 Claude, on behalf of @PBNZ