Skip to content

fix: conformance on caldav's test servers - #46

Merged
tobixen merged 6 commits into
mainfrom
conformance-on-caldav-servers
Nov 6, 2026
Merged

tobixen merged 6 commits into
mainfrom
conformance-on-caldav-servers

Conversation

@tobixen

@tobixen tobixen commented Nov 3, 2026

Copy link
Copy Markdown
Member

Disclaimer: the code and the text below the line are AI-generated, by Claude Opus 5.5, from the prompts:

please look through the logs and investigate what needs to be done to get the conformance tests passing. It's better to fix things properly than to make workarounds. It's within the scope to do changes in [the caldav and caldav-server-tester checkouts] if needed.
Document the problem as for now, and add [it to my tasklist], I will think more about it later. [answer to: servers add RSVP=TRUE / EMAIL= to attendees; should verification tolerate it, count it as lossy, or keep it a documented failure?]
[do the remaining conformance-triage work (unmapped caldav hints, new caldav-server-tester checks and caldav profile updates) now]


Fewer conformance failures on caldav's test servers. The suite waits out a server's search-cache delay as the stories do (Bedework 3 went from 55 failures to 10). The capability table now reads the caldav hints that say what a server drops or refuses: task attendees, recurrences and X- properties on Ox, the STATUS and PRIORITY values Ox and Zimbra keep, PARTICIPANT on six servers (time entries go without users there), Zimbra's renaming, and Zimbra's multiget returning deleted objects (single objects are read with a GET). write.conditional is emulated where DELETE ignores If-Match, given a caldav that reads the ETag first. The value-map conformance test no longer adds one item twice.

Depends on unreleased caldav: python-caldav/caldav#846 (conditional delete) and the caldav branch feat/hints-tester-group-b (new hints, PR to follow). With caldav 3.7 the new hints read as unknown and their tests skip; CI may fail until caldav 3.8. Locally the suite passes against caldav master.

Still failing on live servers: Ox 8, Zimbra 7 (floating times, VTIMEZONE, added attendee parameters, and a few more). Documented in docs/caldav-servers.md where it applies.

Bedework 3 answers listings from an index that lags behind writes, and
the conformance suite on it failed with stale etags, UIDs not found
and change feeds missing items.  The suite on caldav's servers now
waits the way the scenario stories already do.

Prompt: please look through the logs and investigate what needs to be done to get the conformance tests passing.  It's better to fix things properly than to make workarounds.  It's within the scope to do changes in [the caldav and caldav-server-tester checkouts] if needed.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
SOGo, Zimbra, Bedework and Posteo delete on a stale If-Match
(caldav's delete.if-match broken), yet write.conditional was declared
full there.  caldav now reads the ETag before such a DELETE, which
is emulation with a window, so the declaration says emulated.

Prompt: please look through the logs and investigate what needs to be done to get the conformance tests passing.  It's better to fix things properly than to make workarounds.  It's within the scope to do changes in [the caldav and caldav-server-tester checkouts] if needed.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
SOGo and Ox add parameters to ATTENDEE, and no capability declaration
can express a server adding to what it was sent, so the conformance
round trip and verify fail there.  Record it as a known failure until
it is decided how verification should treat it.

Prompt: Document the problem as for now, and add [it to my tasklist], I will think more about it later. [answer to: servers add RSVP=TRUE / EMAIL= to attendees; should verification tolerate it, count it as lossy, or keep it a documented failure?]

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
A CalDAV server that drops or refuses data should not be declared with
full support in the capability table.

Prompt: [do the remaining conformance-triage work (unmapped caldav hints, new caldav-server-tester checks and caldav profile updates) now]

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
caldav now records PENDING and FAILED apart from RFC 5545's four
statuses (save-load.todo.status.rfc10051), since a server not
supporting RFC 10051 need not keep them.  A task list declares the
statuses both hints keep where either says some are lost, and leaves
out a status no hint knows to be kept; with neither saying so, the
statuses stay fully supported.  On Ox, which keeps the four and drops
the two, the values are as before; the note now says Ox does not
advertise RFC 10051.

Prompts: (on the save-load.todo.status hint, in the caldav review) Note for "save-load.todo.status" - a server may or may not support RFC 10051.  We can only demand it to support FAILED and PENDING if the server declares support for RFC 50051 (sic).  If there are many servers acceptign (sic) all the RFC 5545 statuses but not accepting FAILED and PENDING, then maybe we need to split out a child for the RFC 10051-statuses
Followup-Prompt: (...) save-load.todo.status.rfc10051  is fine. (...)

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
@tobixen
tobixen force-pushed the conformance-on-caldav-servers branch from 40dcb16 to 9afd3a7 Compare November 6, 2026 08:31
The PARTICIPANT branch only applies where RELATED-TO is kept, so only
CCS and GMX get a lossy time log; Bedework 3, robur, Ox and Zimbra
keep it unsupported.  The fragment and the test docstring now say so.
The conditional-delete fragment mentions that write.conditional is
unsupported on those servers with a caldav older than 3.8.  An
x-property hint whose behaviour is empty no longer raises.

Prompt: [fix issues found during the review process]

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant