test: close remaining coverage gaps from QA audit round 2
Server route tests (21 new):
- Key sync HTTP routes: auth, 10KB limit, v2 format, legacy merge, corrupt data
- Share link expiry: 410 for expired docs on GET snapshot
- Snapshot rate limiting: 429 after 60 writes/min
- Version metadata update: auth check, merge, filterMetadata
- FIFO version pruning: prunes oldest when over 50 limit
- Health endpoint: authenticated vs anonymous response
- Blob Content-Disposition: attachment header, filename sanitization
Calendar tests (9 new):
- Yearly recurrence Feb 29 overflow: pins to Feb 28, recovers in leap years
- ICS export RRULE generation: daily, weekly, monthly, yearly with/without until
Bug fix:
- Yearly recurrence now uses same day-recovery as monthly (prevents
Feb 29 → Mar 1 permanent drift in non-leap years)
Refs: #585