Expose a last-modified timestamp on tasks and notes #1
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?
The blocker for incremental sync. Filed from
halfst/mpx-engine#120 / #137.What's needed
Every task and note payload should carry a last-modified timestamp — the moment TickTick last changed the object. Naming it
modified_date(ormodified_time, matching whatever the upstream API calls it) keeps it consistent with the existing snake_case flattening.Needed on the same four surfaces the engine already reads:
list-tasks,list-notes,get-note, and whatever returns a single task.Why it blocks
The engine's whole sync design is watermark-driven, and the watermark is defined in terms of this field:
MPX Engine Spec§3 — "sync| Watermark diff (lastSyncedvsmodifiedDate)"Sync Operating Spec§3 (People) — "Watermark:lastSyncedvs. TickTickmodifiedDate"Sync Operating Spec§4 (Projects) — sameThe field does not exist in the MCP surface. Confirmed against live data today — here is a full
get-noteresponse, which is the richest single-object payload available:No modified timestamp.
list-notesandlist-taskscarry the same set.Why the workarounds are all bad
etagtells you that something changed but not when. It can't be compared against a storedlastSynceddate, so it can't answer "changed since the last run" — only "differs from the etag I cached," which means keeping a second shadow store of every etag and still learning nothing about ordering.Likely already available
The server returns
sort_order,column_id,pinned_timeandetag, which are v2-API fields rather than Open-API v1 ones. The v2 task/note objects carry a modified timestamp, so this may be a matter of stopping it being dropped during payload flattening rather than new API work.There's precedent:
list-projectsreturnsgroup_id,kindandclosed, and the consumer was silently discarding them — fixed today in mpx-engine. Worth checking whether the same is happening one layer up here.Acceptance
Unblocks
halfst/mpx-engine#120 (person-sync and project-sync push handlers) and the watermark half of the shared sync core.