Lift the free/busy engine out of the webinar feature

Refactorkamo-shared-library
Shipped
August 26, 2026 at 6:46 AM UTC
Author
Kamo
Commit
97ae24c

The interval arithmetic — expand, restrictionMask, candidateStarts, and the whole of AvailabilityInterval — was never webinar-specific. All the coupling sat in one method, blockersFor, which is now the BusySource interface. Moved verbatim: the +/-1 day expansion pad, the midnight-crossing rule, the clip-don't-drop trimming and the empty-mask-means-no-mask rule each encode a bug someone already found. The 30 tests moved with them, unchanged. MemberAvailabilityWindow implements AvailabilityWindowSpec without a body change; the entity stays in its package, since moving a mapped class buys boot risk and nothing else.

All changes

Like what you see shipping?

Every one of these updates lands in your workspace automatically. Start free and watch it grow week after week.

Start Free ForeverView Pricing