Skip to content

v0.18.34

Choose a tag to compare

@FeatherHunter FeatherHunter released this 20 Oct 04:39
· 20 commits to master since this release

Fixed

  • #236 管理器路:宿主在移除步失败时把在册的插件从 dsh.profile.bundles 摘掉却不回滚,更新后插件页显示「关闭」,只能用户手动启用(真机 2026-10-20 04:12 六个 life- 批量更新全部 bundle-in-use):宿主 removeBundle 对在册的 bundle 是「先 selectBundle(false)(立即写盘)再重载卸载」,活 fiber 没卸掉就抛 bundle-in-use;change() 只把结果标 failed,那次取消在册没有任何回滚——本包看到「移除失败」时,插件已经装着、却不在 dsh.profile.bundles 里(词义见 CONTEXT.md 的「在册」),重启也不会加载。现在:①#201 的拓扑探测顺带留下「移除前是否在册」快照;移除前探到在册的包在移除失败/超时(含 removeBundle 同步抛错)后先带时限复探一次,确认已被移出才用宿主 setBundleEnabled(name, true) 尽力恢复,恢复后再带时限复探一次,只有明确回到在册才说「已恢复在册」;恢复被拒说「恢复在册未成功」;前置结论不明、恢复调用超时或宿主没有 setBundleEnabled 时说「无法确认」——绝不把「可能」写成事实,也不宣称一次没发起的尝试;②装前本来未在册(#201 先恢复在册再移除)的失败不恢复*,回到用户原本状态,不擅自改拓扑;③老宿主没有 listBundles / setBundleEnabled、或探测抛错时一律不猜拓扑、行为与从前一致,只把 bundle-in-use 的误导提示(「请先在宿主插件页停用后再更新」——方向反了)换成可操作的两步(重启 DSH 后重试、插件页显示关闭就重新启用);④原失败码、reason/hostCode 与详情语义不变,尾部追加 ≤300 字的事实(已恢复在册 / 恢复在册未成功 / 无法确认三档);原文超预算时按上限截断原文、优先保住这条事实;更新本身仍是失败,绝不自动重试 remove→install、也不把补偿成功当成更新成功。⑤移除失败路径多一发 setBundleEnabled 与至多三次 listBundles(两次复探各 ≤5s);恢复调用额度取 max(剩余配方额度, 终止宽限) 再给一次终止宽限,成功路径的调用次数与总上界不变。
  • 测试:新增 tests/issue-236-manager-remove-failure-restore.test.mjs 11 例(在册失败后恢复并复探、恢复被拒如实报、恢复后复探仍关闭不谎报、装前未在册不二次改拓扑、老宿主无探测不猜、探测抛错不猜、移除超时仍补偿、无 setBundleEnabled 不宣称尝试、复探失效说无法确认不写事实、removeBundle 同步抛错仍补偿、长原话截断仍保住事实并守 300 字);双语基线随 bundle-in-use 提示与新事实句更新。

门禁(发版定格):npm run check 全绿——node --test tests/*.test.mjs 1931 例:1930 过 / 0 失败 / 1 跳过(主树 41f7454 + 本批发版文件上实测;一次并发全量下 tests/batch-e2e.test.mjs 的 E3b 曾红,单跑与重跑即绿,属已知负载敏感,已在两轮全量中复现并确认与本次改动无关);npm run typecheck 过;npm run gate:bilingual 三道硬门禁过(87 个源文件、413 个 key、17 错误码、20 diag 键,违规 0);npm run docs:log:check 过(6 条缺行警告是既有缺行,只警告不失败);npm publish --dry-run 181 文件(dsh-plugin-update@0.18.34,512.9 kB 压缩 / 1.7 MB 解包);gate:bilingual:release 的第四道照旧如实红、非阻断(413 个 key 仍全是 draft: true)。