feat: General and Reminder event types (#109, ADR-0034) #157

Merged
nalum merged 4 commits from feat/event-types into main 2026-08-18 16:44:53 +00:00
Owner

Closes #109. PR 19 of the #137 stack, based on #156. ADR first, then each surface:

ADR-0034 — appointments were carrying every generic plan because the enum had nothing plainer. Two additive, wire-compatible values: EVENT_TYPE_GENERAL (5) — the plain kind, now the default for new events on every surface — and EVENT_TYPE_REMINDER (6) for entries whose whole purpose is the nudge. No server behavior hangs on either value (recorded as deliberate); old rows keep their stored kind; old clients fall back to their existing "Event"/pin rendering.

  • Web — EVENT_META gains Event (calendar glyph) and Reminder (bell); the create picker lists all six with General preselected.
  • Android — the same picker rows and glyphs, word for word under the shared message ids; General is the create default.
  • TUI + MCP — the type vocabularies learn event and reminder; a typeless MCP add_event now mints a General event, and the enum→name mapping became a switch so the general input alias can never leak back out.

Live-verified: the server accepts and stores EVENT_TYPE_REMINDER; the web create sheet shows "Event | Reminder | Appointment | Birthday | Deadline | Holiday" with Event preselected; the TUI's calendar renders "Bins out · reminder" through the shared event line. make check green; test event deleted.

🤖 Generated with Claude Code

Closes #109. PR 19 of the #137 stack, based on #156. ADR first, then each surface: **ADR-0034** — appointments were carrying every generic plan because the enum had nothing plainer. Two additive, wire-compatible values: `EVENT_TYPE_GENERAL` (5) — the plain kind, now the **default for new events on every surface** — and `EVENT_TYPE_REMINDER` (6) for entries whose whole purpose is the nudge. No server behavior hangs on either value (recorded as deliberate); old rows keep their stored kind; old clients fall back to their existing "Event"/pin rendering. - **Web** — `EVENT_META` gains Event (calendar glyph) and Reminder (bell); the create picker lists all six with General preselected. - **Android** — the same picker rows and glyphs, word for word under the shared message ids; General is the create default. - **TUI + MCP** — the type vocabularies learn `event` and `reminder`; a typeless MCP `add_event` now mints a General event, and the enum→name mapping became a switch so the `general` input alias can never leak back out. Live-verified: the server accepts and stores `EVENT_TYPE_REMINDER`; the web create sheet shows "Event | Reminder | Appointment | Birthday | Deadline | Holiday" with **Event** preselected; the TUI's calendar renders "Bins out · reminder" through the shared event line. `make check` green; test event deleted. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
Appointments were carrying every generic plan because the enum had
nothing plainer (#109). ADR-0034 adds EVENT_TYPE_GENERAL — the
default kind for new events on every surface — and
EVENT_TYPE_REMINDER for entries whose whole purpose is the nudge.
Additive enum values, wire-compatible; existing rows keep their
stored kind, and no server behavior hangs on either new value.
The picker gains the two ADR-0034 kinds — General (the calendar
glyph, the plain word Event) now the default for new events, and
Reminder (the bell) — so appointments stop carrying every plan.
The picker gains the two ADR-0034 kinds, General now the default for
new events, and the calendar's glyphs follow — the web's icons, word
for word.
feat(tui,mcp): General and Reminder event kinds
Some checks failed
check / commits (pull_request) Successful in 7s
check / web (pull_request) Successful in 2m5s
check / go (pull_request) Successful in 2m37s
check / report (pull_request) Successful in 3s
android / build (pull_request) Successful in 6m13s
android / report (pull_request) Successful in 4s
check / commits (push) Has been cancelled
check / go (push) Has been cancelled
check / report (push) Has been cancelled
check / web (push) Has been cancelled
tag / tag (push) Has been cancelled
android / report (push) Has been cancelled
android / build (push) Has been cancelled
2f520164e8
The TUI's type vocabulary and the MCP add_event kinds learn the two
ADR-0034 values; a typeless MCP add now mints a General event instead
of an appointment.

Test report

Suite Tests Result Skipped
Unit 1370 ✅ pass 1
Integration 87 ✅ pass —

Coverage: 27.2%

Updated by the check workflow · commit 2f520164e8

<!-- ci-test-report --> ## Test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit | 1370 | ✅ pass | 1 | | Integration | 87 | ✅ pass | — | **Coverage:** 27.2% <sub>Updated by the check workflow · commit 2f520164e88e809d2f98e07031b0dc0fb0afff2a</sub>

Android test report

Suite Tests Result Skipped
Unit (debug) 31 ✅ pass 0

Coverage: 2.4% of lines

Updated by the android workflow · commit 2f520164e8

<!-- android-test-report --> ## Android test report | Suite | Tests | Result | Skipped | | --- | --: | --- | --: | | Unit (debug) | 31 | ✅ pass | 0 | **Coverage:** 2.4% of lines <sub>Updated by the android workflow · commit 2f520164e88e809d2f98e07031b0dc0fb0afff2a</sub>
nalum changed target branch from feat/subtask-todo to main 2026-08-18 16:44:46 +00:00
nalum merged commit 2f520164e8 into main 2026-08-18 16:44:53 +00:00
nalum deleted branch feat/event-types 2026-08-18 16:44:53 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
2 participants
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
eagraiclainne/app!157
No description provided.