Checklists in the body, colour from tags, and commit-derived CalVer #4

Merged
bvandeusen merged 73 commits from dev into main 2026-08-29 13:39:45 -04:00
Showing only changes of commit 1a66d9c3a8 - Show all commits
+37
View File
@@ -19,6 +19,7 @@ from thoughtsync.notes import (
_header_filename,
_keep_spec,
_native_spec,
_note_markdown,
_safe_filename,
_slugify,
_usec_to_dt,
@@ -533,3 +534,39 @@ def test_the_migration_folds_exactly_like_the_app():
("prose\n", " padded ", True),
]:
assert module._append_item(body, text, checked) == append_item(body, text, checked)
# --- import/export: the body already carries the list ------------------------
def test_note_markdown_writes_a_checklist_once():
"""The export used to append the items after the body. The body IS them now
(M304), so the old branch would have doubled every checklist in an export — and
doubled it again on the next re-import."""
note = Note(
display_title="shopping",
body="shopping\n\n- [ ] milk\n- [x] eggs",
color="default",
pinned=False,
archived=False,
)
out = _note_markdown(note, [])
assert out.count("- [ ] milk") == 1
assert out.count("- [x] eggs") == 1
# And in place, under the note's own first line rather than in a block of its own.
assert out.rstrip().endswith("shopping\n\n- [ ] milk\n- [x] eggs")
def test_native_spec_of_a_current_export_folds_nothing():
# Today's export carries no `items` key, because the body has the lines. An empty
# list is what stops _insert_note folding them in a second time.
assert _native_spec({"body": "a\n\n- [ ] milk"})["items"] == []
def test_native_spec_of_a_pre_m304_export_still_carries_its_items():
# An export taken BEFORE this milestone has a body with no task lines and a
# separate items array. Importing one has to put the checklist back — which is
# the same fold the Keep importer does, and the reason _insert_note still accepts
# items at all.
old = {"body": "shopping", "items": [{"text": "milk", "checked": True}]}
assert _native_spec(old)["items"] == [{"text": "milk", "checked": True}]