App reference

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_event accepts general and reminder and 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.