Skip to content

Moo Fleet 0.1.49

Choose a tag to compare

@charsen charsen released this 27 Oct 02:49
· 24 commits to master since this release

Windows 安装版请到 GitHub 下载。 Moo-Fleet-0.1.49-windows-x64-setup.exe(107.9 MiB)超过 Gitee 单个附件 100 MiB 的上限,Gitee 上没有这个文件,上传会被平台直接拒绝。需要 NSIS 安装版请到 GitHub Releases · v0.1.49 取;Gitee 侧提供的是功能一致的免安装便携版 Moo-Fleet-0.1.49-windows-x64.exe。其余平台包两边完全一致,哈希见 SHA256SUMS-desktop-0.1.49.txt。

本次更新

这一版只有两件事:把消息放回它该在的地方,以及修掉十个「看着像偶发、其实必然」的坑。没有新功能。


一、消息不再弹在屏幕角上

以前一次批量 Fetch 会弹两条浮层提示,最响的那条(实心绿条 + 倒计时)说的只是按钮上已经写着的数字:一个 680×69 的绿条盖在内容上,承诺几秒后自己消失,而触发它的按钮在另一个角落。上一版把它挪到右下角,仍然是浮层——问题不在位置。

根子在通道。 全应用 129 处提示共用一个变量,落点靠「此刻开着哪个面板」猜:同一句话在抽屉里出现一次,关掉抽屉跳到舰队页又一次,再开设置出现在弹窗页脚上方。为此写了 5 处「换容器就清空」的补丁,代价是切一下页签回来就看不到刚才那句。

现在每条消息带一个归属:它属于某个工作区、某个仓库、设置页,或者某一批操作。归属决定它落在哪,与你现在开着哪个面板无关——所以「换容器时清空」整套补丁消失了,切页签也不再丢话。

  • 成功消息落到各自面板里,贴边一行细字,只有图标带状态色,不占浮层、不压内容、没有倒计时。
  • 关掉的容器不搬消息,在入口点挂一个小圆点。
  • 后台操作永远不抢用户的话:进行中可以接替进行中,但接替不了一条你还没看过的回执。
  • 抽屉标题就写着仓库名,消息里的 ${仓库名}: 前缀删掉了(35 处);跨仓库与设置场景保留。

二、删掉的会话不会再自己回来

你在这台电脑上删掉一条会话,提示说「已移到系统废纸篓 · 备份保持不变」,几小时后同步报「恢复 1 条」——那条会话带着继续命令回来了。

原因是「备份里有、本机没有」被一律当成「另一台电脑的会话」,而它也可能是你刚删的。现在本机记住这个删除(存在本机配置里,不进备份仓——它是这台电脑的偏好),下次同步跳过它,并说明可从废纸篓找回。文件被捞回来、或同名会话重新出现时,这条记录自动作废。跨机删除仍走墓碑,另一台会正常询问。

三、同步前先认这目录还归不归我

备份目录只是一次性绑定,目录本身会被换掉。如果把它挪走、在同一路径 git init 了别的仓库,下一次同步会对你的仓库执行 reset --hard、clean -fd,再逐个删掉白名单之外的顶层目录。

现在每次同步、每次处理冲突,在动这些命令之前都先核对所有权,认不出就停手并说明「没有动它」。你遇到的是报错,不是数据丢失。

四、macOS 13 / 14 上「移到废纸篓」不再失败

系统自带的 trash 命令是 macOS 15 才有的,而本应用声明支持 13.5。在 13/14 上,丢弃改动、删除会话这两条主路径都会直接报 ENOENT。现在按可用性选:有系统命令就用它,没有就通过系统接口把文件移进同一个废纸篓(可还原、不经过 Finder、不弹授权框)。文件名里的引号也不可能改写命令——路径是参数传入的,不拼进脚本。

五、「已同步」现在只在真的同步完时说

一次同步是两件事:本机备好了、远端推上去了。原来只记一个错误字段,于是远端推送失败(断网、凭证过期、非快进被拒)时,状态卡继续显示「会话已同步」,另一台电脑其实拿不到。

现在本机与远端各记一个结果:整次失败时红,只有远端没上去时黄,写明「已备份在本机,还没上传」。恢复联网后的下一次同步会清掉。

六、勾了「自动 Stash」之后出错,改动回到工作区

原来只有「分支或 HEAD 变了」这一条路径会把 stash 还回来。Fetch 断网、复校发现工作区被改过,这两类直接抛错——改动留在 stash 里,而报错只说「Fetch 失败」,既没说改动去哪了,也没提 stash 名字。

现在这些路径统一先 pop 再抛错;pop 也失败时,错误消息里明说「改动仍在 Stash 列表」。同步的推送段同理:合并已经落库、stash 还在,推失败更要还原。

七、几个「点下去没反应」的地方

  • 操作记录里的「重试」丢选项。 文案写着「可勾选 rebase」「可勾选自动 Stash」,确认框里一个勾选框都没有:用 Rebase 的人重试一次会静默变成 merge,历史里凭空多一个合并提交;靠自动 Stash 才拉下来的人,重试会再撞一次「工作区不干净」。现在两个勾选框按操作类型与工作区状态出现,值真正传下去。
  • amend 跑到一半,暂存和提交按钮还能点。 点下去只换来一句「已有 Git 操作正在执行」。历史改写与 revert / cherry-pick 的忙态补齐到三处禁用判断里。
  • 后台刷新只刷文件与分支。 左侧「Stash 备份 N」来自整页扫描,会自己变,列表不刷就是「计数 4、列表 3」;在终端 pop 掉一条之后,列表里那条还在,点「应用」只报 ref 不存在。15 秒静默刷新现在带上 Stash 与标签(标签不重复探测远端)。
  • 暂存没有复核快照。 丢弃改动会先核对文件指纹,暂存不会:编辑器保存、构建产物、另一个终端 checkout 之后,你暂存到的可能是没在 diff 里看过的内容。现在两条路径口径一致,过期快照返回 409;顺带挡住冲突文件——git add 会把未合并条目直接标成「已解决」,那是解决冲突,不是暂存。
  • 冲突决策用的是旧快照。 隔十几分钟才点「用另一台电脑的」,那期间新写的内容会被整份覆盖。现在决策前先取一次远端;覆盖前把本机那份移进废纸篓(内容相同则不动),并说明这件事。

八、验收脚本不再按星期几算命

这条不影响你使用,但影响我们判断「是不是坏了」。

三条断言长期红着、被当成「已知基线」:日柱比天数少 6–7 根、45 天只画 40 根、热力图 ↑ 在周一不动。查清后是两类错:

  • 断言在按星期几算命。 报告窗口的结束日是本周周日(未来日期),而图表只画已经发生的日子。同一个正确实现,周一 85 根、周二 86、周日才 91。原来写死 88..92,等于要求「今天是周五以后」。
  • 把刻意设计当成缺陷。 「周一按 ↑ 不动」是 10 月 24 日就定下的:上下键是「同列内换行」,跨列那一跳是上一列最后一行到这一列第一行,视觉距离最远。代码、注释、单测三处一致,是设计。改的是断言。

现在断言按「窗口起点 → min(终点, 今天)」精确算,并单独钉首尾日期;键盘断言按光标所在那天分支。verify:ui 387 项全绿、0 失败,以后它变红就是真出问题。

另外修掉一处真缺陷:本地存储里若存了填反的起止日期,图表会拿到 start > end 的窗口,一天都画不出来、页面是空图且不报错。

九、桌面版安装包(Windows / Linux)

本版与 macOS 一同提供 Windows 与 Linux 安装包,三者用的是同一份前端与服务端载荷:dist/server/index.cjs(1.14 MB)与 dist/client 全部 39 个文件,跟 macOS 包内逐字节同哈希。

平台 文件 说明
Windows Moo-Fleet-0.1.49-windows-x64-setup.exe NSIS 安装版,可选安装目录,创建桌面与开始菜单快捷方式
Windows Moo-Fleet-0.1.49-windows-x64.exe 便携版,免安装,双击即用
Linux Moo-Fleet-0.1.49-linux-amd64.deb Debian / Ubuntu(amd64),依赖见包内 control
Linux Moo-Fleet-0.1.49-linux-x86_64.AppImage 通用,chmod +x 后直接运行,不依赖系统库版本

Gitee 上少一个文件是正常的:Gitee 单个附件上限 100 MiB,NSIS 安装版 107.9 MiB 传不上去,只在 GitHub 发布;Gitee 侧提供免安装的便携版,功能一致。其余三个包两边都有。要 Windows 安装版,直接去 GitHub Releases · v0.1.49 下 Moo-Fleet-0.1.49-windows-x64-setup.exe。

说明

  • macOS 包为 ad-hoc 签名的内测包,未经公证;请用 DMG 内的「安装 Moo Fleet(内测)」,不要手动拖进「应用程序」(下载隔离属性会导致应用无法启动)。Apple Silicon 与 Intel 请选对应架构的 DMG。
  • Windows 两个包未做 Authenticode 签名(没有证书),首次运行会被 SmartScreen 拦一次,需要「更多信息 → 仍要运行」。Linux 没有系统级代码签名机制,核对 SHA256SUMS-desktop-0.1.49.txt 即可。
  • 本版没有新增遥测。分析页只读本机 git 仓库,不发任何网络请求。
  • 会话删除「只在这台电脑忽略」的记录存在 config/session-ignores.json,不进备份仓;想让它重新同步,删掉对应条目即可。

验证

  • 类型检查、vue-tsc、ESLint 与生产构建全部通过;126 个文件 / 1245 个用例全绿。
  • macOS 包已装进 /Applications 实跑:0.1.49 / build 149、arm64、隔离属性 0 处、codesign 通过、窗口完整渲染(仓库 54、待推送 2、待拉取 4),7 个只读接口全 200,日志无错。
  • 桌面版载荷逐个解包核对:deb 的 control 版本 0.1.49、win-unpacked / linux-unpacked 内 package.json 均为 0.1.49,服务端 bundle 哈希与本地构建一致,客户端 39 个文件零差异。
  • 界面断言 387 项(真机跑,全部通过):消息归属 4 条与抽屉归属 6 条、暂存快照 2 条、键盘可达性、日柱窗口边界。
  • 变异验证(确认断言真的会拦):删掉同步前的所有权检查 → 「同步被拒绝」挂;/stage 退回只做 id 转换 → 「过期快照应 409」挂;冲突守卫改 if (false && …) → 「冲突不允许暂存」挂;stash 还原改回裸 throw → 「改动必须回到工作区」挂;热力图不画未来日期这一条改回画 → 恰好 4 条新断言挂、其余不动;窗口读回不归位 → 反向区间用例挂。
  • 已实测的反例:git 2.54 上「空仓库取消暂存必失败」不成立(git init 后 add 再 reset -- 退出码 0),所以这条没有改动。