Mirror the iOS Contacts birthday importer: read the address book's birthday
events and reconcile them into the user's birthday calendar, scoped to this
device via external_uid 'contact:<deviceId>:<contactId>' (add/update/delete),
then report the device.
- READ_CONTACTS permission + ContactsReader (Event TYPE_BIRTHDAY, handles
year/no-year date formats)
- API: GET /birthdays, POST /birthdays/sync-report; local-event create/update
now carry external_uid (+ update carries rrule/birth_year)
- CalendarViewModel.syncContactBirthdays reconciles like iOS; device-local
enable flag + stable device id in SettingsStore
- birthday dialog gains an 'Import from contacts' action (requests permission);
auto-syncs on launch when enabled
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>