You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Due date/time in task row chip line: right-aligned accent text (overdue stays negative)
Full editor: pick any same-project task as parent (ParentPicker search field like labels)
Notifications KCM: optionally suppress reminders during ongoing calendar events; pick which Akonadi event calendars count (opaque/busy events only)
Panel KCM: badge modes tomorrow and high priority; dot instead of number; overdue badge color (accent vs negative); configurable panel tooltip (open, today, today+overdue, overdue, high, all views)
Panel flyout preloads at applet startup (preloadFullRepresentation: true; FullView.qml loads async once the plugin is ready)
Boot loader: Breeze gear icon (boot-gear.svg, from process-working-symbolic) while plugin / FullView load
Backend version mismatch banner: widget compares metadata.json to TaskController.pluginVersion; warning in FullView and General KCM with reinstall one-liner (KDE Store widget + outdated ~/.local plugin)
i18n catalog gap fill: ~129 UI/C++ strings (sort keys, ParentPicker, settings pages, notifications, parent errors) for de/es/fr/ja/zh_CN
Fixed
Panel startup: load PluginBackend asynchronously so the compact icon is not blocked on libkurrentplugin.so; keep task cache during Akonadi fetch (no empty badge flash)
Flyout opens immediately with boot loader; FullView loads async; indeterminate progress while Akonadi connects / tasks load
Today Catch-up (“Still open”) includes all overdue incomplete tasks (same set as the Overdue view), not only those within the former catch-up lookback window
Sort menu radios no longer stick on “None” for levels 2–3
Due dates missing in list chip and editor (#2): Qt 6 Date has no isValid; use DateTime.isValidDate() (getTime() / format fallback) instead of task.dueDate.isValid === true
Full editor project radios: folder icon sits beside the name (not under the radio circle)
Quick Add: long text wraps and the field grows (capped at quickAddMaxLines); scrolls internally beyond that; Enter still adds, Shift+Enter inserts a newline
Parent picker: TextField stays focusable for typing; label vertically centered; suggestions open upward (height clamped to space above); priority/tag chips before task name
Sidebar KCM reorder: keep dragging across multiple positions; persist order on drop
Inline editor: closes on view/filter/search/sort change, drag start, or when the task leaves the list
Inline editor: full delegate width flush with row hover; short unfold animation on open
Task list scroll: Kirigami.WheelHandler (same as Kirigami apps); removed custom KineticScrollHandler
Sort popup scroll: same Kirigami.WheelHandler + OvershootBounds / returnToBounds as the task list
Join button: first chip in the status row (before date/labels/priority); tooltip „Open / Join“ (+ translations)
Task list: touchpad overshoot rebounds (OvershootBounds + returnToBounds after wheel/flick)
Collapse: omit descendants from flat list so scrollbar matches visible rows; reserved collapse-arrow column + indent hierarchy
Task list: reuseItems, larger cacheBuffer; hover suppressed via wheelScrolling
Sidebar near-fit: grant full natural height when shortfall is at most one row; steal from sections that overflow more
Sidebar scrollbars visible on overflow; bar fits in fixed spaceSmall margin
Sidebar section heights: proportional when short; sectionsAllocated instead of -1 sentinel
Sidebar task counts stable when collapsing (default); optional “Exclude collapsed subtasks from counts”
Architecture
AbstractTaskStore boundary for task CRUD: AkonadiTaskStore (live) and MemoryTaskStore (unit tests, no Akonadi server). Optimistic UI + rollback stay in TaskController (cache, inflight, revertTodo)
Unit test kurrent-taskstore covers create/modify/move/delete and forced failure
Code quality (agent.md)
View ids, reschedule presets, priority bands as named constants; DaySpan/CursorKind/LoadState enums instead of bool params in TaskLogic
TaskListModel::dataDiffRoles always uses braces
QML spacing uses Design.space* / pads instead of raw Kirigami.Units.*Spacing
Installer
install-linux.sh: chown ~/.local before copy; drop kpackagetool6 for plasmoid install/update; legacy cleanup via rm -rf; verify file ownership after install; warn when not run via sudo; clearer fallback messages for incompatible prebuilt plugins
install-linux.sh: hard Plasma 6 / Qt 6 / KF6 gate (check_plasma6_env) before deps or binary install; unknown distros warn and ask to continue (confirm_unknown_distro; auto-continues when non-interactive)
install-linux.sh: immutable/atomic distro detection (warn_immutable_distro) with rpm-ostree, transactional-update, and Toolbx/Distrobox guidance; interactive continue prompt (auto-continues when non-interactive)
install-linux.sh: Debian/Ubuntu Akonadi runtime packages; Fedora akonadi-server/akonadi-calendar without silent failure; lib64/qml in QML env (Fedora/RHEL source installs)
install.sh: same plasmoid install path as the release installer (cmake install + verify, no kpackagetool6); lib64/qml in QML env helper