# Changelog

## [0.5.4] - 2026-03-14

### 🚀 Features

- Expose % done in the parser and UI and stop relying on % done for paused tasks ( https://github.com/trougnouf/cfait/issues/14 )
- Remember the task list position when going back from editing a task

### 🐛 Bug Fixes

- Fix flatpak compilation issue (AWS_LC_SYS_NO_JITTER_ENTROPY=1)
- *(alarm)* Fix absolute time alarms (s.t. they are based on due date rather than now) and alarm recurrences ( https://github.com/trougnouf/cfait/issues/14 )
- Ensure % completion does not spam the task list with 0% nor reset time spent

### 💼 Other

- Translated using Weblate (German)

Currently translated at 98.1% (370 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/de/
- Translated using Weblate (Spanish)

Currently translated at 98.1% (370 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/es/
- Translated using Weblate (Italian)

Currently translated at 98.1% (370 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/it/

### ⚙️ Miscellaneous Tasks

- Fix Android compilation issues, bump local collection and cache version, update documentation
- *(Android)* Re-run uniffi-bindgen
- Fix unused variables warnings when generating Android bindings
- Fix Android compilation error
## [0.5.3] - 2026-03-14

### 🚀 Features

- Remove export dialog from the Trash and Recovery collections

### 🐛 Bug Fixes

- *(MacOS)* Fix MacOS compilation issue reported by Martin Stut
- *(android)* Show Trash calendar when it is not empty ( https://github.com/trougnouf/cfait/issues/14 )
- *(Android)* Compilation issue / missing import
- *(pkg)* Fix Arch PKGBUILD compilation issue (AWS_LC_SYS_NO_JITTER_ENTROPY=1)

### 📚 Documentation

- Update F-Droid and flathub screenshots
- Fix Android doc to track the other clients'

### ⚙️ Miscellaneous Tasks

- Fix rolling release message
- Update Rust toolchain to 1.94.0
- Release cfait version 0.5.3
## [0.5.2] - 2026-03-12

### 🚀 Features

- Support i18n translations and add French
- *(android)* Prune stale notifications (from done/canceled/snoozed/modified tasks)
- Replace d with Delete key in TUI and GUI
- *(gui)* Add network status to refresh icon (feature-parity with Android client)
- *(gui)* Zoom in and out with ctrl++ ctrl+- (or ctrl+scroll), reset with ctrl+0 ( https://codeberg.org/trougnouf/cfait/issues/9 )
- *(alarm)* Trim done/canceled notifications and refresh before firing them (GUI and TUI, feature parity with Android)
- *(sort)* Put ongoing tasks in the ongoing bin even if they are blocked or have not started
- *(cli)* Implement cli (non-interactive) add, list, search, toggle, start, pause, and delete commands
- Yank copies task smart title and description, TUI description is selectable in edit screen
- Time tracking management (list, add and delete sessions) in the UIs. Fix sessions synchronization and GUI unsynced state
- Time tracking management (list, add and delete sessions) in the UIs. Fix sessions synchronization and GUI unsynced state
- Create a new line (not blocking title/menus/status) for Android search, prepend completed calendar events with 🗹, opening a notification focuses on it, fix edit task/description string mismatch, fix Android compilation error
- (all) show sessions with valid syntax, (android) use the same icons as in the GUI, ability to manually create sessions when none exist, reduce search input height
- *(parser)* Parse days of the week and parse past time as the next day
- *(Android)* Use task-bound hash for notifications s.t. newer alarms overwrite older ones
- Clickable collection name (header) toggles show all collections (Android and GUI, https://codeberg.org/trougnouf/cfait/issues/24 )
- Add a lock toggle for yanked tasks and create sub-tasks (GUI and Android clients, https://github.com/trougnouf/cfait/issues/13 )
- *(android)* Swipe to switch collection ( https://codeberg.org/trougnouf/cfait/issues/3 )
- *(android)* Improve swipe collections navigation
- *(android)* Improve swipe collections navigation
- *(android)* Improve swipe collections navigation (3)
- *(android)* Improve swipe collections navigation (4)
- *(android)* Improve swipe collections navigation (5)
- *(android)* Improve swipe collections navigation (6: jump to "Custom" list when selecting multiple collections and speed-up swiping/switching collection tab)
- *(android)* Improve swipe collections navigation (7: eliminate visual glitch in swiping animation)
- *(android)* Improve swipe collections navigation (10)
- *(android)* Improve and debug swipe collections navigation (11)
- *(android)* Improve swipe collections navigation (12: fix auto-hide toggle and unresponsive custom tab, fix post-swipe vertical scroll delay)
- *(android)* Improve swipe collections navigation (13: switch ordering, fix unresponsive area)
- *(android)* Change search icon color when search is active in the background and auto-focus on search bar when it pops out

### 🐛 Bug Fixes

- Fix Android build
- *(gui)* Fix loss of input focus after a refresh
- *(help)* Fix some mismatching strings
- *(strings)* Fix pluralization
- *(android)* Fix language selection overlap and application
- *(local)* Process local tasks directly without going through the journal, fixes https://codeberg.org/trougnouf/cfait/issues/32
- *(android)* Support BCP-47 locales
- *(locale)* Fix mismatched strings
- Fix some timezone edge cases
- *(ui)* Ensure that local Trash and Recovery collections are shown on the bottom and only when not empty
- Fix github issue templates
- *(android)* Restore search field s.t. bottom of text is not cut-off
- *(gui)* Fix an issue where another collection than the current active one(s) may be temporarily shown during synchronization
- Fix calendar events' newline character
- *(Android)* Fix error handling on addSession
- *(sorting)* Prevent ghost alarms left by other clients from pinning future tasks to the top of the list
- *(android)* Export local tasks dialog was shown when switching from Local to All/Custom
- *(android)* Improve swipe collections navigation (14: restore interleaved sorting)
- *(android)* Improve swipe collections navigation (16: fix half-swipes and panic back swipes after random)
- *(android)* Improve swipe collections navigation (17: ensure checkboxes are still easily togglable, restore sorting (local last), unrelated/style: restore search icon color during search)
- *(android)* Improve swipe collections navigation (17: create and jump to custom tab by selecting new write/viewable collection while focused on a different collection)
- *(Windows)* Fix Windows compilation (notifications are fire-and-forget, not interactive)

### 💼 Other

- Translated using Weblate (French)

Currently translated at 96.2% (312 of 324 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Translated using Weblate (French)

Currently translated at 100.0% (324 of 324 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Translated using Weblate (French)

Currently translated at 97.1% (335 of 345 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Added translation using Weblate (Chinese (Simplified Han script))
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 22.5% (80 of 355 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Translated using Weblate (French)

Currently translated at 95.4% (339 of 355 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Translated using Weblate (English)

Currently translated at 100.0% (378 of 378 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/en/
- Translated using Weblate (French)

Currently translated at 88.0% (333 of 378 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 40.9% (152 of 371 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 46.6% (173 of 371 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 55.2% (205 of 371 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Translated using Weblate (French)

Currently translated at 98.6% (372 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/fr/
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 71.8% (271 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Translated using Weblate (Chinese (Simplified Han script))

Currently translated at 75.5% (285 of 377 strings)

Translation: Cfait/Cfait
Translate-URL: https://translate.codeberg.org/projects/cfait/cfait/zh_Hans/
- Added translation using Weblate (French)
- Translated using Weblate (French)

Currently translated at 100.0% (1 of 1 strings)

Translation: Cfait/Android fastlane short description
Translate-URL: https://translate.codeberg.org/projects/cfait/android-fastlane-short-description/fr/
- Update translation files

Updated by "Cleanup translation files" add-on in Weblate.

Translation: Cfait/Android fastlane short description
Translate-URL: https://translate.codeberg.org/projects/cfait/android-fastlane-short-description/

### 🚜 Refactor

- Fix sync issue w/ rapidly changing states and consolidate sync logic across clients

### 📚 Documentation

- Document boolean search
- Update Android screenshot to v0.5.1
- Fix CLI help menu
- Remove unused strings and add missing translations
- Fix CLI help alignment
- Replace title case with sentence case
- Update translations
- Pluralize translations
- Simplify translations
- Improve fr translation
- Add link to translation page in settings, fix Android compilation and add missing strings
- Add link to translation page in settings, fix Android compilation and add missing strings
- Add https://translate.codeberg.org/projects/cfait/ to README.md
- Remove unused strings
- Remove syntax strings which should not be translated from locales
- Add de, es, it translations and complete fr
- Localize short_description.txt (de, es, it)
- Update GUI and Android screenshots to v0.5.2

### ⚡ Performance

- *(android)* Improve swipe collections navigation (15: improve switching performance)

### 🎨 Styling

- *(android)* Show collections list in the bottom by default, reduce spacing between collections, restore collection+++ behavior for Custom and replace All header
- *(android)* Add settings+help combined icon (superposition of GNOME icons with dimmer red)

### 🧪 Testing

- Fix cargo check without --all-features (reported by Geoffrey Frogeye)

### ⚙️ Miscellaneous Tasks

- Cleanup duplicate strings
- Fix tests
- Fix Android compilation issues
- Update test
- *(android)* Reduce example task s.t. it fits in one line
- Release cfait version 0.5.2
## [0.5.1] - 2026-02-25

### 🚀 Features

- Add --root flag (TUI, GUI)
- *(client)* Implement automatic CalDAV root discovery and URL correction
- *(gui)* Keep focus in input bar after entering a task
- Add done/cancel actions to alarm (suggested by busterkeaton) and implement auto-refresh
- *(ui)* Add done/completed tasks expansion arrow (and advanced settings to control # of tasks shown)
- Android rolling release (build a new APK on every commit)
- Pre-fill sub-tasks tags and location with that of their parent
- Implement time tracking (between start and done) and `spent:` syntax (suggested by savion)
- Implement recursive subtask reset ( https://github.com/trougnouf/cfait/discussions/5#discussioncomment-15734983 ) and unify task completion logic
- Add boolean search with |or, -not and parentheses (and implied and) ( https://github.com/trougnouf/cfait/issues/4 )
- Show blocking task (in addition to blocked-by), link both ways
- Highlight search and sidebar filters red when they result in an empty task list
- *(android)* Replace {snooze (preset), snooze..., done} with {snooze..., start, done} and show time spent after start
- Add work session recording w/ matching calendar events, show completed datetime in the task list and expose COMPLETED date tracking with done: property in the smart syntax
- Use distinct completed/canceled icons and full datetime for done: tasks (syntax and UI)
- Add Trash calendar (unrelated: fix calendar event creation datetime to better match completion time)
- *(gui)* Keyboard shortcuts parity with TUI
- *(store)* One-step increase/decrease from default priority
- *(android)* Second BackHandler to exit search UI, clear yanked task, clear search text, and clear tag/location filters before exiting the app
- Expose blocks:link_to_other_task in GUI and Android task list
- Reduce tags&locations list and counts based on search terms
- Handle multi-task start/pause/stop and unify alarm snooze/dismiss; add Task.handle_* helpers and mobile boxed mutator; improve time/session tracking, ICS duration & recurrence handling, and settings UI typing/layout
- Reduce duplicate alarms
- Make sub-tasks of blocked tasks implicitly blocked and sort entire group to a lower bin
- Improve calendar events creation length: all-day same-day -> single all-day event, all-day different days -> start and due event, specific time (<24h) -> span length of event, specific time (>24h) -> two separate 1h events
- Further calendar events improvements (and fix toggle-all button)
- *(calendar)* Improve calendar events handling: merge 2 consecutive 1-day tasks into 2, avoid copying RRULE of completed recurrent tasks
- Centralize help and document keyboard shortcuts in GUI
- Ensure sessions information is kept across clients, more calendar integration improvements&fixes&tests
- Add background synchronization (Android) and synchronization daemon (desktop) ( https://codeberg.org/trougnouf/cfait/issues/30 )
- Add AND/OR tag selection in Android, (all clients) default to AND and fix OR tags and locations selection s.t. others are not filtered out
- Ensure multiple clients/instances can share the same local collection concurrently
- Parse "@daily 09:00" format (shorter than "@daily @today 09:00")
- *(gui)* First esc does not clear the search

### 🐛 Bug Fixes

- *(model)* Fix missing and flickering tags introduced in refactor
- *(tui)* Suppress alarm in completed/canceled tasks
- *(recurrence)* Centralize task recycling logic in model and fix various recurrence (incl. cancellation, until, smart-syntax) bugs
- *(recurrence)* Use local date for all-day search floor to prevent skipping occurrences ( https://github.com/trougnouf/cfait/discussions/5#discussioncomment-15652213 )
- *(android)* Explicitly follow redirects (fix some Android connection issues, reported by yknip)
- *(android)* Fix Android 13 timezone issue reported by busterkeaton
- *(gui)* Retain scroll position when yanking a task
- *(sync)* Handle fatal 400/403/415 errors and duplicate CREATEs in journal sync, unblocking stuck queues
- *(sync)* Reconstruct missing HREF in Update actions to prevent PUT / 403 errors
- *(ci)* Fix Android rolling release
- *(android)* Resolve infinite loading in TaskDetailScreen by using direct task lookup
- *(android)* Restore custom redirect logic but more secure, https://codeberg.org/trougnouf/cfait/issues/28
- *(gui)* Ensure tasks from all visible calendars are shown in the task list
- *(windows)* Force server-side decorations on Windows 10 (fixes cursor shifting issue reported by busterkeaton) and add --force-csd launch option
- *(gui)* Hide tasks from disabled calendars (reported by busterkeaton)
- *(android)* Color past due-dates red for all-day tasks
- *(sorting)* Fix priority inheritence in paused sub-tasks
- *(android)* Fix android client initialization
- *(android)* Restore settings panel scroll
- *(pkg)* Fix Arch cfait-git PKGBUILD's pkgver
- Fix deletion from recovery calendar and hide recovery and trash local calendars when empty
- *(sort)* Propagate sort value from sub-tasks to parents
- Show timer in task list when there is no provided time estimation (GUI/TUI)

### 💼 Other

- Implement UID-based upsert for imports and auto-repair duplicates on load ( https://github.com/trougnouf/cfait/issues/8 )
- *(android)* Handle coroutine cancellation gracefully
- Replace calendar with collection wording in CLI

### 🚜 Refactor

- Centralize view logic (per-client shadowing logic -> Task::resolve_display_properties)
- Optimize TaskStore perf (O(1) lookups) and centralize visibility logic
- Decompose Task god struct
- Modularize sync logic
- Transition from global AppPaths to AppContext
- Transition from global AppPaths to AppContext (everywhere)
- Switch from custom redirect.rs to tower_http::follow_redirect
- Centralize task logic into a new shared controller
- Refactor client sync logic, consolidate CLI help

### 📚 Documentation

- Self-document config file
- Switch from title case to sentence case and replace the term "calendar" with "collection"

### ⚡ Performance

- Optimize event deletion speed

### 🎨 Styling

- Make overdue date(time) red in task list (suggested by Kursti)
- Syntax highlighting search queries and +cal/-cal ( https://codeberg.org/trougnouf/cfait/issues/24 )
- *(android)* Contrasting tag colors ( https://codeberg.org/trougnouf/cfait/issues/27 )
- *(GUI, TUI)* Dim completed & canceled tasks, add strikethrough_completed advanced config (suggested by busterkeaton)
- *(windows)* Embed application icon (reported by busterkeaton)

### 🧪 Testing

- Android rolling release is built only on successful tets

### ⚙️ Miscellaneous Tasks

- *(release)* Update flathub screenshots
- *(release)* Bump version up due to accidental previously yanked v0.5.0
- Release cfait version 0.5.1
## [0.4.9] - 2026-01-28

### 🚀 Features

- *(store)* Group tags (and sort them) in a case-insensitive way in the tags list (requested by Christian Meixner)
- Add a (weighted) random task selector ( https://codeberg.org/trougnouf/cfait/issues/17 )
- *(randomizer)* Only pick from is:ready tasks
- *(sorting)* Sort done/canceled tasks by most recently done/canceled first
- *(core)* Send user agent to CalDAV server (suggested by Geoffrey Frogeye)
- *(android)* Add export all data debug option
- *(core)* Detect and reject non-VTODO collections
- *(core)* Move tasks rejected by the CalDAV server to a local recovery calendar
- *(android)* Remember tags and locations when coming back from a task's details
- *(recurrence)* Switch from respawning to recycling + regeneration (compatibility with other clients, https://github.com/trougnouf/cfait/discussions/5 )
- Make yanked task clippy/sticky (GUI, TUI)
- *(gui)* Escape exits the input field then clears the yanked task then the search filter then the tags/locations ( https://codeberg.org/trougnouf/cfait/issues/9 )
- Condense start-due datetime in task list when a task has the same date but different times
- Link done recurrence snapshots to their parent

### 🐛 Bug Fixes

- *(rfc5545)* Clamp priority to 9 ( https://codeberg.org/trougnouf/cfait/issues/22 )
- *(android)* Show local timezone (not UTC) in tasks list ( https://codeberg.org/trougnouf/cfait/issues/23 )
- *(android)* Add imePadding s.t. keyboard does not hide bottom of settings screen ( https://codeberg.org/trougnouf/cfait/issues/23 )
- *(recurrence)* Preserve both start and due date(time) in recurrence
- *(migration)* Ensure that tasks are present on the server before deleting them from the local store
- *(core)* Propagate newly created href to journal and guard empty DELETE
- *(android)* Ensure task migration message does not repeatedly come up
- *(gui)* Fix auto-scroll (focus to current task) in filtered view
- Fix increase/decrease priority action
- *(recurrence)* Remove COMPLETED timestamp on recurring task recycling ( https://github.com/trougnouf/cfait/discussions/5 )
- *(tui)* Ensure tags are not cropped; use visual width instead of char count ( https://codeberg.org/trougnouf/cfait/issues/26 )

### 📚 Documentation

- Add disroot as a CalDAV provider

### 🎨 Styling

- *(android)* Tighter task list layout ( proposed by busterkeaton )
- *(android)* Fix spacing of loading/spinning icon

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.4.9
## [0.4.8] - 2026-01-20

### 🚀 Features

- *(tasks)* Implement time estimation ranges (e.g. ~10m-3h) with compatible search logic
- *(gui)* Initial work on keyboard shortcuts ( https://codeberg.org/trougnouf/cfait/issues/9 )
- *(gui)* Towards keyboard shortcuts
- *(gui)* Expandable description field with scroll bar
- *(android)* Parse new alias definitions in task input bar
- *(gui)* Double click to edit a task ( https://codeberg.org/trougnouf/cfait/issues/9 )
- *(tui)* Improved task editing experience with enter for newline, basic markdown highlighting, and markdown viewer in the task details view (with plain-text auto-detection to maintain basic newlines) ( https://codeberg.org/trougnouf/cfait/issues/14 )
- *(tui)* Support horizontal scrolling in the description editor and multi-byte characters ( https://codeberg.org/trougnouf/cfait/issues/14 )
- *(config)* Differentiate between corrupted and missing config files ( https://codeberg.org/trougnouf/cfait/issues/13 )

### 🐛 Bug Fixes

- *(android)* Maintain keyboard after adding task and jump to task instantly instead of with animation
- *(recurrence)* Preserve task UID on cancellation to prevent duplication
- *(tui)* Restore onboarding ( https://codeberg.org/trougnouf/cfait/issues/13 )
- *(gui)* Load iced_aw fonts to render correct icons in color picker (reported by beh bah)
- *(android)* Disable keyboard autocorrect for login fields and enable url / password mode ( https://codeberg.org/trougnouf/cfait/issues/15 )
- *(android)* Fix cursor position in new task field and adjust size of task description field when keyboard is out
- *(tests)* Properly isolate all write tests in a temporary directory (reported by Geoffrey Frogeye)
- *(model)* Fix stuck recurring tasks by normalizing AllDay/EXDATE calculations to UTC
- *(gui)* Auto-scroll to task (linked or up/down)

### ⚡ Performance

- Pre-calculate and cache is_blocked status and parent attributes (fixes O(N^2) rendering lag)

### 🎨 Styling

- Use consistant style for start - due date(time) (hourglass_empty - hourglass_full), avoid identical start/due date(time) repetitions
- *(gui)* Restore calendar icon for due date(time) when it's the only date(time) shown

### ⚙️ Miscellaneous Tasks

- *(android)* Bump min SDK to 28 (Android 9) due to uniffi v0.31 update
- Move Cargo.lock update to every release and disable check
- Release cfait version 0.4.8
## [0.4.7] - 2026-01-13

### 🚀 Features

- Show start date (if not yet started) in tasks list
- Add ^@ syntax (sets both start and due date(time)). sorting: if parent is canceled/paused/done, use that for the whole group
- Implement multi-select filtering and focus for tags & locations, make the clear icon always visible, improve UI and make it consistent between GUI and Android
-  feat: implement multi-select filtering and focus for tags & locations and make the clear icon always visible on Android (feature parity with GUI)

### 🐛 Bug Fixes

- Ignore Release KeyEvents (fixes doubled characters on Windows reported by Christian Meixner
- *(adapter)* Use X-ESTIMATED-DURATION for all-day tasks to fix RFC 5545 / iCalendar standard compliance
- *(android)* Hide keyboard after adding task s.t. it is visible when we jump to it ( https://codeberg.org/trougnouf/cfait/issues/7 ), ensure that the jump-to-top icon hiden after 3-seconds and after getting pressed

### 📚 Documentation

- Confirm MacOS compatibility and add CONTRIBUTING.md file

### 🎨 Styling

- *(gui)* Improve tags list UI
- *(gui)* Remove empty space between title bar and input bar

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.4.7
## [0.4.6] - 2026-01-11

### 🚀 Features

- *(gui)* Navigate back to tasks list after moving a task
- *(sorting)* Sort task and its sub-task(s) according to the first sort_rank of the whole group
- *(sorting)* Propagate more tie-breaker fields from sub-tasks
- *(gui)* Ensure resize handles are available in every panel
- *(parser)* Parse time in recurrences
- *(calendar)* Move completed tasks to the time they were done (and add undated done tasks)

### 🐛 Bug Fixes

- Moving a task no longer leaves the old calendar event
- *(windows)* Avoid spawning a console window with the GUI ( https://codeberg.org/trougnouf/cfait/issues/8 )
- Fix respawn logic and timezone handling for recurring tasks (reported by Antoine Bargel)
- *(android)* Correct cursor position in high DPI screens
- Fix legacy data migration and floating time parsing for all-day tasks
- *(recurrence)* Fix respawn logic and timezone handling for recurring tasks (for realz this time)

### 🚜 Refactor

- *(gui)* Reduce theme repetition, rm fragile manual count and position-dependent code

### 📚 Documentation

- *(readme)* Update F-Droid link to com.trougnouf.cfait

### 🎨 Styling

- *(gui)* Add a bunch of themes
- *(gui)* Improve themes
- *(gui)* Add Random theme and make it the default
- *(gui)* Switch to fastrand randomness generator
- *(gui)* Add two rounded corners
- *(gui)* Allow server-side decorations with --force-ssd flag ( https://codeberg.org/trougnouf/cfait/issues/11 )
- Show calendar's name in its own color, add ++... with each calendar's color (GUI, Android, https://codeberg.org/trougnouf/cfait/issues/4 proposed by devinside)
- *(android)* Add theme switch w/ light, dark, dynamic light, dynamic dark, default to dynamic auto-detect ( https://codeberg.org/trougnouf/cfait/issues/6 proposed by devinside )
- *(gui)* Only show calendar+++ when not in calendar list view. chore: update screenshots

### ⚙️ Miscellaneous Tasks

- *(flatpak)* Add changelog to future releases
- *(flathub)* Add release notes, categories, keywords, controls
- Update rust licenses
- Release cfait version 0.4.6
## [0.4.5] - 2026-01-06

### 🚀 Features

- Allow canceling single occurrence of recurring task
- Allow grace period before pushing tasks with a future date in the future/bottom bin
- *(gui)* Make window draggable in the settings and help panels
- Improve Android related-tasks navigation
- Show related-task icon in the tasks list (Android, GUI)
- *(android)* Add jump back up shortcut button
- Allow default sorting priority > 9

### 🐛 Bug Fixes

- Test concurrency issue
- *(android)* Rm dead scroll zone in Settings > Manage calendars

### 📚 Documentation

- *(installation)* Mention MacOS binaries provided by Martin Stut and Flatpak Linux binaries
- *(readme)* Add Android build instructions

### 🎨 Styling

- *(gui)* Merge local calendars and data management settings

### ⚙️ Miscellaneous Tasks

- *(android)* Rename com.cfait to com.trougnouf.cfait
- *(flathub)* Attempt auto-release
- Fix prepare_release.py
- Release cfait version 0.4.5
- Fix flathub-release CI script
## [0.4.3] - 2026-01-05

### 🚀 Features

- Add import ics local store function and warn Android users about upcoming name change
- Allow opening ics files from outside the app. Show Android migration warning max. once a day.
- Allow changing default priority for sorting ( https://github.com/trougnouf/cfait/discussions/3 )

### 🐛 Bug Fixes

- *(android)* Local store backward compatibility: add missing #[serde(default)] to Task fields

### 📚 Documentation

- *(comments)* Add a short descriptive header to each source file
- *(comments)* Comment on possible required cache / local store version bumps (and bump cache version)

### ⚙️ Miscellaneous Tasks

- *(flathub)* Update org.codeberg.trougnouf.cfait.yml per request and automate prepare_release
- *(flathub)* Rename to com.trougnouf.Cfait
- *(flatpak)* Try to auto-update
- *(flathub)* Update cargo-sources.yml
- *(flathub)* Fix linting issues
- Prep for v0.4.3 release (last before com.cfait to com.trougnouf.cfait migration on Android)
- Release cfait version 0.4.3
## [0.4.2] - 2026-01-03

### 🐛 Bug Fixes

- *(parser)* Restore RFC5545 duration compliance (use custom tag for DUE+DURATION)

### 💼 Other

- Add filesystem permission for app data directory

### ⚙️ Miscellaneous Tasks

- Update Flatpak manifest for v0.4.1 release
- Set GUI as default command for Flatpak
- Release cfait version 0.4.2
## [0.4.1] - 2026-01-03

### 🚀 Features

- *(tui)* Implement custom snooze (and change default snooze durations from 15m,1h to 1h,1d)
- Include sub-tasks in search results when parent matches
- *(sorting)* Sort started tasks like standard tasks (due date then priority), replace is:ongoing with is:started
- *(android)* Allow pressing enter to edit a task's title
- *(local)* Support multiple local collections
- Support manual #blocked tag, move blocked tasks away from bins 1,2,3
- *(ui)* Click on a linked task to jump to it (GUI, TUI (L), Android)
- *(gui)* Decouple exit button from scrollable area in settings and help
- *(android)* Make url and geo icons more accessible (new action in tasks list and task details)
- *(parser)* Parse "until" (date(time)) and "except" (date(time), month, year, comma-separated) in recurrence. Fix timezone issue.

### 🐛 Bug Fixes

- *(android)* Show canceled tasks with the correct checkbox (previously appeared as done)
- *(priorities)* Per https://github.com/trougnouf/cfait/discussions/3
- Move tasks between calendars
- *(android)* Force visibility on write calendar
- *(android)* No longer showing disabled calendars when moving a task from the description screen
- *(sorting)* Treat paused tasks like unstarted tasks
- *(parser)* Fix some parser recurrence edge cases

### 🎨 Styling

- *(help)* Add hugicon in help header (GUI, Android)
- *(help)* Add more hugicons (GUI, Android)

### ⚙️ Miscellaneous Tasks

- Add 10" tablet screenshots, complete Cargo.toml exclude
- Prepare for release v0.4.1
- Release cfait version 0.4.1
## [0.4.0] - 2025-12-30

### 🚀 Features

- *(search)* Add work mode ("is:ready") suggested by Martin Stut, relative start time ("^<2d"), or not set (append !, e.g. "^<2d!")
- Calendar integration
- Export local store to ics

### 🐛 Bug Fixes

- *(Local)* Add migration path to avoid catastrophic data loss (reported by montherlant)

### ⚡ Performance

- *(calendars, migration)* Implement concurrent calendar sync with Android WorkManager support

### 🎨 Styling

- *(gui)* Show dependency tree even in search mode
- *(calendar)* Event description <- put task description before managed event warning

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.4.0
## [0.3.14] - 2025-12-29

### 🚀 Features

- Sub-locations (e.g. @@home:office, like sub-tags)
- Location-based aliases (e.g. @@aldi:=#groceries)
- Alias shadowing: not showing alias expansions in tasks list view
- Add generic related-to relationships
- *(tui)* Show yank and its actions in the main help bar

### 🐛 Bug Fixes

- Multiple relationships issue
- *(tui)* Restore priority color in tasks list (regression)
- *(tui)* Allow editing long titles with horizontal scrolling

### 📚 Documentation

- Fix reminder wording (not an alarm atm)
- Update screenshots to upcoming v0.3.14

### ⚡ Performance

- Eliminate disk I/O on every action, excessive cloning in hierarchy, and redundant sidebar recalculation

### 🎨 Styling

- Don't show sub-task's location in the tasks list when it is the same as its parent's
- *(tui)* Align tags to the right
- *(tui)* If a task title is too long, truncate it... and repeat it in the description
- *(tui)* Show title in the description only if it does not fit in the tasks list

### ⚙️ Miscellaneous Tasks

- Prepare for flathub release
- Release cfait version 0.3.14
## [0.3.13] - 2025-12-28

### 🚀 Features

- Add core logic for all-day/specific-time events, reminders, and alarm snoozing
- Add reminder UI elements
- Implement TUI and GUI notifications (rem:TIME), and fix(sync): robustly handle MOVE conflicts and no-op moves (otherwise journal could get stuck)
- Implement configurable auto-reminders and fix parsing for rem:, today, and tomorrow
- *(reminders)* Implement Android notifications, fix GUI snooze, enhance reminder parser (incl. rem:in TIME, relative to now)
- *(android)* Migrate alarms to WorkManager and add alarm index cache
- *(notifications)* GUI and TUI wait until 1st network sync attempt is done before firing notifications
- *(android notifications)* Add two snooze options
- *(android)* Add "Create subtask" action
- Parse time units in snooze settings presets
- *(parser)* Add rem:in ... and rem:next ...

### 🐛 Bug Fixes

- Invisible(->pushed back) tasks after cutoff date
- Local time shift
- *(android)* Working Android notifications, still need to fix Dismiss issue
- *(android)* Dismissing reminders is taken into account right away
- *(android)* Snooze

### 📚 Documentation

- Update documentation with due:datetime
- Update GUI screenshot to v0.3.13

### 🎨 Styling

- Do not show timestamp for all-day tasks
- Show appropriate time unit when editing a task
- Properly syntax-highlight rem:date time
- *(settings)* Move "Manage calendars" right below the connexion settings (Android & GUI)

### ⚙️ Miscellaneous Tasks

- Lint
- Rm strip and debug from Arch packages
- Release cfait version 0.3.13
## [0.3.12] - 2025-12-24

### 🚀 Features

- *(sort)* Prioritize urgent tasks and make urgency rules configurable (priority and days to overdue).
- *(parser)* Handle escape character

### 🐛 Bug Fixes

- *(android)* Use i32 for token indices to match Kotlin/JVM Int type

### 🚜 Refactor

- *(android)* Unify syntax highlighting with core Rust parser via UniFFI.

### ⚙️ Miscellaneous Tasks

- Remove dead code
- Lint
- Release cfait version 0.3.12
## [0.3.11] - 2025-12-24

### 🚜 Refactor

- *(parser)* Improve smart input engine for robust date, recurrence, and metadata parsing. (Fixes bug where short dates were parsed as start dates.)

### 🧪 Testing

- Improve test coverage

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.11
## [0.3.10] - 2025-12-24

### 🐛 Bug Fixes

- *(parser)* Correct recurrence parsing, fix highlighting, and add comprehensive README compliance tests

### 📚 Documentation

- Fix README syntax error & minor update
- Add Matrix chatroom to README

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.10
## [0.3.9] - 2025-12-23

### 🚀 Features

- *(android)* Improve (multi-words) highlighting, add pull down to refresh, add move in task menu, add description indicator in tasks list
- *(ui)* Add clickable URL/Geo icons and randomized location tab
- *(ui)* Count only active tasks (header)

### 🐛 Bug Fixes

- *(cache)* Add versioning to invalidate stale caches on upgrade
- *(geo)* Allow entering spaced geocoordinates (e.g. geo:53.046880, -121.105042)

### 🎨 Styling

- *(android)* Only show Move if there are multiple calendars
- Add some random icons to the mix, include Android

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.9
## [0.3.8] - 2025-12-23

### 🚀 Features

- *(core/ui)* Add locations, URLs, recursive aliases with cycle detection, quoted string support, safer alias syntax (:=), and filter views by location
- *(search)* Implement implicit location search and jump-to-location navigation

### 🐛 Bug Fixes

- *(journal)* Skip ghost pruning for local calendar to prevent data loss
- *(core)* Optimize sync, fix GUI inputs, and improve alias expansion
- *(core)* Resolve timezone and multi-word date parsing bugs

### ⚡ Performance

- Compact journal on sync

### 🎨 Styling

- Add location icons and color

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.8
## [0.3.7] - 2025-12-21

### 🚀 Features

- *(ui)* Refine smart input syntax highlighting (different color per type), add (optional) "in" date keyword, set default cutoff to 2 months

### 🐛 Bug Fixes

- *(sync)* Correctly journal offline task moves to prevent duplication
- *(android)* Preserve tag filter and sidebar state on back navigation using rememberSaveable

### 🚜 Refactor

- *(core)* Centralize journal application logic, improve sort consistency, and fix sync race conditions

### 📚 Documentation

- Mention Baikal in README since it has been explicitly tested

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.7
## [0.3.6] - 2025-12-21

### 🚀 Features

- *(client)* Add Digest authentication and fix Android SSL

### 📚 Documentation

- *(android)* Published on F-Droid

### ⚙️ Miscellaneous Tasks

- Lint
- Release cfait version 0.3.6
## [0.3.5] - 2025-12-20

### 🚀 Features

- *(ui)* Decorate @^special statements and #tags in real time in the input bar
- *(android)* Press once to search

### 🐛 Bug Fixes

- *(android)* Default sortMonths = 2 months
- *(android)* Decorate only valid special statements in the smart bar

### 📚 Documentation

- Add suggested CalDAV providers, TOC to the README

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.3.5
## [0.3.4] - 2025-12-19

### 🚀 Features

- *(android)* Improve offline remote calendar handling, show current state of connexion
- *(ux)* Refactor settings for instant save, adjust layout, and enhance Android options

### 🐛 Bug Fixes

- *(sync)* Resolve journal deadlock by handling 412 conflict on task creation

### ⚙️ Miscellaneous Tasks

- *(skip)* Fix overeager app store inclusion in README
- *(release)* Prepare for v0.3.4
- Release cfait version 0.3.4
## [0.3.3] - 2025-12-19

### 🚀 Features

- *(android)* Add loading state to task save (visual feedback) and handle coroutine cancellation
- *(workflow)* Implement pause/stop states
- *(android)* Implement optimistic UI updates for instant task creation and modification
- *(android)* If no calendars are setup (Local-only) then default sideview to Tags rather than Calendars
- *(android)* Show task duration

### 🐛 Bug Fixes

- Resolve infinite sync loop and implement optimistic save with auto-scroll to task in Android
- *(tui)* Fix double flipping logic

### 📚 Documentation

- Update README & TUI help w/ start/stop/pause shortcuts
- Update screenshots to upcoming v0.3.3

### 🎨 Styling

- *(gui)* Make RustyDark the default theme
- *(tui)* Dynamic details height

### ⚙️ Miscellaneous Tasks

- *(fdroid)* Simplify screenshot names
- Prepare for release v0.3.3
- Disable signed commit
- Release cfait version 0.3.3
## [0.3.2] - 2025-12-18

### 🐛 Bug Fixes

- Don't include uniffi/mobile for TUI/GUI desktop builds
- *(android)* Replace target_os = "android" with feature = "mobile"

### 📚 Documentation

- Update README

### ⚙️ Miscellaneous Tasks

- *(android)* Generate static Android version number for F-Droid release
- Release cfait version 0.3.2
- Auto-generate changelogs (fastlane and CHANGELOG.md), backfill previous ones
- Add Cargo.lock
- *(android)* Rm i686-linux-android
- *(fdroid)* Work on Reproducible Builds
- *(fdroid)* Pin rust version for F-Droid build
- *(fdroid)* Work on reproducible build (locked ndkVersion, RUSTFLAGS)
- *(fdroid)* Strip dependenciesInfo
- *(fdroid)* Set Android rust toolchain in rust_toolchain.toml
## [0.3.1] - 2025-12-17

### 🐛 Bug Fixes

- *(android)* Prevent crash on "Show all calendars" toggle on first run by handling missing config file
- *(android)* Prevent sync conflicts by writing post-sync ETag/sequence back to store

### ⚙️ Miscellaneous Tasks

- Prepare for 0.3.1
- Release cfait version 0.3.1
## [0.3.0] - 2025-12-17

### 🚀 Features

- *(ux)* Unhide and activate default calendar on startup
- *(core)* Implement hierarchical tag filtering and sidebar aggregation
- *(gui)* Retroactively apply new aliases to existing tasks
- *(core)* Support inline alias definition (#a=#b,#c) with retroactive application in TUI and GUI
- *(core)* Implement tag inheritance for child tasks (GUI+TUI) and hide redundant tags in the GUI task list, fix GUI yank button
- *(gui)* Add promote button for child tasks
- *(workflow)* Auto-clear yanked state after linking (child/block) in GUI and TUI
- *(ui)* Implement priority gradient
- Fix alias expansion for sub-categories, hide expanded alias tags in list view
- *(ui)* Display CalDAV calendar colors in TUI and GUI
- *(android)* Implement native Android client using Jetpack Compose and UniFFI
- *(android)* Polish UI with NerdFonts, add calendar selection, and automate asset copying
- *(android)* Implement sidebar tabs (Calendars/Tags), advanced search, and task hierarchy
- *(android)* Optimize startup with optimistic caching, fix tag layout, add back navigation, and implement task action menu
- *(android)* Compact UI layout, custom state checkbox with (currently wrong) calendar colors, blocked-by details, and expanded action menu
- *(android)* Align UI styling with desktop (calendar colors, state backgrounds, priority text) and fix icon alignment
- *(android)* Streamline task creation and editing workflow
- *(android)* Add an arrow_right / isolate button next to each calendar
- *(gui)* Refine task row layout for title and tags
- *(android)* Auto-scroll to newly created task, tag jumping, migration tool, write calendar color
- *(android)* Add help screen (under settings)
- *(tui)* Add auto-jump on create, fix search focus, wrap long titles, reduce sidebar/list ratio
- *(gui)* Improve search UX, task row layout, and add auto-scroll
- *(gui)* Add keyboard shortcuts for focusing input fields ("/" to search, "a" for smart input)

### 🐛 Bug Fixes

- Allow starting newly created tasks
- *(store)* Ensure index update on recurring task creation and network sync
- *(core)* Prevent data loss by routing alias updates through journal instead of direct cache overwrite
- *(core)* Fail loudly on corrupted local storage instead of overwriting with empty state
- *(android)* Align play icon, implement disabled calendars in settings, and resolve kotlin deprecation warnings
- *(core)* Prevent data loss by correcting relation parsing and sync ETag propagation
- *(android)* Implement full sync on connect/refresh
- *(core)* Fix Android locking, sync consistency, and model logic
- *(client)* Prevent data loss by verifying journal queue head identity before removal
- *(mobile)* Resolve lifecycle, timezone, and data safety issues
- *(Android)* Fix build
- *(core)* Resolve persistent ghost tasks by forcing sync on empty ETags
- *(core)* Recycle recurring tasks on completion to prevent duplication
- *(ci)* Downgrade artifact actions to v3 for forgejo compatibility
- *(ci)* Grant builder user permissions for AUR generation
- *(android)* Correct kotlin dsl syntax for signing config
- *(android)* Add R8 rules for JNA/UniFFI
- *(ci)* Use absolute path for keystore to fix signing

### 🚜 Refactor

- *(core)* Deduplicate task logic and centralize path resolution
- *(gui&core)* Restore edit functionality and optimize store lookups
- *(android)* Split UI into submodules and implement task relationships

### 📚 Documentation

- Add support options and improve help
- Improve TUI help
- Add Android screenshot

### 🎨 Styling

- Convert UI text and documentation from title case to normal case capitalization
- *(android)* Modify header with active calendar info, compact tag list layout, and add sidebar footer logo
- *(gui)* Highlight task on hover, display details on click
- *(android)* Reduce space between tasks, highlight current task, allow long press for more actions
- *(android)* Dark background icon
- *(gui)* Make recurrence_icon gray
- *(gui)* Implement theme switcher with custom 'Rusty Dark' option
- *(gui)* Rusty Dark: make selector yellow-amber instead of default blue
- FeatureGraphic v1
- FeatureGraphic v2

### 🧪 Testing

- *(model)* Add unit tests for ICS relation parsing and case-insensitivity
- *(sync)* Add sync safety and concurrency tests

### ⚙️ Miscellaneous Tasks

- Lint
- Lint
- *(android)* Update versions
- Switch deb/generic-linux build from Arch to to Ubuntu 24.04 (glibc 2.39), update documentation
- Update licenses
- Fastlane stuff for Android release
- *(release)* Add signed Android build pipeline and prepare for v0.3.0
- Release cfait version 0.3.0
- *(refactor)* Centralize release logic in arch container and build in parallel
- *(android)* Update gradle to 9.2, build apk in next release
## [0.2.9] - 2025-12-08

### 🚀 Features

- *(sync)* Preserve recurring task exceptions written by other clients
- *(gui)* Click on tag jumps to it
- *(gui)* Help on hover

### ⚡ Performance

- *(sync)* Optimize VTODO parsing and exception preservation to speedup startup from empty cache

### 🎨 Styling

- *(gui)* Always align tags to the right and try to share a line with the title
- *(gui)* Switch calendar highlight from blue to amber
- *(gui)* (deterministically) randomize tag color
- *(gui)* Switch Calendars/Tags header from blue to amber
- *(gui)* Move logo/icon to the sidebar when space permits

### ⚙️ Miscellaneous Tasks

- Switch to iced 0.14.0 (dev->release)
- *(forgejo)* Build once for different Linux releases
- *(release)* Update readme and changelog for 0.2.9, add version / license to GUI help
- Release cfait version 0.2.9
## [0.2.8] - 2025-12-08

### 🚀 Features

- *(ui)* Implement smart tag navigation, search result jumping, and implicit tag matching
- *(sync)* Implement safe 3-way merge for 412 conflicts to reduce duplicate tasks
- *(core)* Safe unmapped property handling
- *(gui)* Implement optimistic cache loading for instant startup

### 🐛 Bug Fixes

- *(gui)* Reset child creation mode when unlinking/canceling the parent reference
- *(tui)* Use default color for default text for white bg terminals compatibility
- *(core)* Optimize unmapped property parsing and ensure backward compatibility

### 📚 Documentation

- *(readme)* Mentian Mint

### 🎨 Styling

- *(gui)* "select" active task

### ⚙️ Miscellaneous Tasks

- Lint
- Update CHANGELOG
- Lint
- Release cfait version 0.2.8
## [0.2.7] - 2025-12-06

### 🚀 Features

- *(ui)* Display active task count next to each tag in GUI and TUI sidebars
- *(core)* Implement Start Date (DTSTART) with smart input parsing, sorting, and recurrence compatibility
- *(tui)* Implement PageUp/PageDown scrolling for sidebar lists
- *(tui)* Re-use '*' keybinding to clear all selected tags in tags view
- *(gui)* Add 'Clear All Tags' button to sidebar
- *(GUI)* Add help screen, use icons for help and settings
- *(gui)* Implement custom draggable and resizable client-side decorations
- *(gui)* Make the entire window header draggable

### 🐛 Bug Fixes

- *(tui)* Enable cursor movement in task creation input field
- *(gui)* Swap delete/cancel icon positions and adjust icons padding to prevent cropping

### 🚜 Refactor

- *(gui)* Decompose monolithic update logic into domain-specific modules
- *(gui)* Upgrade to iced 0.14-dev for native window resizing support

### 📚 Documentation

- Add icon to README

### 🎨 Styling

- *(tui)* Improve highlight contrast and right-align tags for readability
- Update logo (nerd-fonts cat -> Font Awesome, CC-BY-SA-4.0, license in LICENSES/nerd-fonts)
- Cleanup new logo
- Fix cropped cat outline
- *(gui)* Use ghost buttons for task actions and highlight destructive operations
- *(gui)* Add padding right of scroll bar to separate it from resizing
- *(gui)* Reduce vertical spacing between header and task list
- *(gui)* Reduce spacing between input bar and 1st task

### ⚙️ Miscellaneous Tasks

- *(release)* Update changelog for v0.2.6
- *(release)* Update screenshots for v0.2.6
- Release cfait version 0.2.6
- Fix Cargo.toml (too many keywords)
- Release cfait version 0.2.6
- Lint
- *(release)* Update readme and changelog for 0.2.7
- Release cfait version 0.2.7
## [0.2.5] - 2025-12-04

### 🚀 Features

- *(workflow)* Streamline child task creation from parent in GUI and TUI
- *(tui)* Add toggleable, dynamic, and comprehensive help screen
- *(ui)* Implement auto-jump to new tasks (TUI & GUI) and better scrollable logic
- *(GUI)* Tab between fields in the settings window

### 🚜 Refactor

- Split model, client, and gui view into granular submodules
- Modularize TUI logic into network actor and event handlers
- *(core)* Decouple search matching logic from store to model domain

### 🎨 Styling

- *(GUI)* Allow main content area to expand with window width

### ⚙️ Miscellaneous Tasks

- *(release)* Update changelog and screenshots for v0.2.5
- Release cfait version 0.2.5
## [0.2.4] - 2025-12-03

### 🚀 Features

- *(core)* Implement robust file locking with fs2, atomic journal processing, and isolated tests to prevent data corruption
- *(ui)* Enable multiline task descriptions in GUI and TUI (Alt+Enter), fix visual corruption in TUI, and propagate sync errors

### 📚 Documentation

- Move main mirror from github to codeberg

### ⚙️ Miscellaneous Tasks

- Add Codeberg Actions for testing and release builds
- Add Rust toolchain to Codeberg
- Lint
- Use lld linker to fix OOM errors and install clippy component
- Reduce memory usage by not compiling cargo-deb, 2-threads
- Self-hosted runner
- *(release)* Add cmake and nasm to fix windows cross-compilation and fix shell script syntax
- *(release)* Update changelog for v0.2.4
- Release cfait version 0.2.4
## [0.2.3] - 2025-12-01

### 🚀 Features

- *(core)* Implement layered calendars, disabled state, and robust tui visibility toggles

### 🐛 Bug Fixes

- *(gui)* Add close button to error banner and clear on success
- *(sync)* Implement safe conflict resolution (copy on 412), atomic file writes, and atomic move operations
- *(gui)* Preserve active calendar on refresh, always inject local calendar, and show duration metadata for untagged tasks
- *(model)* Treat no priority as implied normal priority (5) for sorting

### 🚜 Refactor

- *(sync)* Implement CTag caching, optimize fetch, and fix journal atomicity bugs

### ⚡ Performance

- *(net)* Constrain concurrent calendar fetches to 4 to prevent server overload
- *(core)* Implement bounded concurrency and delta sync for task fetching

### ⚙️ Miscellaneous Tasks

- Add licenses
- Lint
- *(release)* Update changelog
- Release cfait version 0.2.3
## [0.2.2] - 2025-11-29

### 🐛 Bug Fixes

- *(sync)* Handle 412 Precondition Failed by refreshing ETag and retrying

### 🎨 Styling

- [GUI] align tags with titles

### ⚙️ Miscellaneous Tasks

- Lint
- Update changelog
- Release cfait version 0.2.2
## [0.2.1] - 2025-11-29

### 🚀 Features

- *(security)* Implement secure TLS with insecure toggle and improve connection UX
- *(config)* Add setting to hide specific calendars from view
- *(core)* Implement moving tasks between calendars in GUI and TUI
- *(core)* Introduce a local-only calendar with an option to migrate tasks to a CalDAV server
- *(journaling)* Implement offline task queue and UI indicators
- *(gui)* Embed Symbols Nerd Font, iconify UI and compact task-row layout

### 📚 Documentation

- Replace #urgent with !<4 in Advanced search example
- Installation instructions (Arch, deb, Windows, generic-Linux, Rust crate)
- Update README

### 🎨 Styling

- *(gui)* Overhaul task row with a space-saving layout

### ⚙️ Miscellaneous Tasks

- Lint
- Auto-add changelog to release notes
- Release cfait version 0.2.1
## [0.2.0] - 2025-11-27

### 💼 Other

- Initial implementation of ongoing & canceled tasks (Need custom checkboxes)
- Custom checkmark icons (V,>,X)
- Implement GTD workflow and advanced search parser
- Lint
- Lint
- More linting and update screenshots for next release

### 🎨 UI/UX Improvements

- [TUI] Show [E]dit description in help bar
- [TUI] Refresh on error and add refresh key
- [GUI] add remove dependency button(s) in the task description

### ⚙️ Miscellaneous Tasks

- Automate changelog with git-cliff
- *(release)* Update changelog for v"${TAG}"
- Release cfait version 0.2.0
## [0.1.9] - 2025-11-26

### 💼 Other

- Update funding sources in FUNDING.yml
- Mention sorting
- Preparing for crate release
- Preparing for crate release
- Default to True
- Set cutoff date s.t. timed tasks are not always on top (default: 6-months). Add scroll wheel in GUI settings.
- Tags were saved with comma / not fully compatible w/ other clients
- Change hide_completed_in_tags setting to hide_fully_completed_tags (i.e. hide the tags, not the tasks within)

### 🎨 UI/UX Improvements

- [GUI] remove "<" and ">" buttons (replaced w/ Link functionality)

### ⚙️ Miscellaneous Tasks

- Release cfait version 0.1.9
## [0.1.7] - 2025-11-25

### 💼 Other

- Rename GUI window
- Mention categories
- Attempt Windows build (in next release)
- Groundwork to support RFC 9253 (DEPENDS-ON) in model
- Support RFC 9253 (DEPENDS-ON) in both TUI and GUI, and improve children dependency handling
- Add options=('!lto') to Arch PKGBUILD (fix issues when lto is enabled in makepkg.conf)
- Support aliases (set in the config file and/or in the GUI settings)
- Add subtitle
- Manually allow multiple RELATED-TO fields (not supported by icalendar library)
- Add unit tests
- Release 0.1.7

### 🎨 UI/UX Improvements

- [TUI] add space after [ ]
- [TUI] support RFC 9253 (DEPENDS-ON)
- [GUI] set window name in Linux only (fix Windows build?)
## [0.1.6] - 2025-11-24

### 💼 Other

- Rm warning
- Add icon, replace milk w/ cat food
- [README] add screenshots
- [README] add screenshots
- [README] use raw Wikimedia Commons URL for screenshots; gitlab does not support redirects
- Add cfait-git Arch PKGBUILD
- Uncomment icon
- Fix missing icon in opened application
- Refactor GUI, add support for #categories
- Refactor TUI
- Add unit tests
- Fix hide completed tasks in tab view, fix GUI save settings
- Fix bug where completed tags remained selected but invisible / hiding all tasks. Add uncategorized tag
- Fix TUI build error on CI, update screenshots

### 🎨 UI/UX Improvements

- [GUI] add Tags (categories) view (pulling from all calendars), add settings to hide completed tasks
- [TUI] Browse by category/tags, restore cache
- [GUI] fix cutoff tags AND/OR text
## [0.1.5] - 2025-11-22

### 💼 Other

- Fix github release
- Optimize binary size
- Add onboarding prompt
- Rename fairouille->cfait, automate Arch Linux PKGBUILD
- Add .deb release

### 🎨 UI/UX Improvements

- [TUI] respond to --help
## [0.1.4] - 2025-11-22

### 💼 Other

- Add license file, bump version
- Add Arch Linux PKGBUILD
- Rustache -> ferouille
- Rustache -> ferouille
## [0.1.3] - 2025-11-22

### 💼 Other

- Add recurrence support, recurrence symbol, and expand relative dates
- Add unit tests to model.rs
- Add caching (fast inter-calendar switching)
## [0.1.2] - 2025-11-21

### 💼 Other

- Allow viewing + editing description in GUI + TUI
- Bump version up to 0.1.2

### 🎨 UI/UX Improvements

- [GUI] Add priority / subtask / edit / delete buttons
- [GUI] show tasks description
## [0.1.1] - 2025-11-21

### 💼 Other

- Initial commit (working TUI with create/add/complete/delete, sorted by date+priorities
- Add multiple calendars support (from the same server)
- Add README
- Rename to rustache
- Add edit support
- Support moving cursor
- Prep for GUI
- Basic GUI (single-calendar)
- Update README

### 🎨 UI/UX Improvements

- [TUI] add scrolling
- [GUI] multi-calendar support
- [GUI] sub-tasks support
- [TUI] sub-tasks support
- [GUI] search function
- [GUI] show date. Bump to version 0.1.1
