fix(birthdays): read only birthday fields in bounded partial multiget pages (v0.4.2) #42
No reviewers
Labels
No labels
waiting-on-julian
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
jlxq0/carddav-mcp!42
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/t_eb51530e-birthday-partial"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Card t_eb51530e. Julian requested this directly.
Problem
Live on v0.4.1,
upcoming_birthdaysfailed on every call withCardDAV response exceeds the configured size cap. Measured 2026-10-31 from a mounting session. The cause is that the tool fetched every card whole in oneaddressbook-query. Julian'sContactsbook has 419 cards, single cards are about 150 KB, and the book is larger than 48 MiB: platform8db2f43fraised the cap to 48 MiB and929a65bdreverted it because it did not help.Fix
birthday_scanfirst runsPROPFIND Depth: 1to list hrefs and ETags only, the same listinglist_contactspages from.addressbook-multigetand an RFC 6352 partialaddress-datathat names onlyVERSION,UID,FN,NandBDAY. No photo or other binary is transferred.proplist inserialize_vcard_with_props(crates/dav/src/card/query.rs). The parser matches it by namespace (collect_address_data).max-results) is refused.VERSIONis written only from the stored entry, soensure_versionsupplies the requested version when the partial card lacks one.full_namefalls back to the given and family names fromNwhenFNis missing.list_contactsclient call is#[cfg(test)]now. A production path that asks for a whole book of whole cards no longer compiles.list_contacts,get_contact,search_contactsandsync_contacts.Regression evidence
a_book_of_photos_over_the_response_cap_still_answersbuilds 60 cards with 200 KB photos and uses the deployed 8 MiB default cap.TooLargeon it. The test asserts this, which reproduces the live failure.proplist. Mutation checked: page whole cards, and addPHOTOto the properties.BDAY,VALUE=text, and AppleX-APPLE-OMIT-YEARFN, and a partial card with noVERSIONproplist: no fallbackReview
An independent fresh-agent review covered round 1 and round 2:
The reviewer confirmed the final head
613166b.Gates
cargo fmt --check,clippy -D warnings(stable 1.99.1 and default),cargo test(251 passed),cargo audit,cargo denyandgitleaksall pass locally.Version 0.4.2.
🤖 Generated with Claude Code
https://claude.ai/code/session_01E2xQRc9frmr6reeuvPjGdJ