Target Version
3.0-dev;本轮证据基于 PR #107 的 fb2bb88,独占本地合成 Compose 栈。
Evidence
2026-09-13 UTC,在九服务编译、BVT、Functional、Scenario 与完整 Reliability 全部通过后,额外暂停 etcd 35 秒再恢复。八个服务注册项取得新租约,初次快照中九个应用进程身份未变,全栈就绪检查通过;该快照没有覆盖后续 watchdog 周期。
12:06:01.648,Transmite 日志报告 worker_id 租约丢失,将 abort 以防雪花 ID 重号;Docker daemon 随后记录 exitCode=139、manualRestart=false、restartCount=1,退出时间 12:06:01.872,12:06:02.129 重新启动,OOMKilled=false。后续 BVT 18 项通过。
完整证据保留于本任务 issue99 审计目录的 registry-stall.log、transmite-stall-app-full.log、transmite-stall-container.log、transmite-restart-daemon.log、final-process-state.log、bvt-after-stall.log。未采集包含运行时敏感数据的 core。现有 watchdog 的预期代码路径为注销后 std::abort();退出码 139 的精确来源尚未确定,不能直接认定是新 Registry 或历史 #96/#104 的根因。
本轮定向 RL-WORKER-01 已在原始 fb2bb88 镜像重复复现:撤销独占栈唯一 worker 租约后,进程退出 139,OOMKilled=false。调试器记录 watchdog → abort → 两次 SIGABRT → libc abort+386 的 hlt 指令触发 SIGSEGV;并非此次注销中的非法访问。进程是容器 PID 1。完整调用栈不含参数、局部变量或 core。
修复方向为明确非零退出(EXIT_FAILURE=1),保持全进程 fencing,并避免在停服前等待服务注销网络操作;旧注册由 30 秒 TTL 或重启后的注册替换收敛。先将同一 Go 用例收敛到明确退出码 1 并再次观察原镜像 RED,再修改生产代码。该调整细化“可判断的受控退出”的既有验收,不扩大主问题。
Problem or Goal
查明 etcd worker 租约丢失后的实际退出路径与退出码,确保服务立即停止不再安全的发号,并提供可判断的受控退出及恢复证据。
Scope
调查 Transmite worker_id watchdog、EtcdWorkIdAllocator、LeaderElection 与注册注销交互;建立延迟观察进程状态的纯 Go 故障用例,补齐退出原因诊断。仅按取得的 RED 修复明确缺陷。
Non-goals
关闭或弱化 worker_id 丢失保护、允许不具备发号权的实例继续发送、完整 HA、推断 #96 或 #104 同根因、生产故障演练。
Acceptance Criteria
Test-first Plan
在独占合成栈复制等价 etcd 故障,使用 Go 测试获取进程/退出事件和经过筛选的日志;在恢复首次成功后继续观察至少一个相关租约/监控周期。必要时只在本地受控调试器中采集调用栈,避免公开含凭据的内存。确定真实根因和失败断言后再修改生产代码。
Risk and Security
仅独占合成环境,故障前登记恢复动作。服务发号 fencing 属于数据正确性边界,禁止为使测试绿而取消安全退出。日志仅保留进程、错误分类和合成实例信息;不公开令牌、密码或原始内存。
Architecture Impact
No,当前仅调查既有服务边界与线程生命周期;具体变更以根因证据为准。
Core-flow Impact
Yes,worker_id 所有权、消息 ID 安全与服务退出。
Required Skill Updates
.agents/skills/chatnow-testing/references/framework.md;若修改行为,同步 .agents/skills/chatnow-orienting/references/core-flows.md 及相关技术引用。
Implementation Evidence
修复实现于 Draft PR #109(2bdd7c6)。明确退出 RED 为 expected 1 / actual 139,GREEN 连续三次 exit=1、非 OOM 且恢复稳定。BVT 18、Functional 191、Scenario 12、Reliability 7 全部通过;当前提交 CI 34759231921 的五项必需作业全部成功。保留首次磁盘 flood-stage 导致的搜索失败及清理缓存后完整回归证据。检测策略未扩大覆盖,不声称证明检测前的严格线性化发号安全。
Target Version
3.0-dev;本轮证据基于 PR #107 的 fb2bb88,独占本地合成 Compose 栈。
Evidence
2026-09-13 UTC,在九服务编译、BVT、Functional、Scenario 与完整 Reliability 全部通过后,额外暂停 etcd 35 秒再恢复。八个服务注册项取得新租约,初次快照中九个应用进程身份未变,全栈就绪检查通过;该快照没有覆盖后续 watchdog 周期。
12:06:01.648,Transmite 日志报告 worker_id 租约丢失,将 abort 以防雪花 ID 重号;Docker daemon 随后记录 exitCode=139、manualRestart=false、restartCount=1,退出时间 12:06:01.872,12:06:02.129 重新启动,OOMKilled=false。后续 BVT 18 项通过。
完整证据保留于本任务 issue99 审计目录的 registry-stall.log、transmite-stall-app-full.log、transmite-stall-container.log、transmite-restart-daemon.log、final-process-state.log、bvt-after-stall.log。未采集包含运行时敏感数据的 core。现有 watchdog 的预期代码路径为注销后 std::abort();退出码 139 的精确来源尚未确定,不能直接认定是新 Registry 或历史 #96/#104 的根因。
本轮定向 RL-WORKER-01 已在原始 fb2bb88 镜像重复复现:撤销独占栈唯一 worker 租约后,进程退出 139,OOMKilled=false。调试器记录 watchdog → abort → 两次 SIGABRT → libc abort+386 的 hlt 指令触发 SIGSEGV;并非此次注销中的非法访问。进程是容器 PID 1。完整调用栈不含参数、局部变量或 core。
修复方向为明确非零退出(EXIT_FAILURE=1),保持全进程 fencing,并避免在停服前等待服务注销网络操作;旧注册由 30 秒 TTL 或重启后的注册替换收敛。先将同一 Go 用例收敛到明确退出码 1 并再次观察原镜像 RED,再修改生产代码。该调整细化“可判断的受控退出”的既有验收,不扩大主问题。
Problem or Goal
查明 etcd worker 租约丢失后的实际退出路径与退出码,确保服务立即停止不再安全的发号,并提供可判断的受控退出及恢复证据。
Scope
调查 Transmite worker_id watchdog、EtcdWorkIdAllocator、LeaderElection 与注册注销交互;建立延迟观察进程状态的纯 Go 故障用例,补齐退出原因诊断。仅按取得的 RED 修复明确缺陷。
Non-goals
关闭或弱化 worker_id 丢失保护、允许不具备发号权的实例继续发送、完整 HA、推断 #96 或 #104 同根因、生产故障演练。
Acceptance Criteria
Test-first Plan
在独占合成栈复制等价 etcd 故障,使用 Go 测试获取进程/退出事件和经过筛选的日志;在恢复首次成功后继续观察至少一个相关租约/监控周期。必要时只在本地受控调试器中采集调用栈,避免公开含凭据的内存。确定真实根因和失败断言后再修改生产代码。
Risk and Security
仅独占合成环境,故障前登记恢复动作。服务发号 fencing 属于数据正确性边界,禁止为使测试绿而取消安全退出。日志仅保留进程、错误分类和合成实例信息;不公开令牌、密码或原始内存。
Architecture Impact
No,当前仅调查既有服务边界与线程生命周期;具体变更以根因证据为准。
Core-flow Impact
Yes,worker_id 所有权、消息 ID 安全与服务退出。
Required Skill Updates
.agents/skills/chatnow-testing/references/framework.md;若修改行为,同步 .agents/skills/chatnow-orienting/references/core-flows.md 及相关技术引用。
Implementation Evidence
修复实现于 Draft PR #109(2bdd7c6)。明确退出 RED 为 expected 1 / actual 139,GREEN 连续三次 exit=1、非 OOM 且恢复稳定。BVT 18、Functional 191、Scenario 12、Reliability 7 全部通过;当前提交 CI 34759231921 的五项必需作业全部成功。保留首次磁盘 flood-stage 导致的搜索失败及清理缓存后完整回归证据。检测策略未扩大覆盖,不声称证明检测前的严格线性化发号安全。