Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "feat/wire-timestamps-and-project-groups"
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 #1, closes #8, closes #3.
All three issues guessed correctly that these fields were already on the wire and being dropped during payload flattening. Confirmed live against a real account on 2026-08-09.
#1 —
modified_time(+created_time)The read side was the easy half. The half that isn't in the issue:
v2 stores whatever
modifiedTimethe client sends — it does not override it.Every update method here is built by re-reading the existing raw payload and mutating it, so simply surfacing the field would have frozen
modifiedTimeat its original value on any item this server ever wrote. That's a watermark that exists and is permanently wrong, which is worse than one that's absent — the sync would silently stop seeing its own writes._drop_modified_time()now strips the field from every update payload so the server stamps the write.Verified live:
modified_timeadvanced?That also answers the question the issue asked us to document: any write bumps it, not only content edits. Which means your own push bumps it too — the sync has to record what it wrote, or it will read its own writes back as user edits. That caveat is called out in
TOOLS.md.One consequence worth knowing before you build against it: a write response carries
modified_time: null. The batch response returns only an etag, so the new instant isn't knowable without a re-read. Reads always have it.#8 —
completed_timeOn tasks,
nullwhile open, so "not done" is never confused with "done at the epoch" as the acceptance list required.#3 —
list_project_groups()Folder groups arrive on the same
batch/check/0full state as projects, under a top-levelprojectGroupskey — no new endpoint needed. Deleted groups are filtered unlessinclude_deleted=true.The docs are explicit about the level confusion the issue flagged: a folder group holds projects; a column holds items inside one project.
Also included
Read-side
Project.sort_order, since it fell out of the same model change. Worth flagging for #9: sidebar sort order is a positive integer where lower sorts higher (0, 393216, 655360, …in visible order), not the large negative the issue guessed. Recorded in DESIGN.md §11 so the #9 write side has the semantics already pinned down.Testing
146 passed. Unit tests use a fake transport and structurally cannot catch the echo semantics, so the watermark contract also gets a live test (test_modified_time_bumps_on_every_write_live) that fails loudly if anyone reintroduces the echo. All 3 live tests pass against a real account.Contracts documented in DESIGN.md §10 (timestamps + the echo rule) and §11 (groups + ordering).
🤖 Generated with Claude Code
https://claude.ai/code/session_012VU4wBhFAAosZLQcWqvHsf