v0.19.1.zh.md
docs/i18n/release-notes/v0.19.1.zh.md
Tesserae v0.19.1 — doctor 不再怀疑存活的守护进程
<!-- translations:start -->
English · 한국어 · 日本語 · Русский · Español · Français · Deutsch
<!-- translations:end -->
发布于 2026-07-11 · PyPI · GitHub 发布 · pip install --upgrade tesserae==0.19.1
只修复了一个 bug,但因为 doctor --fix 可能据此采取行动,值得发一个补丁版本。
问题
在 macOS 上,引擎的 pidfile 身份标识依赖 ps -o lstart=,而其输出依赖于系统区域设置(locale)。在韩语 locale 的 shell 下启动的守护进程会记录 2026년 7월 11일…;而在英语 locale 下运行的检查器对同一时刻读到的是 Sat Jul 11…。这种不一致被解读为 PID 复用,于是 tesserae doctor 把一个存活的引擎守护进程报告为过期 pidfile——而 --fix 会提议在运行中的进程脚下删除该 pidfile,为第二个守护进程的启动打开了大门。
修复
ps 调用现在固定在 LC_ALL=C 下执行,从此写入方和读取方对启动时间的渲染始终一致。对于旧版本写入的 pidfile,owner_is_alive 增加了一条单向救援逻辑:当启动时间的渲染结果不一致时,完整命令行的精确匹配会恢复"存活"判定。这条救援只会扩大"存活"的范围——真正被回收的 PID 仍会被判定为过期,因为两个身份信号都不相同。
该问题是在一台韩语 locale 的机器上、启动 0.19.0 引擎守护进程几分钟后被现场发现的;已对两个方向做了回归测试(locale 不一致 → 存活,真实 PID 复用 → 过期),并加上了一个源码级守卫,确保 ps 调用始终固定 locale。