Skip to content

v0.8.0

Choose a tag to compare

@github-actions github-actions released this 25 Aug 11:08
· 20 commits to master since this release

Behavior changes in 0.8.0

This release changes two default behaviors. Read this section before you update.

Sync conflicts

sync.conflict_strategy now defaults to prompt. A full sync no longer replaces your local edits. It records a conflict and keeps the local edit. Run chroncal sync conflicts to resolve it.

Set conflict_strategy = "server-wins" under [sync] in config.toml to keep the old behavior.

Recurring deletes

event delete --recurrence-id and event delete --following now fail when the timestamp matches no occurrence. Before the fix, the command wrote a phantom EXDATE and exited with code 0. Check the error message for the next valid occurrence.

Notifications

Desktop notifications now show Chroncal as the sender name.


📦 Install: see the README. Prebuilt binaries and checksums.txt are attached below.

Changelog

🚀 Features

  • a671c65 feat(cli): add --skip-unreadable to ical export
  • 169a7a3 feat(sync): add sync doctor escape hatch for wedged resources
  • 11d6d28 feat(sync): wire push-failure bookkeeping and harden doctor push

🐛 Bug fixes

  • 8f0c723 fix(alarm): reject non-positive daemon interval before the ticker starts
  • e7d2a95 fix(alarm): suppress overridden slots for RDATE-only todo masters
  • ff0060f fix(auth): narrow keyring probe absence match and clean legacy residue
  • 53f36ff fix(auth): probe keyring availability without writing
  • 44b7c90 fix(auth): sync plaintext credential temp file before rename
  • 7e169ab fix(auth): write plaintext credentials atomically and enforce 0600
  • 917d36e fix(caldav): abort cross-host redirects instead of stripping headers
  • a49d1fa fix(caldav): merge properties across all 2xx propstats
  • ea77a72 fix(calendar): propagate the event count error before the delete prompt
  • acebd32 fix(ci): treat missing secret-service as no keyring
  • 2f94775 fix(cli): complete the not-found taxonomy and dedupe exdate parsing
  • e53db79 fix(cli): reject an inverted --from/--to date range
  • 0258a37 fix(cli): satisfy linters in the skip-unreadable caveat builder
  • ed61626 fix(cli): share one sync service constructor across sync commands
  • 2ff3fba fix(cli): tag exdate and restore failures with the proper error code
  • a46e946 fix(cli): unify the calendar not-found error code
  • e5af212 fix(cmd): wire purgeByID on shared resource verbs
  • c165523 fix(cmd,event): scope guards resolve override rows; --following honors overrides
  • f3130a7 fix(event): abort DeleteInstance on a genuine override-lookup error
  • d29d522 fix(event): abort DeleteSeries on a genuine master-lookup error
  • 75131db fix(event): carry the override recurrence_id in DeleteWithUndo
  • ac7fe3f fix(event): commit the instance-delete dirty mark inside the transaction
  • 1c0235c fix(event): commit the update-path dirty marks inside the transaction
  • eb34b01 fix(event): reconcile sync state when RestoreByUID finds no master row
  • d9eba4c fix(event): reconcile sync state when the undo-series master row is gone
  • c0c833d fix(event): reject zero and negative --duration
  • 6bea0a6 fix(event,sync): reconcile the dirty-mark and probe-test merge seams
  • 4f99cf0 fix(ical): abort export when recurring-master expansion fails
  • f453baa fix(ical): clear the preserved-DTEND slot on local span edits
  • ab0fcba fix(ical): reject out-of-range UTC-OFFSET components
  • b0a1993 fix(ical): resolve floating TRIGGER against the record timezone on export
  • 8ad310c fix(ical): sanitize free-text values in export parameters
  • 5b2f9ab fix(ical): strip UTF-8 BOM before import decode
  • 00da956 fix(ical): strip the mailto prefix in any letter case
  • afa58c9 fix(icaltransfer): count a first-time override as a new row
  • e48bb48 fix(icaltransfer): replace child collections unconditionally on import
  • 3f40783 fix(notify): show Chroncal as the notification sender
  • dc22380 fix(retry): cap the Retry-After sleep floor
  • d4c6c3f fix(retry): classify transient errors on explicit markers only
  • 490cd0d fix(storage): fail fast on scan column order mismatch
  • c9448c4 fix(sync): derive the first-push href from the resource UID
  • 9140675 fix(sync): do not withhold the token on uncanonical multiget misses
  • e743088 fix(sync): harden the sync doctor against false wedges and lost consent
  • d6228c6 fix(sync): keep conflicting local edits recoverable on 412
  • 19ca858 fix(sync): keep pulled server changes recoverable during open conflicts
  • 707442b fix(sync): keep resolve --pick local from losing edits
  • 2285584 fix(sync): keep the original detection time on a pull refresh
  • abd2a1a fix(sync): percent-encode unsafe UID bytes in remote object names
  • 88f5f38 fix(sync): preserve the server DTEND when the parsed value is fabricated
  • 7915fbe fix(sync): propagate organizer lookup failures instead of failing open
  • c00b80a fix(sync): propagate the credential store error in sync read commands
  • 0be1501 fix(sync): record organizer lookup failures as push failures
  • ddd7d13 fix(sync): sanitize doctor output strings
  • 3014e45 fix(sync): sanitize the doctor push confirmation text
  • 0cb1dd6 fix(sync): satisfy linters in the conflict handler
  • 505c3e1 fix(sync): skip pull over an open conflict
  • 6e1a096 fix(sync): surface failed dirty marks in event and journal writes
  • 6c19041 fix(sync): surface push finalize failures in the sync result
  • 32d8114 fix(sync): write sync health with a cancellation-free context
  • aa7ce6c fix(sync,cmd): default conflicts to prompt; reject phantom recurrence ids
  • bd9a010 fix(sync,tui): raw-set occurrence guard, safe strategy fallbacks
  • ddacb6a fix(tui): clamp the resting ButtonDanger label away from the pill
  • 08d7416 fix(tui): clear calendar-move syncing when pending is dropped
  • 7f15f90 fix(tui): clear pending keep-local ID when ctrl+c supersedes confirm
  • cb4abcc fix(tui): ignore stale calendar-delete counts after pending is cleared
  • 169139d fix(tui): inherit overlay idle-path and calendar-move ctrl+c fixes
  • 199bdfe fix(tui): inherit overlay routing and calendar-delete count guards
  • 8457b90 fix(tui): keep accent contrast polarity when no OSC 4 answer arrives
  • ba43d9c fix(tui): make the default dark form label readable
  • 681c555 fix(tui): stop LoadTheme fallback from writing to stderr
  • 284a69f fix(tui): stop empty confirm results from deleting event 0
  • 0818a6c fix(tui): surface held-back edits and dedupe the resolution stamp
  • 18ce748 fix(tui,event,cmd): thermos round 4 polish
  • 939cf0f fix(tui,event,cmd): thermos round 5 polish
  • dce175d fix(tui,recurrence): make the scope guard live and start-based

⚡ Performance

  • f078978 perf(tui): memoize the resting danger label clamp

Full Changelog: v0.7.12...v0.8.0