Add a CalDAV tasks integration and an optional Radicale service #9
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "caldav-tasks"
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?
Tasks.org on Android has no server API; its data leaves the phone only
through a sync backend, and CalDAV is the one that keeps subtasks, tags,
priorities, recurrence and reminders. This adds a bundled
tasksintegration that talks CalDAV, and an optional Radicale service (compose
profile
tasks) for the phone and Lumina to sync with.The integration finds, adds, edits, completes and deletes tasks and
creates lists, and puts overdue and due-today tasks in the prompt.
Edits round-trip the iCalendar object, so properties it doesn't touch
(Tasks.org's sort order, collapsed state, snoozes) survive. Writes use
ETags; if the phone saved in between, it rereads and reapplies the
change instead of overwriting it.
Tasks.org only rolls a repeating task forward for completions made on
the phone; a completion synced from another client just completes it.
tasks_complete therefore moves DUE, DTSTART and absolute alarms to the
next occurrence itself (rrule.ts), in the task's wall-clock zone so
times hold across DST, and counts COUNT down as the app does.
Radicale is built from pip with a baked config, runs read-only without
capabilities, refuses to start without RADICALE_PASSWORD and keeps only
a hash of it on tmpfs. It checks that hash on every request, so login
caching is on (the tool tests went from 27s to 1.4s). The integration
reads RADICALE_PASSWORD at call time rather than as a config default,
since defaults are sent to the UI unmasked.
Tests cover iCalendar round-trips, recurrence and multistatus parsing,
and run the tools against a real CalDAV server when LUMINA_TEST_CALDAV
is set; CI starts Radicale for them and builds the image, and the
compose smoke test reads a created task back from Radicale's published
port. The docs example integration is renamed from
taskstotrackerso copying it can't shadow the bundled one.
Co-Authored-By: Claude Opus 5.5 noreply@anthropic.com