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
Projects gain an explicit status field (active / paused / done / cancelled), replacing the name-prefix habit: overview cards carry a click-cycle status pill with All/Active/Paused/Done/Cancelled filter chips, the project detail header gets a selector, and the CLI mirrors the same field via project <name> --status (with a --status filter on projects).
Schedule-load warning: a new per-day threshold setting (pomodoro tab, 0 = off). When today's planned pomodoro estimate exceeds it, the today rail shows a compact overload pill with the exact numbers, and each project card shows a per-project today-load chip.
App operations now land in the same audit trail as the CLI (userData/cli-audit.jsonl): every mutating renderer operation is recorded — task saves are refined to add/done/undo/delete/restore/subtask with real before/after snapshots, and plan/tomato/meta/view operations map onto the CLI action vocabulary — so pickdone log shows app and CLI history in one stream.
CLI: batch done/date/category/tag over explicit task ids (with --dry-run, per-task failure reporting and chip migration on reschedule); saved views shared with the app's saved filters (view list/add/rm, list --view <name>); category folder hierarchy (category add --folder/--parent, category move with cycle guard, tree-style categories listing); list --lunar (lunar-date annotation in text and JSON output).
Project detail view gains a bottom milestone strip: one marker per milestone under the timeline, hover shows the date and linked-task progress (done/total plus the first few task titles).
Today page project association: task rows show a project-colored badge that opens the project detail, a compact filter-by-project dropdown joins the toolbar, and #/todo-list/today?project=<id> deep-links into a filtered today view (the dropdown mirrors the filter back into the URL).
CLI edit --date none|clear clears a task's date and moves it back to the todo box with exact app parity (main reminder dropped with the date, that day's schedule chips removed, friendly no-op when already undated) — replacing the old create-new-then-delete-old workaround.
Fixed
CLI category add --parent <folder> always rejected the parent (it read .folderIs off the bare id instead of the category row) — folder parenting now works.
Backup content-dedup compared the OLDEST snapshot instead of the newest (the sort was newest-first but the comparison indexed the tail): dedup never fired in the common case and a stale snapshot could be returned as the current backup.
A CLI project --status/--deadline write now reaches a running app — the project metadata loader re-reads both unconditionally instead of keeping the first load's values sticky.
list --view no longer truncates matching tasks at the fetch cap: the view's date/category conditions are pushed into the query (and results are undone-only, matching the app's smart lists).
CLI hardening: nested folder creation is rejected (category add --folder --parent), project --status X --deadline Y applies both flags, list --view X --on <date> is a usage error, batch done on already-complete tasks is an idempotent skip that no longer rewrites completedAt, app-side CSV imports land an explicit audit line, and the app-side audit appender retries across rotation windows so concurrent CLI/app rotation no longer swallows lines.
Fixed
Reliability batch: the quick-add window now self-heals after a renderer crash (the global quick-add shortcut used to keep summoning a dead transparent bar until app restart); a failed security-password decryption no longer locks the user out forever (it fell through to comparing against the ciphertext); the quit-time flush broadcast now reaches every window, so pending pomodoro ledger entries from the float window and pending task upserts survive quitting when the main window was closed to tray; renderer task rows sent through batch upsert (drag-reorder, Ctrl+S sync) are de-proxied first — nested reactive arrays could fail structured cloning and silently drop the whole batch; purging the recycle bin can no longer be undone into resurrecting physically deleted rows (attachments and chip snapshots were already destroyed); a corrupted legacy pomodoro-ledger blob is never deleted by the migration (previously unrecoverable history loss).
Consistency batch: one-click pomodoro backfill now derives its date key from the end time and shares the CLI's idempotent id shape and the 600-minute cap (midnight-crossing backfills no longer split between app and database, duplicate ledger rows from App+CLI backfilling the same slot are prevented); completing a task-bound pomodoro no longer clears the undo history via a broadcast echo; completing/reordering/restoring no longer merge into one undo step within the 400ms coalesce window; CLI overview/stats gain a completed-today caliber aligned with the app (planned-day caliber kept for compatibility); CLI-created and imported tasks insert with proper sort order instead of a constant 0; CLI repeat off --all cascades schedule-chip cleanup to future instances (no more ghost schedule entries); backfill accepts up to the database's 600-minute cap with a usage error beyond it; --remind-offset 0 no longer reports a fake success; Todoist imports keep subtask completion states; imported completed tasks fall back to due/create time instead of stamping everything with the import moment; the browser debug shim implements getById/deleteMeta.
UX/a11y batch: schedule-chip deletion joins the global 5s-undo contract (was a silent delete); plan chips whose task was deleted show a localized label instead of a raw internal id; keyboard access across the board — search clear button, habit weekday selector (now real buttons with aria-pressed), habit interval input label, todo-box sort/filter dropdowns, quadrant drag-over highlight now covers the whole quadrant (the over class had no CSS at all), subtask up/down buttons are actually focusable and subtask text click toggles it, quick-add's hidden date picker no longer traps Tab focus, the today-experimental drawer no longer leaks focusable elements when collapsed, quick-add estimate −/+ buttons get distinct labels, dependency candidate list says when it truncates at 8, calendar month arrows get titles (and the previously missing year-arrow keys now exist), habit 30-day grid tooltips show formatted dates, aria-keyshortcuts no longer announces keys that are no-ops for undated tasks, category/tag rename gets a hover hint; deleting an attachment no longer deletes the disk file if the task save failed; switching a custom white-noise file takes effect immediately (cache invalidation via a new main→renderer broadcast, preload binding included).