| Age | Commit message (Expand) | Author | Files | Lines |
| 6 days | fix: drop orphaned overrides when a series stops, plus review minors | Danilo M. | 4 | -0/+120 |
| 6 days | docs: document the calendar, translate it, file its follow-ups | Danilo M. | 1 | -0/+20 |
| 6 days | feat: open the calendar from the View menu and the toolbar | Danilo M. | 1 | -0/+26 |
| 6 days | fix: add the toolbar New button, sync the month controls, and let a stale sav... | Danilo M. | 1 | -0/+49 |
| 6 days | feat: the calendar window, with undo and a stale-safe save | Danilo M. | 2 | -0/+223 |
| 6 days | feat: lay out the calendar's month grid without a painter | Danilo M. | 2 | -0/+82 |
| 6 days | test: a write during a run queues one more calendar sync | Danilo M. | 1 | -3/+34 |
| 6 days | feat: debounce the calendar sync command after writes | Danilo M. | 2 | -0/+95 |
| 6 days | test: pin the calendar config's reported error paths | Danilo M. | 1 | -0/+50 |
| 6 days | feat: read the calendar's config keys | Danilo M. | 1 | -0/+52 |
| 6 days | feat: write calendar files atomically, refusing stale ones | Danilo M. | 2 | -0/+125 |
| 6 days | test: an occurrence delete keeps the exdates already there | Danilo M. | 1 | -0/+19 |
| 6 days | feat: edit or delete one occurrence of a repeating event | Danilo M. | 1 | -0/+74 |
| 6 days | fix: compare sameMeaning overrides by recurrence id and check the uid | Danilo M. | 1 | -0/+38 |
| 6 days | feat: edit a calendar event in place and write new ones | Danilo M. | 1 | -0/+152 |
| 6 days | feat: an event is editable only when the user organises it | Danilo M. | 1 | -0/+32 |
| 6 days | fix: expand a long dense series completely and flag overrides' own all-day | Danilo M. | 1 | -0/+33 |
| 6 days | feat: expand calendar occurrences in each event's own zone | Danilo M. | 1 | -0/+137 |
| 6 days | fix: an empty RRULE means does-not-repeat, not a custom rule | Danilo M. | 1 | -0/+13 |
| 6 days | feat: model the calendar's repeat control as RRULE text | Danilo M. | 1 | -0/+110 |
| 6 days | feat: read every time form and load a calendar vdir | Danilo M. | 1 | -0/+123 |
| 6 days | feat: parse one calendar event with libical (item 206) | Danilo M. | 3 | -0/+107 |
| 12 days | fix: sanitise untrusted contact names on insertion | Danilo M. | 1 | -7/+76 |
| 12 days | feat: complete contacts in the query bar | Danilo M. | 1 | -1/+119 |
| 12 days | feat: complete contacts in the composer recipients | Danilo M. | 1 | -0/+256 |
| 12 days | feat: add the contacts_dir config key | Danilo M. | 1 | -0/+100 |
| 12 days | feat: add ContactStore, the vCard address-book parse | Danilo M. | 11 | -0/+416 |
| 2026-09-14 | fix: keep the message bar populated on a spam reply | Danilo M. | 1 | -1/+49 |
| 2026-09-14 | fix: the Not spam review findings | Danilo M. | 1 | -1/+123 |
| 2026-09-14 | feat: a Not spam action | Danilo M. | 1 | -0/+336 |
| 2026-09-14 | fix: gate spam like delete, and keep one origin in the model | Danilo M. | 1 | -2/+191 |
| 2026-09-14 | feat: find stranded spam mail | Danilo M. | 1 | -0/+55 |
| 2026-09-14 | feat: empty spam moves mail to the trash, per account | Danilo M. | 1 | -0/+163 |
| 2026-09-14 | feat: spam on the message bar, with a bug icon and junk fallback | Danilo M. | 1 | -0/+20 |
| 2026-09-13 | feat: mark spam moves mail to the account's spam folder | Danilo M. | 2 | -49/+318 |
| 2026-09-13 | refactor: rename the origin tag to moved-from: with overwrite semantics | Danilo M. | 3 | -41/+108 |
| 2026-09-13 | feat(config): a threaded, path-based spam filter | Danilo M. | 2 | -3/+35 |
| 2026-09-13 | feat(config): per-account spam folder and queries | Danilo M. | 1 | -11/+73 |
| 2026-09-08 | feat: make Sync follow the account being looked at | Danilo M. | 1 | -0/+196 |
| 2026-09-07 | fix: refresh the current query when the index changes | Danilo M. | 1 | -0/+82 |
| 2026-09-06 | fix: index the sent copy so it appears in the Sent view at once | Danilo M. | 1 | -0/+54 |
| 2026-09-06 | fix: keep one Message-ID across a draft's revisions | Danilo M. | 3 | -0/+184 |
| 2026-09-06 | fix: give the Sent and Drafts views one row per message, in date order | Danilo M. | 1 | -13/+173 |
| 2026-08-29 | feat: put Star and Archive on the message bar too | Danilo M. | 1 | -9/+38 |
| 2026-08-29 | feat: give the trash its own actions on the message bar | Danilo M. | 1 | -0/+122 |
| 2026-08-29 | fix: retry a sync that was skipped because another held the lock | Danilo M. | 1 | -0/+44 |
| 2026-08-29 | feat: have the sync script report what it did | Danilo M. | 3 | -1/+395 |
| 2026-08-29 | fix: say an edit is waiting for the sync instead of claiming it landed | Danilo M. | 1 | -0/+65 |
| 2026-08-29 | fix: refresh the conversation dashboard after a write | Danilo M. | 1 | -0/+78 |
| 2026-08-29 | fix: judge a conversation's trash state on all of its messages | Danilo M. | 2 | -0/+153 |