Skip to content

feat: hints for task values, X- params, ghosts - #848

Merged
tobixen merged 4 commits into
masterfrom
feat/hints-tester-group-b
Nov 4, 2026
Merged

tobixen merged 4 commits into
masterfrom
feat/hints-tester-group-b

Conversation

@tobixen

@tobixen tobixen commented Nov 4, 2026

Copy link
Copy Markdown
Member

Needed by python-caldav/caldav-server-tester#52 and PyCalendar/calendaring#46, whose CI stays red until this is merged.

Commit message:

feat: hints for task values, X- params, ghosts

Probing Ox and Zimbra for the calendaring conformance suite found more
data they lose than the profiles said. New hints record which task
STATUS (RFC 5545's, and RFC 10051's in a child) and PRIORITY values a
server keeps, maps or refuses; whether it advertises RFC 10051
(supported-task-modes); X- parameters dropped; multiget answering for
deleted objects (Zimbra); and Ox naming only tasks .ics.

Prompt: [fix the unmapped caldav hints, new caldav-server-tester checks and caldav profile updates now]

Prompts (comments made inline in the document while reviewing it):

(on the save-load.todo.status hint) 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: There exists a DAV-property in the RFC for querying for support as far as I remember. The probe for it should be added in the caldav-server-tester as for now. save-load.todo.status.rfc10051 is fine. (...) [the DAV property: CALDAV:supported-task-mode-set, RFC 10051 section 13.1]

Assisted-By: Claude Opus 5.5 noreply@anthropic.com

🤖 Generated with Claude Code

SOGo, Zimbra, Bedework and Posteo delete an object on a stale
If-Match (delete.if-match broken), so delete(if_match=...) deleted a
version someone else had saved since.  There it now reads the ETag
with a PROPFIND first and raises ETagMismatchError on a changed
object, as save() stands in for the wildcard preconditions a server
gets wrong.  A window remains between the read and the DELETE.

Prompt: (In the calendaring client library) Please continue work on getting the conformance tests passing. (earlier prompt: 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)
Followup-Prompt: You can let the old uncommitted changes piggy-back into the same commit.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
Zimbra answers a calendar-multiget naming an href without .ics with
200 and an XML declaration but no document.  DAVResponse let lxml's
XMLSyntaxError escape, so a lookup of a missing object crashed rather
than finding nothing.  Such a body now counts as no content, and a
response without content has no multistatus responses.

Prompt: (In the calendaring client library) Please continue work on getting the conformance tests passing. (earlier prompt: 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>
#846

delete(if_match=...) on servers that delete on a stale If-Match now
reads the ETag with a PROPFIND first and raises ETagMismatchError if
the object changed.  A window remains between the read and the DELETE.
An answer holding only an XML declaration now counts as no content,
rather than letting lxml's XMLSyntaxError escape.

Commits:
- de11ec1 fix: refuse a stale ETag a server's DELETE ignores
- 67d61e6 fix: an XML declaration alone is no content

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
Probing Ox and Zimbra for the calendaring conformance suite found more
data they lose than the profiles said.  New hints record which task
STATUS (RFC 5545's, and RFC 10051's in a child) and PRIORITY values a
server keeps, maps or refuses; whether it advertises RFC 10051
(supported-task-modes); X- parameters dropped; multiget answering for
deleted objects (Zimbra); and Ox naming only tasks <uid>.ics.

Prompt: [fix the unmapped caldav hints, new caldav-server-tester checks and caldav profile updates now]

Prompts (comments made inline in the document while reviewing it):
> (on the save-load.todo.status hint) 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: There exists a DAV-property in the RFC for querying for support as far as I remember.  The probe for it should be added in the caldav-server-tester as for now.  save-load.todo.status.rfc10051  is fine. (...) [the DAV property: CALDAV:supported-task-mode-set, RFC 10051 section 13.1]

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
@tobixen
tobixen force-pushed the feat/hints-tester-group-b branch from d68589e to 59a64fe Compare November 4, 2026 20:08
@tobixen
tobixen merged commit 59a64fe into master Nov 4, 2026
16 checks passed
tobixen added a commit to python-caldav/caldav-server-tester that referenced this pull request Nov 6, 2026
The tester now defines the six features from caldav's merged but
unreleased python-caldav/caldav#848 in
FUTURE_FEATURES, copied from caldav's master: save-load.todo.status
and .rfc10051, save-load.todo.priority, supported-task-modes,
save-load.icalendar.x-parameter and multiget.deleted.  With them,
the tests pass against the released caldav 3.7.0 that CI installs;
60 of them failed without.  The CHANGELOG says so.

Prompt: Fix PR52, update or delete obsoleted memory notes.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
@tobixen
tobixen deleted the feat/hints-tester-group-b branch November 6, 2026 21:43
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