-
v0.8.2
Stablereleased this
2026-08-09 20:34:33 -05:00 | 98 commits to main since this releaselist_eventscould return fewer events than the day held, with no error.Fixed
-
Expansion happens per resource instead of per calendar. Every resource on
a calendar was merged into a single VCALENDAR before expanding, and two
resources whose events share a UID collapsed into one occurrence:3 resources -> 3 events [three distinct uids] 3 resources -> 1 events [same uid, different times] 3 resources -> 2 events [two share a uid]RFC 4791 §4.1 requires a calendar object resource to hold exactly one UID, so
the resource is the correct unit of expansion — merging across resources
merged things the spec calls distinct. Duplicate UIDs across resources are
themselves a violation, but they occur; caldav's own iCloud notes list
duplicate_in_other_calendar_with_same_uid_breaks.Found because a delete made the same query in the same window return more
events than it had a moment earlier — 3 resources reporting 1 event, then 2
reporting 2. Nothing raised. This is the third defect of that shape in this
project and the second to survive a green suite.The merge existed to cover servers that split a series'
RECURRENCE-ID
overrides across resources. No compliant server does and iCloud does not, but
the trade is worth naming: on one that did, this would show the master's
occurrence un-overridden and the override, as two events. -
A resource that fails to expand now costs only itself. The expansion was
wrapped once around the whole calendar and returned no events at all on
failure, so one malformed series could empty a day. That is the isolation
parse_componentsalready applied to a resource that will not parse.
Changed
-
tool/eventslogs both filters — the calendar list, and the query's
length together with how many events it matched from. A short count has two
very different explanations, and the line carrying only the window could not
tell a search that correctly matched one event from a read that lost two.
Diagnosing the defect above needed exactly that distinction and the line did
not carry it.The query's length, never its text: it is user input and this line goes to
Portainer.
Docs
docs/runbook.mdanddocs/oauth-persistence.mdare gone. Roughly a thousand
lines of them were✅ DONEphase narrative describing a deployment that now
exists. What was still live — the outstanding live checks, the failure-mode
table, adding a second tenant, backing out — moved todocs/plan.md,
which also carries the 0.9.0 recurrence design and the decisions behind it.
Downloads
-
Source code (ZIP)
0 downloads
-
Source code (TAR.GZ)
0 downloads
-