Commit Graph

12 Commits

Author SHA1 Message Date
a5e15fa84f feat(event-predicates): warn on unhandled recurrence overrides and multiple masters
- Add `warn_unhandled_recurring` collector that emits a warning when
  `RECURRENCE-ID` overrides are present but not yet handled, emitting
  the master event as-is
- Register `warn_unhandled_recurring` in `all_collectors`
- Warn when more than one master event (no `RECURRENCE-ID`) is found for
  a UID in `separate_master_and_recurrence`, using only the first
2026-05-17 19:19:51 +02:00
a1f31042e0 feat(remind): escape special characters in MSG clause body 2026-05-17 13:25:19 +02:00
e9f4773312 feat: support EXDATE, DATE+DURATION, and weekly day inference
- Handle DATE+DURATION all-day events by computing end_date from
  duration
- Add PUSH/POP-OMIT-CONTEXT and OMIT/SKIP support for EXDATE in
  daily/weekly rendering
- Adjust UNTIL date when local time of UNTIL timestamp precedes event
  start time
- Default weekly RRULE to event's own weekday when BYDAY list is empty
- Remove EXDATE check from complex-recurrence guard (handled via OMIT
  now)
- Add timedesc_wd_to_ical weekday conversion utility
- Remove verbose EXDATE debug logging
- Fix minor newline in file processing log message
2026-05-17 12:58:08 +02:00
0bd014c1fe fix: sort reminders by date in descending order before output 2026-05-17 00:43:25 +02:00
5a584a8440 feat(remind): add calendar source to rendered reminders 2026-05-17 00:33:02 +02:00
794c855cec feat(recurrence): add daily recurrence support
- Add `simple_daily` type and `daily` field to `rem`
- Implement `render_daily`, `add_interval_daily`, and `add_until_daily`
- Extend `simple_recurrence` collector to handle `FREQ=DAILY` alongside
  `FREQ=WEEKLY`
- Remove dead `expand_recurrence` collector
- Mark P06 pattern as implemented ()
2026-05-17 00:25:01 +02:00
8777bd3932 refactor(remind): extract buffer primitives for remind rendering 2026-05-16 22:24:06 +02:00
4e6ba30f2d feat: add source file tracking to rem type
Add a `source` field to `Remind.rem` to track the originating iCalendar
filename (basename without extension). Thread the basename through
`remind_of_event` so each reminder records which file it came from.
2026-05-16 22:14:27 +02:00
9445eb81e8 refactor: remove remind_sync wrapper library and inline utilities
The `remind_sync` library was acting as a thin re-export layer. This
commit removes it entirely and moves the only non-trivial utility
(`show_error` for `Timedesc.Date.Ymd.error`) directly into
`bin/utils.ml`. Dead `[@@deriving show]` annotations on `rem`,
`week_first_day`, and `error` types are also removed.
2026-05-16 22:06:54 +02:00
21215a2248 feat: implement simple weekly recurrence rendering
- Add `simple_weekly` type and `weekly` field to `rem` record
- Add `exdate` field to `rem` for excluded dates
- Add `collect_exdates` collector to pipeline
- implement weekly `RRULE` handling with `BYDAY`, `INTERVAL`,
  `COUNT`/`UNTIL`
- Add `render_weekly` to emit one `REM` per weekday with `UNTIL`/`*N`
- Replace `timedesc_of_date_or_datetime` with
  `timedesc_of_utc_or_timestamp_local` in utils
- Refactor `get_exdates`/`get_rdates` to separate dates, datetimes and
  periods; add debug logging per UID
- Wrap reminder output in try/catch in main; drop trailing newline
  duplication
- Mark implemented predicates (P00–P05, P09, P12, P14) with ;
  remove P18–P20 (ignored/deferred)
2026-05-16 21:56:14 +02:00
0b9de82c3a feat: support multiple input files
- Accept multiple positional arguments instead of a single required file
- Extract `read_file` helper to separate file reading from parsing
- Collect all valid reminders across files before printing
- Handle per-file errors gracefully without aborting the whole run
2026-05-15 23:12:51 +02:00
cace23d3f1 Initial commit 2025-09-01 00:00:00 +02:00