Skip to content

PickDone 0.2.1 (2026-09-08)

Choose a tag to compare

@github-actions github-actions released this 08 Sep 04:56
· 261 commits to main since this release

修复

  • 首次使用的引导旅程在无任务时崩溃(TDZ 引用错误)并泄漏轮询器,设置里的「重看引导旅程」在空工作区必然失效;阶段驱动的同步销毁回调也不再导致引导步骤被重复推进。
  • 危险操作二次确认弹窗(恢复备份/清除演示数据)此前显示毫不相干的文案——正文是「与番茄面板实时同步」、确认按钮是「休息时长(分钟):」;现已改用专属文案(中英双语)。
  • 启动时的 meta 垃圾回收自上线以来从未运行:调用了不存在的 DB op 且异常被静默吞掉,导致孤儿 meta 键(已删除的重复规则、已删除的分类)无限累积;失败的 schema 迁移不再被后续迁移推进版本号而永久跳过。
  • 白噪音播放器快速切换时可能出现两个音源同时播放;番茄计时器不再接受 startedAt 为 0 的异常完成(凭空记账);放弃专注不再把完整计划休息时长记成实际发生。
  • 放弃专注的休息时长记为 0;完成的专注按实际进行时长记账(而非当前设置值);CLI stats 的每日专注统计排除已放弃的番茄,与应用内统计页口径一致。
  • 番茄账本写入失败后自动重试(待处理队列 + 退出冲刷回队),不再因瞬时 DB 故障静默丢账;任务编辑获得同等可靠性;编辑面板保存失败不再静默丢弃脏标记。
  • 附件/图片上传期间切换任务不再挂到另一个任务上;浮窗开关反映真实显示状态,而非乐观翻转。
  • 拖拽排序现在按指示线的承诺位置插入,指示线也不再残留在目标行上;同名子任务的勾选状态不再串位;行尾删除按钮键盘可达;搜索筛选条件不再永久残留;快速添加手动选好的日期在清空文本后不再丢失。
  • 多步重做(Ctrl+Y)恢复可用(此前第一步之后的所有 redo 都被栈重设杀掉);任务改期后日程芯片真正跟随移动到新的一天,不再留在原日期。
  • 修复依赖视图的陈旧响应竞态(快速切换项目时套用了上一个项目的布局);移除两个常驻轮询定时器(依赖视图重绘、时间轴自适应),空闲 CPU 占用下降。
  • 数据安全:永久删除的任务不再泄漏其日程快照 meta 键(本应兜底的 GC 正是从未运行的那个);习惯/时刻的 id 不再同毫秒碰撞;快捷键冲突兜底不再把 electron-log 对象当函数调用(此前可弹主进程崩溃对话框)。
  • 深色主题:设置弹窗标题改用品牌色(原为硬编码蓝色);回收站页头图标在深色下可见。
  • 单任务保存不再每次重建整个提醒调度;CLI tomato start -m N 不再永久改写你的专注时长偏好设置。
  • 批量生成的重复任务实例子任务一律未勾选(与自动续期一致);取消完成父任务后不再被子任务全勾状态顶回已完成;删除重复组最后一个实例不再让规则静默断头。
  • 其他:合法的 autocomplete="off";被 outline: none 杀掉的键盘焦点改为 focus-visible 描边;200 条渲染截断后计数显示真实总数;更新提示不再依赖无关 API 是否存在。

变更

  • 内部:渲染层 store 与主进程的可靠性加固;发版管道加固(发布正文双语化、CI 跳过本机视觉门禁、IPC 白名单补 deleteMeta)。

Fixed

  • First-run onboarding tour crashed (TDZ reference) and leaked a poller when no task existed yet; "replay journey" from Settings was reliably broken on an empty workspace. Stage drivers no longer double-advance via a synchronous destroy callback.
  • Dangerous-operation double-confirm dialogs (backup restore / demo-data purge) showed unrelated texts — body read "syncs with the pomodoro panel in real time" and the confirm button read "Break length (minutes):"; both now use dedicated copy (en/zh).
  • Startup meta garbage collection never ran since launch: it called a nonexistent DB op and swallowed the error, so orphan meta keys (deleted repeat rules, removed categories) accumulated forever; failed schema migrations are no longer skipped forever by a later migration advancing the version.
  • White-noise player could play two sources simultaneously when switching quickly; the focus timer no longer accepts a stray completion with a zero start time; abandoned sessions no longer book the full planned rest as if it happened.
  • Give-up accounting records zero actual rest; completed focus records the actually elapsed minutes instead of the current setting; per-day focus totals in CLI stats exclude abandoned pomodoros, matching the in-app statistics page.
  • Pomodoro ledger writes are retried (pending queue + quit-flush restore) instead of being silently dropped on transient DB failures; task edits gained the same pending-queue reliability; a failing save in the edit panel no longer clears its dirty flags silently.
  • Attachment uploads can no longer land on a different task when switching tasks mid-upload; the float-window toggle reflects the real shown state instead of an optimistic flip.
  • Drag-and-drop now inserts at the position the drop indicator promised, and the indicator no longer lingers on the drop-target row; sub-task checkboxes keep identity on duplicate names; the quick-delete button is keyboard-reachable; search filter values no longer stick forever; a manually picked quick-add date survives clearing the text.
  • Multi-step redo works again (every redo step after the first was killed by a stack reset); rescheduling a task now actually moves its schedule chips to the new day instead of leaving them behind.
  • Stale-response race fixed in the dependency view (rapid project switches applied the previous project's layout); two always-on polling timers (dependency-view redraw, day-rail fit) removed — idle CPU drop.
  • Data safety: permanently deleted tasks no longer leak their schedule-snapshot meta keys (the GC that should have caught them was the one that never ran); habit/moment ids no longer collide within the same millisecond; the shortcut-conflict fallback no longer calls the electron-log object as a function (main-process crash dialog).
  • Dark theme: settings dialog titles use the brand color instead of a hardcoded blue; recycle-bin header icon is visible on dark backgrounds.
  • Scheduled single-task writes no longer rebuild the whole reminder schedule on every save; CLI tomato start -m N no longer permanently rewrites your focus-length preference.
  • Repeating-task instances generated in bulk start with unchecked subtasks (matching auto-renewal); un-completing a parent no longer bounces back to completed when its subtasks are all checked; deleting the last instance of a repeat group no longer strands the rule silently.
  • Misc: valid autocomplete="off", focus-visible outlines where outline: none killed keyboard navigation, real search-result count behind the 200-item render cap, updater notice no longer depends on an unrelated API being present.

⚠️ 已知问题(Known issue)/ Known issue: 从 0.2.0 自动更新时若弹出「Failed to uninstall old application files: 2」——因为应用驻留托盘未真正退出,旧文件被占用。解决:右键托盘图标完全退出拾事(或任务管理器结束「拾事.exe」),再运行 PickDone-Setup-0.2.1.exe 即可;任务数据保存在 %APPDATA%\拾事,不受卸载影响。该问题已在安装器层面修复,随 0.2.2 生效。

⚠️ Known issue (EN): If the 0.2.0 → 0.2.1 update fails with "Failed to uninstall old application files: 2", the app is still running in the tray and locking old files. Fully quit PickDone from the tray icon (or kill "拾事.exe" in Task Manager), then run PickDone-Setup-0.2.1.exe again. Your data lives in %APPDATA%\拾事 and is not touched. Fixed at the installer level, shipping in 0.2.2.