Skip to content

feat: probe a %40 href in a calendar-multiget - #59

Merged
tobixen merged 5 commits into
mainfrom
feat/probe-encoded-href
Nov 12, 2026
Merged

tobixen merged 5 commits into
mainfrom
feat/probe-encoded-href

Conversation

@tobixen

@tobixen tobixen commented Nov 12, 2026

Copy link
Copy Markdown
Member

Commit message:

Robur serves an object at its %40 URL, but a calendar-multiget naming
that href answers 404, and only the literal @ finds it. CheckMultiget
now stores an object with an @ in its name and grades
url.encode-at.encoded.href; run against Robur it gives unsupported.
The feature definition is carried in FUTURE_FEATURES until a caldav
release has it.

Prompt: Continue working on getting [the calendaring] conformance tests passing. [on Robur, every object with an @ in its UID failed its read-back]

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

The caldav side is python-caldav/caldav#861.

A time-range search should find an object overlapping the range, not
only one starting inside it (RFC 4791 section 9.9); Robur finds only
events starting inside, Cyrus and GMX only tasks.  It should also place
an event with a TZID and its VTIMEZONE at its UTC time; Infomaniak only
finds one when the range also reaches its local time read as UTC.

The olson-tzid probe now compares the bare-TZID event with a VTIMEZONE
control and a 12:00 UTC reference instead of expecting fixed answers,
so those two bugs no longer hide its verdict.  Its windows contain the
start, and a misplaced reference (Bedework 3) means "cannot test".

Prompts:
> [Found in] another session: date searches over a 30-minute window on robur 
> and infomaniak apparently does not find the events it should find.  Please 
> do research into this.  Those servers can be probed from the [local caldav 
> clone holding the test-server passwords] directory.

> (post-research) We need probes catching all this behaviour.  Do some (more) 
> research ...

> Go for search.time-range.*.overlap.  We need equivalent test for tasks.
> Journals don't count as they don't have a dtend.

> (on the claim that those probes are pointless as the caldav library does not 
> need it) one purpose of this tool is to expose any kind of deviations from 
> the RFC, from that perspective it should be probed, even if the caldav library
> does not need it.

> The olson-tzid probe possibly depends on this.  At least it needs to be 
> rewritten to work on infomaniak and robur.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
A new object saved under a taken name has a UID of its own, and that is
what save(no_overwrite=True) guards.  Bedework (3 and 5) refuses the
same UID with 412 but another one with 500, so the probe graded it
full while the conformance suite saw a 500 on creating under a taken
name.  Where the same UID got 412, the probe now tries another UID.
All 21 servers were reprobed; only Bedework's grade changes.

Prompt: [pick from the task list: "calendaring: remaining conformance failures on Ox, Zimbra and others"]
Followup-Prompt: ... First priority is to get the conformance tests passing for all the caldav servers available ...
Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
save-load.todo.alarm stores a task with a VALARM (ACTION, TRIGGER:-PT15M
and a DESCRIPTION) and reads it back.  The same duration written
another way, or with default parameters, counts as kept.  Dropped is
"unsupported"; kept but rewritten is "broken", the behaviour naming
what changed.  Ox makes the trigger absolute and replaces the
description with "Open-XChange", while it keeps an event's alarm as
sent.  The definition lives in future_features until caldav has it.

Prompt: [we probably need] another probe in the caldav-server-tester library on whether task lists accept alarms
Followup-Prompt: save-load.todo.alarm is fine, and it's possible to use the behaviour or extra_keys to elaborate why it's broken.

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
save-load.event.recurrences.rdate stores an event with an RDATE of two
dates and reads it back; the dates may come back on one line or
several.  Dropped is "unsupported", other dates "broken".  Zimbra drops
every RDATE while it keeps an RRULE, which made calendaring's
conformance round trip fail there.  The definition lives in
future_features until caldav has it.

Prompt: [about Zimbra 10.1 dropping RDATE only inside the suite's run:] Keep digging.
Followup-Prompt: [make recurrence.rdate a] new feature

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
Robur serves an object at its %40 URL, but a calendar-multiget naming
that href answers 404, and only the literal @ finds it.  CheckMultiget
now stores an object with an @ in its name and grades
url.encode-at.encoded.href; run against Robur it gives unsupported.
The feature definition is carried in FUTURE_FEATURES until a caldav
release has it.

Prompt: Continue working on getting [the calendaring] conformance tests passing.  [on Robur, every object with an @ in its UID failed its read-back]

Assisted-By: Claude Opus 5.5 <noreply@anthropic.com>
Reviewed-by: Tobias Brox <tobias@redpill-linpro.com>
@tobixen
tobixen force-pushed the feat/probe-encoded-href branch from 14d5116 to e423325 Compare November 12, 2026 21:09
@tobixen
tobixen merged commit e423325 into main Nov 12, 2026
12 checks passed
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