Repository navigation
Conversation
|
All contributors have signed the CLA. ✅ |
There was a problem hiding this comment.
ℹ️ No critical issues — one rough edge worth a look.
Reviewed changes
- Worker seam —
worker.WithReminderCheckadds a callback run beforesendRemindersends;falsesuppresses,errorfollows the job's retry policy.sendReminderruns it under a 10s deadline and re-readsbookings.statusafterwards to catch a cancellation during the lookup. - Handler check — new
Handler.ReminderAllowedloads the row wherebooking_hosts.user_id = bookings.host_idwith a non-emptyexternal_event_id(primary host only) and returns deliver when no such row exists. - Provider capability —
calendar.EventCancellationReaderplusService.EventCancelled, routed through the sameproviderForEventpath as updates/cancels. Providers without the capability (Microsoft, CalDAV) return(false, nil), preserving delivery. - Google read —
gcal.Client.EventCancelledGETs.../events/{id}?fields=statusviaDestinationClient, using the recorded calendar id when present. Onlystatus:"cancelled"suppresses; confirmed/tentative deliver; everything else errors. - Tests + docs — gcal status matrix, calendar routing, worker+handler integration, and an ARCHITECTURE §12 note.
Verified the load-bearing Google contract independently: a retained cancelled event returns HTTP 200 with status:"cancelled" from events.get, so suppression works in the normal window (Google purges cancelled events after ~30 days, after which the lookup degrades to the documented fail-closed error).
deepseek-v4.1-flash | 𝕏
|
I have read the CLA Document and I hereby sign the CLA |
There was a problem hiding this comment.
✅ No new issues found.
Reviewed changes
Reviewed the delta since the prior pullfrog review (3ede0fb), which addresses the hot-reload concern raised there.
- Google-only service reload — new
Handler.setGoogleCalendarbuilds a freshcalendar.Service, preserving the old non-Google primary plus every other registered provider and either replacing or removing onlygoogle.PatchGoogleSettingsnow routes both save and clear through it instead ofSetCalendar(nil)/ a gcal-only rebuild. - Snapshot safety — the replacement is published under
calMuwhile reading the old snapshot, so the previous provider map is never mutated and in-flight operations keep resolving on it. - Regression tests —
calendar_reload_test.gocovers primary/snapshot preservation;google_calendar_reload_test.godrives the real settings handler then the real reminder worker and asserts Microsoft/CalDAV reminders still send after both credential save and clear, plus continued refusal to send an unverifiable Google reminder.
Verified the prior concern is closed: clearing or saving Google credentials no longer drops Microsoft/CalDAV registrations, so those bookings' reminders still deliver. go test for the touched packages and go vet pass at fc5d5b5.
deepseek-v4.1-flash | 𝕏

Intent
Cancelling a meeting directly in Google Calendar can leave its Calnode booking confirmed, so queued reminders still tell the attendee to attend. This change suppresses the reminder when Google explicitly reports the primary host's stored event as cancelled.
The check uses the recorded provider, calendar and event ID, applies a 10-second request context, and rechecks local booking status after the lookup. Lookup errors follow the existing job retry policy instead of authorizing delivery. Saving or clearing Google credentials replaces only Google in a fresh service snapshot, preserving Microsoft/CalDAV registrations, the existing non-Google default provider, and in-flight operations.
Risks and limits
This fixes reminder delivery only. It does not change booking status, release availability, trigger refunds, or send cancellation messages. Only Google supports the new read check; other registered providers retain their current behavior. A missing connection, changed Google account, 404/410, or persistent API outage can exhaust retries and fail a reminder for an otherwise active booking. Secondary hosts' calendar copies do not decide cancellation.
The same fix is prepared for the maintained CoderPush fork in harley#6. This upstream PR contains only the reminder fix and no fork-specific configuration or migrations.
Validation
go vet ./...passed.No live booking or test email was created. The affected historical booking's current database row was not inspected.