• bvandeusen released this 2026-04-29 22:08:38 -04:00 | 284 commits to main since this release

    Highlights

    EventSlideOver recurrence UI

    The calendar event modal now exposes the existing Event.recurrence RRULE column. A "Repeat" select offers None / Daily / Weekly / Monthly / Yearly presets that map to/from canonical RRULE strings.

    CalDAV-imported rules with extra parts (e.g. FREQ=WEEKLY;BYDAY=MO,WE,FR) are preserved — they surface as a disabled "Custom" option with the raw rule shown read-only, so they remain visible in the UI without us silently destroying them.

    Journal weather wiring fixes

    Closes two real gaps that caused empty weather sites in the journal panel:

    1. Saving locations now triggers a fetch. PUT /api/journal/config kicks off a background refresh_location_cache for every saved location with valid lat/lon. Previously, newly-entered sites had no cache row (or a stale one) until the user manually clicked the panel's refresh button.

    2. Orphaned cache rows are filtered. Migration 0040 deleted the briefing-era briefing_config setting but left weather_cache rows untouched. Those briefing-era rows showed up as ghost tabs in the new journal weather panel. get_cached_weather_rows now accepts a valid_keys filter; the journal weather routes and prep pipeline pass currently-configured location keys, so only cache rows that match an actively-configured location surface in the UI or the daily prep.

    Commits

    • 36cd08c feat(events): expose recurrence presets in EventSlideOver
    • c33cab7 fix(journal): wire weather refresh on config save; drop orphaned cache rows

    Verification

    • 153 backend pytest tests pass
    • Frontend vue-tsc --noEmit clean
    • CI green on dev before merge
    Downloads