Repository navigation
0.3.6
修复
-
番茄记账跨窗口防竞态:被节流的浮窗不再重复认领同一次专注(积分/通知不再翻倍),陈旧窗口不再杀掉他窗刚开的休息,聚焦任务在他窗被删后积分不再静默丢失。
-
习惯:连续天数尊重自定义频率(一三五习惯不再因周末断签),浮窗/快速窗口里的打卡现在能可靠写入数据库。
-
分类:删除分类后任务不再指向幽灵分类;软删分类重启后回收站入口不再失明;彻底清除的分类不再每次重启复活。
-
附件(CLI):构造路径不再能删到应用目录之外的文件;同毫秒同名上传不再互相覆盖。
-
CSV 导入:标签列不再被丢弃(转为 #标签 后缀),滴答已完成行(status -1)正确导入为已完成。
-
CSV 重复导入注意:去重指纹改为含 #标签 后缀的完整内容,旧版本导入过的带标签行(存的是裸标题)会再导入一次。
-
CLI:回收站恢复失败不再丢失一次性撤销快照;删除重复实例能正确传播删除;
backfill被拒时大声报错而不是假报成功。 -
可靠性:失败的数据库写入会重试而不是静默丢(设置镜像、任务编辑队列、退出冲账);批量番茄导入不再被单条坏行劫持整批。
-
崩溃防护:统计/CLI 遇到畸形日期给出明确报错;畸形通知、附件打开与提醒命令不再抛异常;异常频率的习惯连续天数不再卡死渲染。
-
撤销/重做与手动同步现在有真实的成功/失败反馈(含纯键盘操作);撤销 toast 在路由切换后不再泄漏监听器。
-
界面:任务主标题两行截断带悬停全文;回收站与数据清除给出诚实的成败提示;统计 CSV 导出中和公式注入;TodoBox 行与已完成行按钮键盘可达且有焦点环;全屏模态(番茄放弃、新手引导)层级高于通知。
-
过去日期的项目里程碑现在会正确显示为逾期(红色标记 + 逾期天数),除非其关联任务确实全部完成——此前任何过去日期都被静默渲染为"已完成",掩盖错过的里程碑。
-
过往日期的任务分组(昨天、上周的已完成项)恢复可折叠——此前一段清理逻辑会悄悄撤销对它们的每次折叠点击。
-
项目页:依赖看板高度改为按真实头部尺寸自适应,头部随里程碑增长不再把看板挤出可视区。
-
项目页:项目间切换不再残留上一个项目的页签、展开的里程碑行或未关闭的编辑弹窗。
-
退出时排队中的任务保存失败后会按原顺序重试,快速连续编辑不再被乱序回写。
-
修复回收站行自我循环同步、退出时监听器累积、快速编辑丢失脏标志三处问题。
变更
- 同步地基(内部):物理删除路径(清空回收站、彻底删除、计划清理)暂未纳入变更捕获——这些路径的多端对账依赖未来同步版本的周期性全量快照。
- 里程碑编辑合并为单个对话框(标题+日期一次填完),取代旧的两次弹窗链;项目页改为整页单列滚动,头部、页签与内容全部可达。
- CSV 导入前自动生成事件快照备份,导入预览返回结构化错误码而非泄漏内部报错。
- 测试基建:单测门禁对 skip/cancelled 也判红;活体 Electron 测试移出快速回归,pre-commit 约 45 秒且零环境依赖;CI 把活体测试集中到 Windows 跑(ubuntu 任务约 1 分钟完成)。
Fixed
-
Pomodoro bookkeeping is race-proof across windows: a finished focus can no longer be claimed twice by a throttled float window (no double credit/double notify), a stale window can no longer kill a rest phase another window just started, and credit is no longer silently lost when the focused task was deleted elsewhere.
-
Habits: streaks respect custom schedules (a Mon/Wed/Fri habit no longer breaks over the weekend), and edits made from a float/quick window now reliably reach the database instead of being silently rejected.
-
Categories: deleting a category no longer leaves tasks pointing at a ghost; soft-deleted categories reappear in the recycle bin after a restart; hard-deleted ones no longer resurrect as ghosts.
-
Attachments (CLI): removing an attachment can no longer delete files outside the app folder via a crafted path; same-millisecond uploads no longer overwrite each other.
-
CSV imports: the tags column is no longer dropped (imported as #tag suffixes), and Did completions (status -1) import as completed.
-
Note for CSV re-imports: duplicate detection now keys on the content including #tag suffixes, so rows imported by a previous version (stored without tags) will be imported once more.
-
CLI: restoring from the recycle bin can no longer lose the one-shot undo snapshot on failure; deleting repeat instances propagates the deletion correctly;
backfillfails loudly instead of reporting success for a rejected record. -
Reliability: failed database writes are retried instead of silently dropped (settings mirror, task-edit queue, quit-flush), and batch pomodoro imports no longer get one bad row blocking the whole batch.
-
Crash-proofing: malformed dates in statistics/CLI report clear errors; malformed notifications, attachment opens and reminder commands no longer throw; a habits streak with an unusual schedule can no longer freeze rendering.
-
Undo/redo and sync toasts now show real success/failure feedback (including keyboard-only flows); the undo toast controller no longer leaks listeners on route changes.
-
UI: task titles clamp to two lines with a tooltip; recycle-bin and data-purge actions give honest success/failure toasts; statistics CSV export neutralizes formula injection; TodoBox rows and completed-row actions are keyboard-reachable with visible focus; fullscreen modals (pomodoro abandon, onboarding) layer above notifications.
-
Project milestones with a past date now show as overdue (red marker, overdue-days label) unless their linked tasks are actually all completed — previously any past date silently rendered as done, hiding missed milestones.
-
Expired task groups (yesterday's, last week's completed items) can be collapsed again — a cleanup routine was silently undoing every collapse click on them.
-
Project view: the dependency board's height now adapts to the actual header size instead of assuming a fixed one, so a header that grows with milestones no longer pushes the board below the fold.
-
Project view: switching between projects no longer keeps the previous project's active tab, expanded milestone rows or a leftover edit dialog.
-
Task saves queued at quit are retried in their original order if a write fails, so edits made in quick succession can no longer be re-applied out of order.
-
Recycle-bin rows no longer loop-syncing against themselves; quit-time listener accumulation and a dropped dirty-flag on rapid edits were fixed.
Changed
- Sync groundwork (internal): physical-delete paths (recycle-bin purge, hard delete, plan prune) are not yet change-captured — multi-device reconciliation for those relies on periodic full snapshots in a future sync release.
- Milestone editing consolidated into a single dialog (title + date together), replacing the old two-step prompt chain; the project page scrolls as one column so header, tabs and body all stay reachable.
- CSV imports take an automatic event-snapshot backup beforehand, and the import preview reports structured error codes instead of leaking internal messages.
- Test infrastructure: the unit-test gate now fails on skipped or cancelled tests; live Electron tests moved out of the quick regression so pre-commit runs in about 45 seconds with no environment dependencies; CI splits live tests onto the Windows runner (the ubuntu job finishes in about a minute).