Reminders never fire for a calendar hidden at system level, and nothing in
the app hints at it: the provider only schedules reminder alarms for
Calendars.VISIBLE=1, while Calendula filters with its own disabledCalendarIds
pref and parses isVisibleInSystem without ever using it.
Captures the decision to collapse to one model (the Settings → Calendars
toggle becomes Calendars.VISIBLE, the filter sheet stays app-local), the
verified provider behaviour behind it — including that VISIBLE is device-local
and that a non-`_id=` selection makes the provider skip its own
checkNextAlarm() reschedule — the narrowed migration, and what gets deleted.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
A FREQ=YEARLY event has one static title, so a per-occurrence age is impossible
without heavy per-year exception rows. Replace {age} with {year} — the birth
year (or an anniversary's start year) — which is static and correct on every
occurrence, and shows everywhere (widgets, other apps, exports).
- renderSpecialDateTitle substitutes {year}; drop the age snapshot computation
and the sync `today` parameter.
- Default templates become "{name}'s birthday ({year})" / "…anniversary ({year})".
- Rename the setting to "Show year" (prefs specialDatesShowYear) and remove the
now-unneeded {age} snapshot disclaimer in the template editor.
- Update tests, CHANGELOG and the design-doc note.
lint + unit tests + assembleDebug green.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
A FREQ=YEARLY event has one static title, so {age} is only a sync-time snapshot
and can look wrong on far-future occurrences. Keep it out of the default
templates ({name}'s birthday / anniversary), and when a user does add {age} in
the title-format editor, show a short disclaimer about the snapshot behaviour.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Records the UID_2445 (vs SYNC_DATA1) identity decision, the sync-time age
snapshot, and the seeded reminder default; checks off the #14/#15 task lists.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Capture the full design for surfacing contact birthdays/anniversaries/custom
dates as auto-updating local calendars (Codeberg #15), plus the #14
prerequisite (per-calendar multiple default reminders). One local calendar per
type to reuse existing per-calendar color/visibility/reminder infra; one-way
mirror with field-level managed events keyed on contact LOOKUP_KEY.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>