feat(reminder): support urgent reminders (iOS 26)#351
Merged
Conversation
Add --urgent / --no-urgent flags to `reminder add` and `reminder update`, and surface `isUrgent` on `reminder get` / `reminder list` output as a red [urgent] badge. Closes #350. `reminder update` now also accepts --urgent / --no-urgent on its own (without --before / --at) so users can toggle urgency without touching the schedule.
doistbot
reviewed
May 19, 2026
Member
doistbot
left a comment
There was a problem hiding this comment.
This PR provides a solid foundation for urgent reminders by introducing intuitive CLI flags and clear visual badging. The implementation is well-aligned with the new SDK, though a few edge cases need attention to ensure full correctness. Specifically, there are serialization issues that can corrupt relative reminders during urgency-only updates, a field whitelist preventing the new urgency property from appearing in JSON output, and a few opportunities to improve type reuse, consolidate badge formatting, support --json on the update command, and expand test coverage.
- updateReminder no longer mis-tags relative reminders as absolute on urgency-only patches — fetches the existing reminder to preserve its `type` when neither --before nor --at is supplied. - isUrgent added to REMINDER_ESSENTIAL_FIELDS so default --json output surfaces it without --full. - reminder update gains --json, emitting the refreshed reminder. - formatUrgentBadge now owns the leading space; add/get/list drop the duplicated conditional. TimeReminder type extracted to helpers and reused in get + list. - Combined --before/--urgent confirmation now includes the [urgent] badge instead of silently dropping it. - Extra tests: reminder get urgent badge, JSON isUrgent assertion, combined-confirmation, update --json.
doist-release-bot Bot
added a commit
that referenced
this pull request
May 19, 2026
## [1.67.0](v1.66.0...v1.67.0) (2026-05-19) ### Features * **reminder:** support urgent reminders (iOS 26) ([#351](#351)) ([9ca0da5](9ca0da5))
Contributor
|
🎉 This PR is included in version 1.67.0 🎉 The release is available on: Your semantic-release bot 📦🚀 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #350.
Summary
reminder add/reminder updatenow accept--urgent/--no-urgent, threaded throughis_urgenton thereminder_add/reminder_updatesync commands.reminder get/reminder listplain output show a red[urgent]badge after[time];--jsonincludesisUrgent.reminder updateno longer requires--before/--atwhen only toggling urgency —td reminder update <id> --no-urgentis valid on its own.The SDK (
@doist/todoist-sdk10.2.0, already onmain) typesisUrgenton absolute + relative reminder schemas. Location reminders are out of scope — the SDK schema confirms the field doesn't exist there.Test plan
npm run type-checknpm test(1607 passing, +3 new)npm run checknpm run sync:skilltd reminder add <task> --at "2026-06-01 09:00" --urgent --json→ JSON showsisUrgent: truetd reminder list --task <task>→ row shows[urgent]badgetd reminder update <id> --no-urgent(no time flags) → succeeds; subsequentgetno longer shows badge