- Add `--verbose`/`-v` flag; gate all diagnostic stderr output behind it
- Add `--no-uuid`, `--no-source`, `--no-location`, `--no-description`,
`--no-conference-url` flags to suppress individual INFO lines
- Add `--sort` option (`asc`, `desc`, `original`) replacing hardcoded
descending sort
- Add `--source` option to override calendar name (single-file only)
- Introduce `Config` module with global `ref` flags set at startup from
CLI args
- Add `Utils.warn` helper that writes to stderr only when
`Config.verbose` is set
- Normalise all diagnostic messages to a consistent format (`Warning:
... (UID: ...)`)
- Remove `debug_print_of_recurrence_and_skip`; inline skip at each call
site
- Fix `add_common_part` to always emit a trailing `\\\n `
continuation line
Remove debug logging from `collect_triggers` and
`separate_master_and_recurrence`, and add full alarm rendering support:
convert `Timedesc.Span.t` triggers to `++n`/`WARN`/`+n`/`SCHED` remind
syntax for both all-day and timed events, with dynamic `FSET` generation
for multiple triggers and annotated `MSG` bodies showing advance notice.
- Add `triggers` field to `Remind.rem` type to store alarm trigger
offsets as `Timedesc.Span.t list`
- Implement `get_triggers` in `Utils` to extract duration-based triggers
from audio/display alarms, ignoring email and NONE alarms
- Add `collect_triggers` collector that populates the triggers field and
logs them to stderr for debugging
- Register `collect_triggers` in the collector pipeline
- Remove leftover debug log for processed filenames in `main.ml`
- Remove stale commented-out RRULE dataset and type documentation from
`simple_recurrence`
Add a `tz` field to `rem` to carry the event's DTSTART timezone, and
introduce `timedesc_of_utc_or_timestamp_tz` to convert UNTIL timestamps
in that timezone instead of the process locale. This makes UNTIL
comparisons locale-independent for events with a known TZID.
- Add `monthly_pattern`, `simple_monthly` types and `monthly` field to
`rem`
- Implement `render_monthly` and `add_until_monthly` in `remind.ml`
- Handle `BYMONTHDAY` (P07) and nth-weekday `BYDAY` (P08) patterns in
`eventPredicates.ml`
- Add `add_months` utility for date arithmetic
- Mark P07 and P08 as implemented in documentation
- Add `overrides` field to `rem` type to hold single-event REMs from
non-cancelled overrides
- Add `is_cancelled`, `build_override_rem`, and `collect_overrides` to
process RECURRENCE-ID override events
- Replace `warn_unhandled_recurring` with `collect_overrides` in the
collector pipeline
- Fix `separate_master_and_recurrence` partition logic (swapped
`Left`/`Right`)
- Render override REMs appended to the master REM in `string_of_rem`
- 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
- 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
- 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 (✅)
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.
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.
- 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)
Add `yearly_simple_date` collector that detects simple yearly
recurrences (`RRULE:FREQ=YEARLY` with no extra constraints) and stores
the month/day pair in a new `simple_yearly` field on `Remind.rem`.
When rendering, events with `simple_yearly` set are emitted as
`REM <Month> <Day> MSG <summary>` instead of the full dated form.
Add `month_of_int` and `string_of_month` helpers in `Utils`, and update
the RRULE dataset comment with UIDs for easier debugging.
- Simplify `.ocamlformat` to use `default` profile with fewer overrides
- Extract shared types and utilities into a `remind_sync` library
(`icalendar_augmented`, `ptime_augmented`, `timedesc_augmented`,
`result_augmented`, `utf8`)
- Replace `eventTransformer.ml` and the predicate system in
`eventPredicates.ml` with a sequential collector pipeline
(`collect_uuid`, `collect_summary`, `collect_start_end_duration`,
etc.)
- Simplify `Remind.rem` to a flat record with `Timedesc` date/time
fields and replace `rem_to_string` with a leaner `string_of_rem`
- Add `separate_master_and_recurrence` and `get_recurrence_id` helpers
to `utils.ml`
- Wire `main.ml` to call `EventPredicates.remind_of_event` per UID group
and print results directly
- Remove `eventTransformer` module from `bin/dune` and enable the
`remind_sync` library dependency
- Change predicate return type from `bool` to `features list option` to
carry extracted event data (Summary, Day_start, Multi_day) alongside
match results
- Add `features` type with Generic_feature_presence, Summary, Day_start,
Multi_day variants
- Add P00 (has_summary) and P11 (override_events) predicates
- Remove large commented-out icalendar/ptime type definitions
- Refactor main.ml to group events by UID using a Map
- Add get_y_m_d_from_timedesc helper to Utils
- Add project scaffolding (dune, dune-project, opam, .ocamlformat)
- Implement basic parsing and handling of iCalendar events
- Add event predicates for common event types (all-day, timed,
recurrence, exceptions)
- Add transformation logic to map iCalendar events to Remind format
(stub implementation)
- Provide utilities for extracting event details and converting
dates/times
- Set up executable entrypoint and command-line interface using Cmdliner
- Include Remind event type definitions and helpers