Skip to content

0.3.6

Choose a tag to compare

@github-actions github-actions released this 15 Sep 07:51
8733e58

修复

  • 番茄记账跨窗口防竞态:被节流的浮窗不再重复认领同一次专注(积分/通知不再翻倍),陈旧窗口不再杀掉他窗刚开的休息,聚焦任务在他窗被删后积分不再静默丢失。

  • 习惯:连续天数尊重自定义频率(一三五习惯不再因周末断签),浮窗/快速窗口里的打卡现在能可靠写入数据库。

  • 分类:删除分类后任务不再指向幽灵分类;软删分类重启后回收站入口不再失明;彻底清除的分类不再每次重启复活。

  • 附件(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; backfill fails 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).