Commit aea46ac
committed
feat: detect servers that reject rescheduling a recurrence series with exceptions
testEditSingleRecurrence broke on OX App Suite with a 409 Conflict at its
final step: save(all_recurrences=True) after changing dtstart/dtend. This
re-anchors the whole series (moves the master VEVENT DTSTART) while two
detached exceptions (RECURRENCE-ID) are attached, shifting their
RECURRENCE-IDs to match.
Investigation showed this is a distinct, previously-uncaptured limitation:
* It is NOT save-load.mutable.if-match-optional - OX returns 409 even with a
matching If-Match etag.
* It is NOT save-load.event.recurrences.exception - OX stores master+exception
together fine.
* Shifting the DTSTART of an exception-free recurring event works on OX; only
the combination (reschedule + existing exceptions) is rejected.
Add a new compatibility flag save-load.event.recurrences.exception.reschedule
(default full), mark it unsupported for OX, and gate only the final
reschedule block of the test on it - the earlier steps work on OX and keep
their coverage.
prompt: In ~/caldav, the test ...::TestForServerOx::testEditSingleRecurrence
breaks with a 409 from the server. This seems like some kind of
compatibility-problem. Please investigate and consider if it's needed to add a
new feature and a new check to catch this, or perhaps one of the features
already checked covers it and all we need to do is to add some guard to the
test skipping it for servers like Ox.
followup-prompt: (scope) Also add checker probe [in caldav-server-tester]
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
AI Prompts:
claude-sonnet-4-6: E3. Making it "opt-in" doesn't sound like a fix, I think it's needed to know about relationships when doing a "top down" hierarchical task list. Please consider and come with suggestions
claude-sonnet-4-6: Is 6.1 still relevant, or was it already removed during one of the deduplication sessions?1 parent 1f0c6bc commit aea46ac
3 files changed
Lines changed: 31 additions & 17 deletions
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
14 | 14 | | |
15 | 15 | | |
16 | 16 | | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
17 | 21 | | |
18 | 22 | | |
19 | 23 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
213 | 213 | | |
214 | 214 | | |
215 | 215 | | |
| 216 | + | |
216 | 217 | | |
217 | 218 | | |
218 | 219 | | |
| |||
1772 | 1773 | | |
1773 | 1774 | | |
1774 | 1775 | | |
| 1776 | + | |
| 1777 | + | |
| 1778 | + | |
| 1779 | + | |
| 1780 | + | |
1775 | 1781 | | |
1776 | 1782 | | |
1777 | 1783 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4401 | 4401 | | |
4402 | 4402 | | |
4403 | 4403 | | |
4404 | | - | |
4405 | | - | |
4406 | | - | |
4407 | | - | |
4408 | | - | |
4409 | | - | |
4410 | | - | |
4411 | | - | |
4412 | | - | |
4413 | | - | |
4414 | | - | |
4415 | | - | |
4416 | | - | |
4417 | | - | |
4418 | | - | |
4419 | | - | |
4420 | | - | |
| 4404 | + | |
| 4405 | + | |
| 4406 | + | |
| 4407 | + | |
| 4408 | + | |
| 4409 | + | |
| 4410 | + | |
| 4411 | + | |
| 4412 | + | |
| 4413 | + | |
| 4414 | + | |
| 4415 | + | |
| 4416 | + | |
| 4417 | + | |
| 4418 | + | |
| 4419 | + | |
| 4420 | + | |
| 4421 | + | |
| 4422 | + | |
| 4423 | + | |
| 4424 | + | |
4421 | 4425 | | |
4422 | 4426 | | |
4423 | 4427 | | |
| |||
0 commit comments