From a838e021a1bdf4c21bbf65fa4b80518dda48b2df Mon Sep 17 00:00:00 2001 From: Tomas Kracmar Date: Fri, 13 Mar 2026 09:12:19 +0100 Subject: [PATCH] Docs: refresh README and roadmap --- README.md | 8 ++++++-- ROADMAP.md | 5 ++++- 2 files changed, 10 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 62b842a..1a5683f 100644 --- a/README.md +++ b/README.md @@ -9,13 +9,16 @@ BusyMirror mirrors meetings between your calendars so your availability stays co - Private (hide details): mirrors placeholders with prefix + placeholder title (e.g., "🪞 Busy"). - Mark Private: mirrors prefix + real title, but marks events Private on supported servers (best-effort). - DRY-RUN mode: see what would be created/updated/deleted without writing. +- Activity Log in the app plus persistent file logging on disk. +- In-app scheduling: install or remove a `launchd` LaunchAgent from the `Scheduled runs` section. - Overlap modes: `allow`, `skipCovered`, `fillGaps`. - Merge adjacent events with a configurable gap. - Time window controls (days back/forward) and Work Hours filter. - Accepted-only filter (mirror your accepted meetings only). - Cleanup of placeholders, including auto-delete of mirrors whose source disappeared. +- Refresh Calendars prunes stale saved calendars and routes when calendars are removed from the system. - Prefix-based tagging and loop guards to prevent re-mirroring mirrors. -- Settings: autosave/restore, Import/Export JSON. +- Settings: autosave/restore, Import/Export JSON, saved routes for scheduled/headless runs. ## Why Use one calendar’s confirmed meetings to block time in other calendars (e.g., corporate iPad vs. personal devices). @@ -48,6 +51,7 @@ See `CHANGELOG.md` for notable changes. ## Logs - BusyMirror now writes a persistent log file to `~/Library/Logs/BusyMirror/BusyMirror.log`. - When the file grows large, the previous file is rotated to `~/Library/Logs/BusyMirror/BusyMirror.previous.log`. +- `launchd` stdout/stderr for scheduled runs are also written in the same folder. - In the UI, use `Reveal Log File` to open the current log directly in Finder. ## Scheduling @@ -57,7 +61,7 @@ See `CHANGELOG.md` for notable changes. - `/Applications/BusyMirror.app/Contents/MacOS/BusyMirror --run-saved-routes --write 1 --exit` - This is more stable than index-based `--routes`, because it uses the routes and per-route options you already configured in the UI. - Hourly schedules use `launchd` `StartInterval`; daily and weekday schedules use `StartCalendarInterval`. -- You can remove the job from the same UI with `Remove Schedule`. +- You can remove the job from the same UI with `Remove Schedule`, and inspect the generated plist with `Reveal LaunchAgent`. - Note: scheduled headless runs depend on Calendar permission being granted to the installed app. Because these local builds are unsigned, macOS may require re-granting permission after replacing the app bundle with a new build. ## Roadmap diff --git a/ROADMAP.md b/ROADMAP.md index dafa357..582aa3f 100644 --- a/ROADMAP.md +++ b/ROADMAP.md @@ -8,10 +8,13 @@ - Work Hours filter and title-based skip filters - Privacy: placeholders with prefix + customizable title - 1.3.0: Mark Private option (global + per-route) +- 1.3.4: persistent file logging, stale-calendar pruning on refresh, clickable top-bar mode toggle +- 1.3.6: in-app scheduling via `launchd` with hourly/daily/weekday modes +- 1.3.6: generated macOS app icon set and packaged release assets ## Next - Auto-refresh calendars on `EKEventStoreChanged` (live refresh button-less) -- Hint near "Mirror Now" indicating run mode (Routes vs Manual) +- Better scheduled-run diagnostics in the UI (last run / last error / next run) - Better server-side privacy mapping (per-provider heuristics) ## Then