Skip to content

PickDone 0.3.0

Choose a tag to compare

@github-actions github-actions released this 10 Sep 12:25
· 144 commits to main since this release

[0.3.0]

新增

  • 项目获得显式状态字段(进行中 / 暂停中 / 已完成 / 已取消),取代在名称里写前缀的习惯:总览卡片带点击轮换的状态胶囊与 全部/进行中/暂停/已完成/已取消 筛选行,项目详情页头部提供选择器,CLI 通过 project <名> --status 读写同一字段(projects 亦支持 --status 过滤)。
  • 排程负载预警:新增单日阈值设置(番茄页签,0=关闭)。当日排程预计番茄超过阈值时,今日页时间轴头部显示过载胶囊(含具体数字),项目总览每张卡片显示该项目的今日负载徽标。
  • App 内操作统一落审计流水(userData/cli-audit.jsonl,与 CLI 同一份):渲染端每个变更操作都会记录——任务保存细分为 add/done/undo/delete/restore/subtask 并带真实前后快照,日程/番茄/元数据/视图操作映射到 CLI 动作词表——pickdone log 一条流里同时可见 App 与 CLI 的历史。
  • CLI:batch done/date/category/tag 批量操作(仅收精确任务 id,支持 --dry-run、逐条失败报告、改期自动迁移日程块);保存视图与 App 筛选视图双端共享(view list/add/rmlist --view <名>);分类文件夹层级(category add --folder/--parentcategory move 带环守卫、categories 树状展示);list --lunar 在文本与 JSON 输出中附农历注记。
  • 项目详情页新增底部里程碑横条:时间轴下沿每个里程碑一枚标记,悬浮显示日期与关联任务进度(完成数/总数及前几个任务名)。
  • 今日页项目关联:任务行显示项目色徽标(点击打开项目详情),工具条新增按项目筛选下拉,#/todo-list/today?project=<id> 可直达筛选视图(下拉会把筛选同步回 URL,双向可分享)。
  • CLI edit --date none|clear 清空日期并把任务移回待办箱,与 App 字段形态完全一致(主提醒随日期清、当日日程块移除、已无日期时友好 no-op)——取代过去「新建+删旧」的曲线方案。

修复

  • CLI category add --parent <文件夹> 此前必然报错(把裸 id 当分类行读了 .folderIs)——挂到文件夹下现已可用。
  • 备份内容去重比错方向(排序按最新在前、比对却取数组尾=最旧):常态下去重永不生效,且陈旧快照可能被当作当前备份返回。
  • CLI 写入的 project --status/--deadline 现在能到达运行中的 App——项目元数据加载改为每次无条件重读,不再粘住首次加载值。
  • list --view 不再在抓取上限处截断匹配任务:视图的日期/分类条件下推进查询(且只取未完成,与 App 智能清单口径一致)。
  • CLI 加固:拒绝嵌套文件夹创建(category add --folder --parent);project --status X --deadline Y 两个旗标同时生效;list --view X --on <日期> 改为用法错误;batch done 对已完成任务幂等跳过、不再改写 completedAt;App 内 CSV 导入落显式审计流水;App 侧审计追加在轮转窗口内重试,并发轮转不再丢行。

修复

  • 可靠性批次:快加窗渲染进程崩溃后现在能自愈(此前全局快加快捷键只会唤起一条死掉的透明条直到重启应用);锁屏密码解密失败不再把用户永久锁在门外(此前会拿密文串做比较导致正确密码也打不开);退出冲刷广播现在送达所有窗口——托盘驻留时浮窗的待落番茄账、主窗已销毁时的待落任务编辑不再随进程消亡;拖拽排序与 Ctrl+S 同步的批量任务行先去 Proxy 再过 IPC(嵌套响应式数组可能让结构化克隆失败、整批静默丢弃);清空回收站不再能被撤销「复活」出附件与日程快照早已被销毁的行;损坏的旧番茄账本 blob 迁移时不再被删除(此前等于不可逆丢历史账)。
  • 一致性批次:一键补录的日期口径改按结束时间、幂等 id 与 600 分钟上限和 CLI 统一(跨午夜补录不再 App 与库各记一天,App+CLI 同槽位补录不再双记);完成绑定任务的番茄不再因广播回声清空撤销历史;完成任务/拖动排序/还原回收站在 400ms 合并窗内不再融成一步撤销;CLI overview/stats 新增与 App 对齐的「今日完成(按完成时间)」口径(原计划日口径保留兼容);CLI 建任务与导入按目标日池正确插队排序(不再恒 0);CLI repeat off --all 级联清理未来实例的日程块(不再留幽灵日程);补录上限对齐数据库 600 分钟(超出报用法错误);--remind-offset 0 不再假成功;Todoist 导入保留子任务完成态;导入的已完成任务回退用截止/创建时间而非全部记成导入瞬间;浏览器调试 shim 补齐 getById/deleteMeta。
  • 体验与无障碍批次:时间轴日程块删除纳入全局 5 秒撤销契约(此前静默直删);任务已删的日程块显示本地化文案而非内部 id;键盘可达性大扫除——搜索清除钮、习惯按周几选择器(改为真按钮+aria-pressed)、习惯间隔输入标签、待办箱排序/筛选下拉、四象限拖放高亮覆盖整个象限(此前 over 类根本没有 CSS)、子任务上/下移按钮真正可聚焦且点文本即可勾选、快加隐藏日期选择器不再吞 Tab 焦点、今日实验版抽屉收起后不再泄漏可聚焦元素、番茄预估 −/+ 按钮各自有明确标签、依赖候选列表截断时明确提示、日历月份箭头补标题(连带补上此前缺失的年份箭头文案)、习惯 30 天格子悬停显示格式化日期、无日期任务不再宣告无效快捷键、分类/标签重命名有悬停提示;删除附件时若任务落库失败不再删除磁盘文件;更换自定义白噪音立即生效(新增主进程→渲染端缓存失效广播,含 preload 绑定)。

[0.3.0]

Added

  • 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).