Merge loops/events into architecture: events-on-sx cross-event conflict-checked booking (311 tests, 12 suites)

ev/book-checked! prevents an attendee double-booking themselves across
different events by consulting their persist-derived availability for the
occurrence window (:time-conflict on overlap; same-occurrence re-book stays
idempotent).
This commit is contained in:
2026-06-07 14:11:15 +00:00
5 changed files with 101 additions and 7 deletions

View File

@@ -18,7 +18,7 @@ capacity rules, transactional booking, and a flow-driven notification dispatcher
## Status (rolling)
`bash lib/events/conformance.sh`**303/303** (Phases 1-4 + 9 ext: fed f/b, waitlist, EXDATE/RDATE, overrides, booking/reschedule-notify, fed transport, timezones+DST, e2e delivery pipeline)
`bash lib/events/conformance.sh`**311/311** (Phases 1-4 + 10 ext: …timezones+DST, e2e delivery pipeline, cross-event conflict-checked booking)
## Ground rules
@@ -88,6 +88,13 @@ lib/events/api.sx ── (events/schedule) (events/book) (events/agenda) ──
## Progress log
- 2026-06-07 — Cross-event conflict-checked booking (extension). Capacity is
per-event, but `ev/book-checked!` also prevents an attendee double-booking
THEMSELVES across different events: it consults the actor's persist-derived
availability (ev/free-p?) for the occurrence's window and returns
:time-conflict on overlap, else the normal ev/book-occ! result. Re-booking
the same occurrence is idempotent (:already, not a conflict); other actors are
unaffected. `ev/would-time-conflict?` predicate. +8 tests, 311/311 green.
- 2026-06-07 — End-to-end delivery pipeline (closes the derivation↔delivery
gap). `ev/deliver-messages` bridges SX notification messages to the Scheme
notify flow: each (id recipient body) is `serialize`d to s-expression text,