Changed
- Error messages across auth, config, selection, download, iCloud, service, state, setup, and sync paths now use plainer, more actionable wording. CLI flags, config keys, schema, and runtime behavior are unchanged. (#572)
- Expected token-suppression notices for
--recentand lower-date-bounded runs now log atINFOinstead ofWARN. True unsafe token conditions still warn. (#566, fixes #556)
Fixed
- Live Photo MOV companions now reuse an existing size-deduped primary photo stem instead of planning an asset-id-suffixed duplicate. (#560)
- Same-name, same-size path collisions now use deterministic asset-id suffixes instead of skipping the second asset. (#561, fixes #546)
- Incomplete producer enumeration now fails the cycle partially, reports
enumeration_incomplete, and blocks sync-token advancement instead of treating a canceled stream as complete. (#562, fixes #547) - Missing or malformed iCloud album count responses now report a count-probe failure instead of a false zero, while clean full enumerations can still advance zone tokens when only that count side channel failed. (#563, #571, fixes #548)
- Known media extensions with unsupported response content types now fail before kei records a download or advances sync tokens, while valid media bytes with mismatched extensions still save. (#564, fixes #551)
- State-backed files that are smaller than iCloud's reported size are now redownloaded instead of being skipped as already present. (#568)
- Incremental soft-deletes for untracked
CPLMasterrecords no longer force the same zone changes to replay forever. Asset deletes and real state-write failures still block token advancement. (#569, fixes #567) - Clean library-scoped full enumerations now prune stale pending rows left behind by older runs and report the pruned count. (#571)
Full changelog: CHANGELOG.md