Skip to content

fix(scripts): bound subprocesses and verify package immutability - #1

Merged
xiaoyumuxi merged 1 commit into
mainfrom
fix/bounded-script-processes
Oct 18, 2026
Merged

xiaoyumuxi merged 1 commit into
mainfrom
fix/bounded-script-processes

Conversation

@xiaoyumuxi

Copy link
Copy Markdown
Contributor

问题与改动

package.mjs 的 Maven/zip 和 test.mjs 的 Maven 调用原来使用没有 timeout 的 execFileSync。命令挂起或后代持有输出管道时,脚本可能一直等待;只给同步 API 添加 timeout 也不能保证拒绝 SIGTERM 的进程及其后代结束。

  • 统一使用异步子进程执行器和独立 POSIX 进程组:Maven 默认期限 120 秒(LITHE_MAVEN_TIMEOUT_MS 可设 1–600000 毫秒),zip 期限 30 秒。
  • 超时、SIGINT/SIGTERM 和直接子进程退出后,清理所拥有的进程组;500 毫秒宽限后升级 SIGKILL,再最多等待 2 秒,并在无法确认清理时报告错误。中断保留 130/143 退出状态。
  • 为打包、Maven 命令、断言和清理逐项计时,输出 JSON、JUnit XML、HTML;支持 LITHE_REPORT_DIR,将命令输出缺失/损坏等外围错误写入失败报告。
  • 增加无需 Maven/联网的 Node 生命周期回归与确定性进程 fixture,覆盖挂起、忽略 SIGTERM、父进程先退出、SIGINT/SIGTERM、异常状态、ENOENT、预取消及无效期限。回归运行器另有 30 秒总期限和中断清理。
  • 增加 verify-scripts.mjs 与文件清单工具,在一次性源码副本中真实打包和测试,比较已有插件、ZIP、指定宿主 bundle 的完整前后清单,以及新插件测试前后的清单。清单包含路径、类型、权限、链接目标、大小及 SHA-256;保留新产物与诊断证据,清理临时目录。嵌套报告目录固定在临时副本内。
  • CI 增加进程回归并始终上传计时 artifacts;忽略本地 .artifacts/,README 补充期限、报告与复验方法。

本地验证

macOS arm64,Node 24.14.0、Maven 3.10.0、JDK 27,重新执行得到 31 条通过记录:8 项进程回归、3 项打包步骤、14 项真实 Maven 集成检查、6 项隔离验证。历史 ZIP 的实机验收没有作为这些结果的证明。

  • node scripts/test-process.mjs:全部通过;强制超时及进程清理回归约 1.63 秒。
  • LITHE_REPORT_DIR=.artifacts/test-stability/custom-reports node scripts/verify-scripts.mjs --host-bundle /Applications/Lithe.app --host-bundle <existing-validation-app>:全部通过。扩展构建 3.35 秒、模型读取 2.37 秒、过滤测试 3.90 秒。
  • 源码插件、原 dist/package、原已验收 ZIP、已安装宿主和已有验证实例 bundle 的前后清单完全相等;两个宿主 bundle 合计覆盖 2693 个文件。新插件在集成测试前后也完全相等。原 ZIP 的 SHA-256 保持 d03b0823ff8c2d7b72f2b9209eca3f1b28980d76cf27eddb0d3459874ae28613。
  • 每项耗时已生成本地 HTML/JUnit/JSON,并使用宿主报告生成器生成汇总。未将本机路径、完整清单或构建产物提交进仓库。
  • 宿主 verify-test-stability.sh、verify-runtime-bundle-immutability.sh、Node 语法检查及 git diff --check 通过。宿主静态门禁分别只检查其支持的测试文件/宿主源码,不替代 Node 回归和实际哈希验证。
  • 本次启动的 Maven、Node fixture、zip 均已结束;保留开始时已在运行的宿主实例。

尚未执行 Maven 3.6.3、Node 22/Java 17 的 CI matrix、Linux/Windows 或新的宿主 UI 验收;远端检查以本 PR 的 CI 结果为准。脚本执行器面向 macOS/Linux 的 POSIX 进程组。

插件声明继续使用 API 3、requires.buildSystems = 1;版本、发布工作流及宿主原生 UI 方向不变。未执行发布、创建 tag/Release、提交 Store 条目或启用自动合并。

🤖 Generated with Claude Code

Add command deadlines, interrupt cleanup, per-step timing reports, and process lifecycle regressions. Verify real packaging and Maven tests in an isolated copy while preserving existing plugin, ZIP, and host bundle inventories.

Co-Authored-By: Claude Code <noreply@anthropic.com>
@xiaoyumuxi
xiaoyumuxi marked this pull request as ready for review October 18, 2026 14:37
@xiaoyumuxi
xiaoyumuxi merged commit 177ee4e into main Oct 18, 2026
2 checks 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.

1 participant