Skip to content

fix: 修复整项目 review 发现的 17 项问题 - #112

Merged
ranger1112 merged 6 commits into
mainfrom
fix/project-review
Nov 8, 2026
Merged

ranger1112 merged 6 commits into
mainfrom
fix/project-review

Conversation

@ranger1112

Copy link
Copy Markdown
Owner

概要

对全项目做了一轮 review(18 条发现,17 条已修,1 条暂缓),按数据丢失、安全/确定性、竞态/体验分三批提交。

数据丢失

  • 同步 RestoreLocal 不再走「内容相同」捷径,先把文件写回本地,避免下一轮把远端唯一副本当成用户删除
  • 「本地全部消失」安全阀把 RestoreLocal 计入
  • 设置文件瞬时读失败时禁止本次运行写回,避免默认值覆盖原配置
  • OneDrive「按需文件」占位符不再被误判为符号链接
  • Markdown 模式给形如 - 10:00 / ### 10:00 的正文行加保护空格

安全与确定性

  • 托盘「打开今日笔记」拒绝符号链接
  • Git 自动提交只认真实 .git 目录,gitfile 重定向不再操作目录外仓库
  • git check-attr 改走标准输入,笔记多时不再撞 Windows 32K 命令行上限
  • 合并结果超过 2 MiB 时改为保存冲突副本,同步警告显示在状态行
  • explorer 定位网络共享笔记时正确还原 \?\UNC\ 前缀

竞态与体验

  • 同步扫描读文件时与追加/改写共用 io 锁
  • WebDAV 回读不一致不再无条件重写;Hash 版本复核后用 GET 的强 ETag 做条件删除/写入
  • 条目编辑保存期间的新输入不再丢失
  • 重开设置面板不再清空未保存的同步表单
  • 跨 DPI 多屏恢复使用保存位置所在显示器的缩放
  • 清除同步密码时一并删除 0.5.x 旧凭据

暂缓

  • 缓存代理返回旧正文时被记成当前版本:改成记录 GET 版本会让 PROPFIND/GET ETag 来源本来不一致的服务器每轮重复下载,需要单独设计保守分支。

验证

  • cargo test:237 passed,2 ignored
  • cargo clippy --all-targets -- -D warnings:通过
  • npm run build / npm test:74 passed

🤖 Generated with Claude Code

ranger1112 and others added 5 commits November 8, 2026 18:39
- 同步 RestoreLocal 不再走「内容相同」捷径,先把文件写回本地,避免下一轮把远端唯一副本当成用户删除
- 「本地全部消失」安全阀把 RestoreLocal 计入,目录被清空时不再传播部分远端删除
- 设置文件瞬时读失败时禁止本次运行写回,避免默认值覆盖原配置
- OneDrive 按需文件占位符不再被当成符号链接,保存与历史恢复可用
- Markdown 模式给形似条目头的正文行加保护空格,避免被拆成幽灵条目

Co-Authored-By: Claude Code <noreply@anthropic.com>
- 托盘「打开今日笔记」拒绝符号链接,避免 ShellExecuteW 被引到目录外
- Git 自动提交只认真实的 .git 目录,gitfile 重定向不再操作目录外仓库
- git check-attr 改走标准输入,笔记多时不再撞 Windows 32K 命令行上限
- 合并结果超过 2 MiB 时改为保存冲突副本,不再产生永远不同步的文件
- 同步警告(超大/不可读文件等)显示在状态行与悬停提示里
- explorer 定位网络共享笔记时正确还原 \?\UNC\ 前缀

Co-Authored-By: Claude Code <noreply@anthropic.com>
- 同步扫描读文件时与追加/改写共用 io 锁,避免上传半截笔记
- WebDAV 回读不一致时不再无条件重写;有强 ETag 才用 If-Match 补写
- Hash 版本复核后把 GET 的强 ETag 升级为 If-Match,缩小删除/写入竞态
- 条目编辑保存期间的新输入不再被 close() 丢弃,重复提交也会被忽略
- 重开设置面板不再清空未保存的同步表单
- 跨 DPI 多屏恢复使用保存位置所在显示器的缩放
- 清除同步密码时一并删除 0.5.x 旧凭据,避免迁移回退复活

Co-Authored-By: Claude Code <noreply@anthropic.com>
- 设置面板重复打开保留未保存的同步表单
- 条目编辑保存期间的新输入与重复提交
- CHANGELOG 增加 Unreleased 修复记录

Co-Authored-By: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Code <noreply@anthropic.com>
Copilot AI balanced review requested due to automatic review settings November 8, 2026 10:53

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has insufficient remaining quota. Try requesting a review at a lower effort level.

- Git check-attr 边写 stdin 边读 stdout,避免大笔记库死锁
- is_repo 拒绝带 commondir 的 .git,并用 rev-parse 校验工作区
- 打开今日笔记前先拒绝符号链接,避免 create_new 跟随悬空链接写到目录外
- 恢复 RestoreLocal 的「内容相同」去重:本地缺失按删除处理,删除前有 trash 备份
- 本地全消失时连 RestoreLocal 一起跳过,安全阀跨轮持续生效
- 同步扫描改用读前读后比对,不再持 io 锁阻塞保存
- WebDAV 回读补写检查状态;重定向后的 ETag 不再用于 If-Match
- 设置读失败时回退到上次成功保存的副本,并只重试瞬时错误
- 编辑取消/保存中输入的显示一致性;设置面板重开只刷新状态
- 跨 DPI 恢复只缩放相对显示器原点的偏移
- Markdown 保护判定复用 entry_header,测试改用精确 HH:MM

Co-Authored-By: Claude Code <noreply@anthropic.com>
@ranger1112
ranger1112 merged commit b34fb68 into main Nov 8, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants