v0.7.0
Added
-
Filter and page the bookings list. The bookings page now filters by event type,
host, team and status alongside the existing Upcoming/Past and Mine/All toggles, and
pages through results 25 at a time instead of rendering everything at once. Requested
in #15, tracked as
#18.GET /v1/bookingsgainedevent_type,host,team,status,when,from,
to,order,limitandoffsetquery parameters, and its response now carries
total,countsand the activelimit/offsetbesideitems. MCPlist_bookings
gainedteam_id,limitandoffset, and returnstotal.
Fixed
- A running instance now reports which commit it is.
/versionreported
commit: unknownon every container, because the image is built from a copied
source tree with no.gitfor the Go toolchain to read VCS metadata from. That was
survivable while only tagged releases were deployed; it is not now that branch
images can be, since those reportversion: devand nothing else identified the
build. The commit is stamped explicitly at build time instead. - Webhook deliveries are no longer kept forever. Nothing ever purged
webhook_deliveries, so on a busy instance the table grew for the life of the
deployment, inside the SQLite file Litestream replicates offsite. The worker now
sweeps finished deliveries after 30 days, alongside the five other tables it already
purged. Only rows that reachedsuccessorfailedare removed: a pending delivery
still has a job pointing at it, and deleting one would turn a deliverable webhook
into a permanent failure. The deliveries view only ever showed the 50 most recent, so
nothing visible changes. status=cancelledreturned nothing, on every surface. Both booking list queries
hardcoded an exclusion of cancelled bookings and then filtered on top of that result,
so asking for cancelled bookings could never match anything - including through the
MCP tool whose own schema advertisescancelledas a valid value. There was no way at
all to view a cancelled booking. An explicit status now replaces the default exclusion
instead of being applied after it; omitting it still hides cancelled bookings.- Filtering by host missed the meetings that person attends but doesn't lead. The
host filter comparedbookings.host_idonly, while visibility has always counted a
user as hosting a booking if they are the primary host or an assigned host. Group
meetings someone was on were therefore invisible when filtering to them.
Changed
- Bookings are selected in SQL rather than in the browser.
GET /v1/bookingsand
MCPlist_bookingspreviously loaded every booking the caller could see and then
filtered and sorted the result in Go or in Svelte, running follow-up queries whose
INclause held every booking id returned, against a single-connection pool. Both now
share one filtered, ordered, paginated query. - Indexed the bookings list. The only indexes on
bookingsboth led onhost_id
and were partial, so every listing planned as a full scan plus a temporary B-tree
sort of the whole matching set to return one page. Paginating the API alone would
have made the response smaller without making the work smaller.(start_at, id)and
(event_type_id, start_at, id)(migration 00056) turn the page query into an index
walk that stops at the limit. The Upcoming/Past counts are an aggregate and still
scan by design.