Skip to content

v0.18.39

Latest

Choose a tag to compare

@FeatherHunter FeatherHunter released this 23 Oct 16:56
· 15 commits to master since this release

Fixed

  • #245 失败账本不因「目标版事后装好」结案:已装/运行/最新版全一致时单品面板仍常驻「更新失败」红字(真机 2026-10-23 20:21 desktop profile):dsh-im-companion 0.2.22 → 0.2.23 在 desktop-manager 路上 EPERM 失败后,用户照失败账本里的手工命令装好同一版本并重启;此后面板版本三格全是 0.2.23,却仍常驻「更新失败(install-failed)」红字、「最后手段 · 自动恢复不可用」与手工命令,点「已知晓」也不消失(同帧 render() 按盘上 job.state === 'failed' 重画,下一个 1s 轮询还会重建锁存),只能等未来 latest > target 触发 #100 让位。根因:盘上任务账本是历史证据,但快照把它原样带出,面板、入口徽标、日志面板态、复制诊断、安装按钮五处消费方各自把它当「当前失败」。现在:①新增 src/shared/failure-settled.ts——failureSettledOf(snapshot) 是唯一判据(任务 failed/interrupted、目标版本合法、磁盘已装、注册在册、磁盘与运行版本同版且都不低于目标版本 ⇒ 上次尝试已了结;任一未知/不满足都按真失败,installed/registered/运行版未知不冒充事实),settledClearsLatch 统一「了结后哪些旧锁存该清」(按装侧/查侧判定、不比对 jobId:目标版确实在跑时装侧旧失败一律让位,查侧失败仍等一次成功查询);②五个消费方只问这一处、不再各写版本比较:了结态不出失败横幅/最后手段/为那次失败的手工命令/04 章失败卷宗,只留一行中性历史(失败码 + 目标版本,非错误样式,新增双语 key panel.history.failure-settled),复制诊断按当前状态给快照、不再把旧码当当前码;本回包的新鲜 errorKind/lastError 仍照常显示;③盘上账本、healJob 与批量对账不改写——不伪造「修复成功」(#58 口径),也不把历史账本当当前失败。

Tests

  • 新增 tests/issue-245-failed-ledger-settled.test.mjs 19 例(判据:目标版被更高版取代也结案、任一未知/不满足不结案、判定只读不改写快照与 job;展示:首帧/成功轮询/知晓后/卸载重挂都无失败面、运行未知或低于目标或磁盘与运行不同版或未登记时失败帧照旧、更高新版出现时报可更新而非旧失败、只留一条中性历史行、新鲜失败不被历史行吞掉;贯通:复制诊断、入口徽标、安装槽视图、日志面板态同口径(非法态不记 error、真失败仍记 error);锁存:成功轮询清旧失败、恢复的安装锁存被结算快照解除且后续轮询不重建、真失败不被洗掉)。

门禁(发版定格):npm run check 全绿——node --test tests/*.test.mjs 1989 例:1988 过 / 0 失败 / 1 跳过;npm run typecheck 过;npm run gate:bilingual 三道硬门禁过(89 个源文件、416 个 key、17 错误码、20 diag 键,违规 0);npm publish --dry-run 185 文件(dsh-plugin-update@0.18.38,523.8 kB 压缩 / 1.8 MB 解包);gate:bilingual:release 的第四道照旧如实红、非阻断(416 个 key 仍全是 draft: true)。