Allow setting/moving a note's column #4
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Filed from
halfst/mpx-engine#120. Blocks person-sync.What's needed
A way to set a note's
column_idon an existing note — either as a parameter onticktick-update-noteor as a dedicated move tool.column_idis already returned on read bylist-notesandget-note. This is the write side.Why it blocks
Sync Operating Spec§3 makes column placement a required, recurring operation for the People mirror, in both directions:The pull-back half works today —
column_idis readable, and mpx-engine #136 resolves it against the Registry's eleven People columns to derivesection. The push half has no mechanism at all, so asection:change in the vault can never reach TickTick.create-notereportedly accepts a column at creation time (§4.2: "create withcreate_note(title/content/column only)"), so the concept exists on write — it just isn't available after creation.Acceptance
column_idon an existing note without touching its body. Critical —update-note'scontentparameter replaces the whole body, so a move that requires round-tripping the content is a destructive rewrite waiting to happen. That exact hazard is why note write-back was pulled from the sweep in mpx-engine #81 decision 2.kind: NOTEobjects specifically — the People mirror and Mission Control are both NOTE projects.Unblocks
halfst/mpx-engine#120 — the person-sync push path, Sync Spec §3 section placement.Worth recording before this closes: the headline ask here was already shipped.
ticktick-update-notehas acceptedcolumn_idsince v0.2.0, at all three layers (tool → handler → client), and the deployed gateway exposes it today — I checked the live tool schema, not just the source:It also does not touch the body:
update_notere-reads the full raw payload and overrides only the fields you pass, so a column move has never required round-trippingcontent. The destructive-rewrite hazard this issue (correctly) worried about doesn't apply to that path.The Sync Spec §3 caveat that motivated the issue — "the push half has no mechanism at all" — was stale rather than wrong-at-the-time. Worth fixing in the spec so it doesn't generate a second copy of this issue later.
What was genuinely missing is the third item on the acceptance list: a column id from a different project was silently ignored, because v2 accepts and drops it. That's now a loud
apierror, validated against the destination project so a project+column move in one call still works. Fixed in #11.Filing this was still the right call — it surfaced a real bug and corrected a stale spec. Just noting it so the "blocks person-sync" framing doesn't outlive the fact.
Closing — shipped in v0.5.0.
Acceptance list, final state:
column_idon an existing note without touching its body — already true since v0.2.0.update_notere-reads the full raw payload and overrides only what you pass, so a column move has never round-trippedcontent.apierror, validated against the destination project so a project+column move in a single call still works. Landed in #11.kind: NOTE— covered by unit and live tests.Related, from #7 in the same release:
update_notenow takesappend/prepend, so the destructive read-modify-write this issue warned about has a safe alternative for body edits too.