Put reminders on the plugin surface, with a service each to create, change, move, complete and reopen them (#331) #1080
No reviewers
Labels
No labels
accessibility
authentication
breaking change
bug
documentation
enhancement
interface
internationalisation
observability
performance
security
tier
1
tier
2
tier
3
tier/4
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
Postulo/postulo!1080
Loading…
Reference in a new issue
No description provided.
Delete branch "331-reminder-services"
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?
A plugin keeping a CalDAV task list in step (postulo-dav#12) could not reach
Reminder,and Postulo itself made, ticked and unticked reminders by hand in a dozen places.
create_reminder,change_reminder,postpone_reminder(now with an actor),complete_reminderandreopen_reminderinapplications.services, each taking anactor. Another person's application is a ValueError, the summary is cut to 250characters, a date means nine in the morning in the owner's zone (outside any request
too),
complete_reminderrefuses a moment in the future, and reopening does notannounce the reminder again.
add_remindermakes a new entry throughcreate_reminder(andcomplete_reminderwhenit arrives done): the uid-keyed, source-guarded way in is layered over the one general
act, not a second writer beside it. It takes an optional
actor, which the calendarimport now passes.
change and complete, the interview, appointment and offer paths (the offer path no longer
clears
done_atby hand). The importer and the demo seed stay as they were; a testguards the rest of the tree.
Reminder.actornames who last touched it when it was not the person,drawn beside it as "via ..." on the calendar and an application's page, on the API's
ReminderOut, and in the archive (format 77).POST /api/v1/reminders/{id}/reopen.Reminderand the five services are onapi.__all__and_ELSEWHERE;change_statusstays off.
Closes #331
Notes for review
create_reminder,change_reminder,postpone_reminder,complete_reminderandreopen_reminder. Each takes anactor, and they are on the plugin surface withReminder.add_reminder(#887) is now a thin caller ofcreate_reminder.Reminder.actorcolumn, shown as "via …";change_statusstays off the surface;POST /api/v1/reminders/{id}/reopen);applications 0021_reminder_actor. #878 (PR #1061) also takes 77, so whichever lands second takes 78.🤖 Generated with Claude Code
A plugin keeping a CalDAV task list in step (postulo-dav#12) could not reach `Reminder`, and Postulo itself made, ticked and unticked reminders by hand in a dozen places. - `create_reminder`, `change_reminder`, `postpone_reminder` (now with an actor), `complete_reminder` and `reopen_reminder` in `applications.services`, each taking an `actor`. Another person's application is a ValueError, the summary is cut to 250 characters, a date means nine in the morning in the owner's zone (outside any request too), `complete_reminder` refuses a moment in the future, and reopening does not announce the reminder again. - `add_reminder` makes a new entry through `create_reminder` (and `complete_reminder` when it arrives done): the uid-keyed, source-guarded way in is layered over the one general act, not a second writer beside it. It takes an optional `actor`, which the calendar import now passes. - Every caller moved onto them: the create and edit forms, Done, Snooze, the API's add, change and complete, the interview, appointment and offer paths (the offer path no longer clears `done_at` by hand). The importer and the demo seed stay as they were; a test guards the rest of the tree. - Decision 1 (a): `Reminder.actor` names who last touched it when it was not the person, drawn beside it as "via ..." on the calendar and an application's page, on the API's `ReminderOut`, and in the archive (format 77). - Decision 3 (b): *Not done* in a done reminder's menu, and `POST /api/v1/reminders/{id}/reopen`. - `Reminder` and the five services are on `api.__all__` and `_ELSEWHERE`; `change_status` stays off. Closes #331 Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>5fba2e3bea8b81d561848b81d56184faa9ef68c6faa9ef68c65a66070a9c