Skip to content

TODO: a reminder at the start, and after it (221, 222) - #119

Open
Timtam wants to merge 5 commits into
mainfrom
docs/todo-reminder-at-start
Open

Timtam wants to merge 5 commits into
mainfrom
docs/todo-reminder-at-start

Conversation

@Timtam

@Timtam Timtam commented Oct 6, 2026 •

Copy link
Copy Markdown
Owner

Records Toni's question of 2026-10-06 about reminders exactly at the event start, and the decisions it led to. Docs only; nothing is implemented yet.

What the research found

  • Every calendar provider allows a reminder at the start. RFC 5545 has TRIGGER:PT0S, and iPhone Calendar calls it "Zum Ereigniszeitpunkt". Google takes 0 to 40320 minutes. Exchange and Graph keep the on switch separate, so 0 does not mean off. For tasks, Todoist and Vikunja offer it as their own choice. Google Tasks notifies at the due time by itself but has no settable reminder and no API for one. To Do has only a fixed time.
  • Aperio already handles minutes_before: 0 almost everywhere. The core, both schedulers and every calendar adapter that carries reminders accept it; the built-in birthday reminder uses it. The device calendar carries no reminders at all.
  • Only the reminder editor refuses it. On desktop and phone alike, a typed 0 becomes 1 and a unit change clamps to 1. On the desktop, the field also has min={1}. The phone copied this from the desktop, and no reason is recorded anywhere.

TODO B7

  • 221: a reminder at the start gets its own kind in the type picker:

    • "Zu Beginn" for events;
    • "Bei Fälligkeit" for tasks;
    • "Am Tag selbst" for all-day events.

    It is stored as Relative 0. Desktop and phone ship it together.

  • Saving on the desktop. A 0 that came from a provider most likely cannot be saved on the desktop today, because of native validation against min={1}. 221 fixes it.

  • 222: reminders after the start are shown as they are, not as "0 Minuten vor Beginn". They can be created where they arrive: CalDAV calendars, local calendars, and reminders kept only in Aperio. A manifest capability gates this, not the adapter's name.

  • Exchange tasks. A reminder without its own time is read as 0, and every save switches it off on the server. On the desktop this includes saves that skip the editor, such as checking a task off.

  • Editors. They offer reminders that are then lost:

    • External task lists drop them.
    • Google, Exchange and Microsoft 365 events drop a fixed time, and Exchange and Microsoft 365 keep only the first one.
    • Reminders on the phone's device calendars are lost.
    • The phone never fires "Beim nächsten App-Start" at all.
  • Notifications guide. It describes snooze, an in-app notice, a live region and a notifications settings page, none of which exists. Its start page and the phone guide promise snooze too. It also says Aperio only reads the phone's calendar. DESIGN promises snooze and Open (§14.3, §14.5, §14.6), and global default reminders (§14.1). None of these were built.

First check (d00ffbb)

Three checkers covered the editors, the core and adapters, and the providers and docs. One skeptic checked each finding. 13 findings were confirmed and fixed; 6 were refuted. The main corrections:

  • The device calendar carries no reminders at all, and the scheduler skips device accounts.
  • iPhone Calendar's German label is „Zum Ereigniszeitpunkt“.
  • min={1} is set only on the desktop. On the phone, an untouched 0 survives.
  • A blocked save moves focus to the amount field.
  • A reminder after the start also blocks the desktop save.
  • Exchange tasks lose their reminder on every desktop save that skips the editor.
  • The event editor follows the "offer only what arrives" rule only for app start.
  • The guide also promises an in-app notice and a live region.

Second check (ba1861f)

Six findings were confirmed and fixed; seven were refuted.

  • Paths that reach the editor. Duplicate and move/copy never open the editor; they carry the 0 along.
  • Exchange task saves. Exchange task lists have no sections, so a section change is not a way to save one. The silent deadline pin and a move to another list do switch the reminder off.
  • Google Tasks notifies at the due time by itself, but its API has no reminder field.
  • The guide. Its list was incomplete:
    • snooze on the start page and in the phone guide;
    • a switch for system notifications;
    • the claim that Aperio only reads the phone's calendar.

Third check (c0e4d0c)

Four findings were confirmed and fixed; four were refuted.

  • Google drops an attached fixed-time reminder, like Exchange and Microsoft 365. If nothing is left, the calendar's own defaults apply.
  • The phone never fires "Beim nächsten App-Start", yet offers it for local calendars and every task list. The guide's sentence on it holds only on the desktop.
  • After-start reminders. Only a change of amount or unit turns one (or a 0) into a reminder before the start. Sound and placement leave it as it is.

Fourth check (43cf34b)

Six findings (three pairs) were confirmed and fixed; five were refuted.

  • Re-picking on the phone. Picking the already selected type or unit again rewrites a 0 or an after-start reminder, because SelectFieldButton does not compare values.
  • App start. It rings only for local calendars and lists, and only on a desktop. In an external task list it rings nowhere.
  • Task defaults. Tasks have global day-start reminders for deadlines, but no default reminder rows.

Docs

TODO only. DESIGN and the guide change with the feature itself; the TODO item names them.

🤖 Generated with Claude Code

Timtam and others added 5 commits October 6, 2026 14:25
Toni asked whether a reminder exactly at the start is meant to exist. It
is: every provider allows it, and Aperio's core, both schedulers and every
calendar adapter already handle minutes_before 0. Only the reminder editor
on desktop and phone refuses it. Recorded under B7 with the decisions: an
own kind "Zu Beginn" / "Bei Fälligkeit" / "Am Tag selbst" (221), and
reminders after the start shown truly and creatable where they arrive
(222). Four findings from the research go with it: the desktop likely
cannot save a 0 that came from a provider, Exchange tasks switch a reminder
off on save, the task editors offer reminders external lists drop, and the
notifications guide describes snooze and a settings page that do not exist.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… editors offer and what the guide promises

The device calendar carries no reminders and the scheduler skips device
accounts, so it is neither among the adapters that handle 0 nor among the
providers that only know minutes before. iPhone Calendar says "Zum
Ereigniszeitpunkt". Only the desktop field has min={1}; on the phone an
untouched 0 survives. A blocked save moves focus to the amount field. A
reminder after the start blocks the desktop save too. Exchange tasks lose
their reminder on every desktop save that skips the editor. The event
editor follows the offer-only-what-arrives rule only for app start. The
guide also promises an in-app notice and a live region; DESIGN promises
snooze and Open in §14.3, §14.5 and §14.6.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ave paths, Google Tasks, and the rest of the guide

Duplicate and move/copy never open the editor; they carry the 0 along.
Exchange task lists have no sections; the silent deadline pin and a move
to another list switch the reminder off too. Google Tasks notifies at the
due time by itself but has no settable reminder and no API for one. The
guide also promises snooze on its start page and in the phone guide, a
switch for system notifications, and that the phone calendar is only read.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ires app start, and which edits flip an after-start reminder

Google's adapter drops an attached fixed-time reminder like Exchange and
Microsoft 365 do. The phone never fires "Beim nächsten App-Start", yet
offers it for local calendars and every task list; the guide's sentence on
it holds only on the desktop. Only a change of amount or unit turns an
after-start reminder (or a 0) into one before the start.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… for local entries, and the task defaults that exist

On the phone, picking the already selected type or unit again rewrites a 0
or an after-start reminder (SelectFieldButton does not compare). An app
start reminder rings only for local calendars and lists, and only on a
desktop. Tasks have global day-start reminders for deadlines, but no
default reminder rows.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant