events: next-free slot search + 6 tests
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 35s
Some checks failed
Test, Build, and Deploy / test-build-deploy (push) Failing after 35s
ev-next-free finds the earliest free slot >= after for a duration within a horizon, probing 'after' + busy-interval ends via the busy_in rule (ev-free?). Finds gaps, skips too-short gaps, half-open at edges. 59/59 green. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -18,7 +18,7 @@ capacity rules, transactional booking, and a flow-driven notification dispatcher
|
||||
|
||||
## Status (rolling)
|
||||
|
||||
`bash lib/events/conformance.sh` → **53/53** (Phase 1: calendar + availability)
|
||||
`bash lib/events/conformance.sh` → **59/59** (Phase 1: calendar + availability)
|
||||
|
||||
## Ground rules
|
||||
|
||||
@@ -57,8 +57,9 @@ lib/events/api.sx ── (events/schedule) (events/book) (events/agenda) ──
|
||||
- [x] `calendar.sx` — event facts, RRULE expansion in a window (DAILY/WEEKLY)
|
||||
- [x] `calendar.sx` — MONTHLY (bymonthday + nth-weekday byday)
|
||||
- [x] `availability.sx` — free/busy rules (busy/conflict/busy_in on Datalog)
|
||||
- [ ] `availability.sx` — next-free slot search (same rules, different bindings)
|
||||
- [ ] `api.sx` + tests + scoreboard + conformance.sh
|
||||
- [x] `availability.sx` — next-free slot search (same rules, different bindings)
|
||||
- [ ] `api.sx` — public entry points (schedule/agenda/free-check)
|
||||
- [ ] tests + scoreboard + conformance.sh [done incrementally; api.sx pending]
|
||||
|
||||
## Phase 2 — Ticketing + booking
|
||||
- [ ] capacity rules; transactional booking → `persist` (no overbooking)
|
||||
@@ -78,6 +79,11 @@ lib/events/api.sx ── (events/schedule) (events/book) (events/agenda) ──
|
||||
|
||||
## Progress log
|
||||
|
||||
- 2026-06-07 — `next-free` slot search: earliest start ≥ after where
|
||||
[s,s+duration) is free and ends ≤ horizon, else nil. Candidates are `after`
|
||||
plus each busy-interval end (interval-packing); each probe reuses the
|
||||
`busy_in` Datalog rule via `ev-free?`. Finds gaps between bookings, skips
|
||||
too-short gaps, half-open at edges. +6 tests, 59/59.
|
||||
- 2026-06-07 — `availability.sx`: free/busy + conflict detection as forward-
|
||||
chained Datalog over `occurrence`/`booking` EDB. Rules `busy(A,S,E)`,
|
||||
`conflict(A,O1,O2)` (canonical `O1<O2`, half-open overlap `S1<E2 ∧ S2<E1`),
|
||||
|
||||
Reference in New Issue
Block a user