Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/write-side-gaps"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #2, closes #9, closes #7. Completes #4.
The finding that shapes this PR
v2 does not validate id references on write. It accepts a nonsense id, returns success, and produces a silently misplaced item. Confirmed live 2026-08-09:
That silent fallback is precisely the problem these issues exist to remove, so both new id parameters are validated before the write and the request is never sent.
#2 —
group_idon create/update projectcreate_project(group_id=…)places a project directly into a sidebar folder. Unknown id →APIError, nothing created (asserted live).#9 —
sort_orderon create/update projectWorth correcting the issue's assumption: sidebar
sort_ordervalues are positive integers, not the "large negative" the issue expected — that's tasksortOrder. Verified against the real sidebar, in visible top-to-bottom order:Documented on the tool so a caller can read two neighbours' values and pick one between them.
#4 — already shipped, now completed
update_notehas acceptedcolumn_idsince v0.2.0 at all three layers, and the deployed gateway exposes it — the caveat the issue quoted was stale. The one genuinely unbuilt item on its acceptance list was rejecting a column from a different project, which v2 also accepts-and-ignores._require_columnnow guardsupdate_taskandupdate_note, validating against the destination project so moving project and column in a single call still works.#7 —
append/prependonupdate_noteThe motivation is narrower than convenience, and it's the near-miss the issue describes:
contentreplaces the whole body, so an additive edit otherwise means read-modify-write. A body read through any size-capped listing may be shortened — writing it back destroys the rest of the note.append/prependread the body from the full-state payloadupdate_notealready fetches, so the caller never sends existing content and that class of bug becomes unreachable.contentreturns aninputerror rather than guessing an order.modified_timelike any other write (the interaction with #1 the issue asked us to document).Note for reviewers
Two existing column tests now seed a matching column in the fake transport. That's not test massage — setting a column that doesn't exist in the target project is exactly the behaviour this PR deliberately rejects.
Testing
165 passed. Live tests cover group placement, the bogus-group rejection creating nothing,append/prependcomposition, and the foreign-column guard leaving the note untouched. All 5 live tests pass against a real account.Contract in DESIGN.md §12.
🤖 Generated with Claude Code
https://claude.ai/code/session_012VU4wBhFAAosZLQcWqvHsf