ADR-0034: General and Reminder event types
Metadata
- Status: Accepted
- Date: 2026-08-18
- Deciders: Eagraí Clainne Team
- Related: ADR-0032 (event series semantics), issue #109
Context
EventType offered appointment, birthday, deadline and holiday. Nothing
fit a plain family plan — "swimming", "dinner at Nana's" — so
appointment became the default and carried everything, which it does not
mean. And nothing expressed an entry whose whole purpose is the nudge:
"put the bins out tonight" is not an appointment, a deadline or a job.
Decision
Two additive enum values:
EVENT_TYPE_GENERAL(5) — a plain event. The default kind for new events on every surface (web, Android, TUI, MCP); appointment remains for actual appointments.EVENT_TYPE_REMINDER(6) — an entry that exists to remind. It behaves like any event (times, members, repeat, the reminder_lead field), wearing the bell; the type is semantic, not behavioral.
Additive enum values are wire-compatible: old clients render unknown kinds through their existing fallback (the web's "Event"/pin), old rows keep their stored kind, and no server code branches on either new value. Type metadata (icon + label) extends on each surface: General wears the calendar glyph and the plain word "Event", Reminder wears the bell.
Consequences
- New events default to General everywhere; the misuse of appointment as "everything" ends without touching stored data.
- MCP's
add_eventacceptsgeneralandreminderand defaults to general when no type is given. - A future release may hang behavior on REMINDER (say, a louder default reminder_lead); this ADR deliberately does not.
Alternatives considered
- Renaming APPOINTMENT to EVENT: a semantic break for stored rows and every translation; rejected.
- A free-text kind: loses the icon/label pairing and the fixed vocabulary translations rely on.