serial-assistant:daemon 重启后端口不自动重开、期间静默丢日志——自动重连 + 日志缺口标记 #75
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
This is by an automated agent, not a human.
来源:PR #74 上的指示(2026-11-04)——「你提出不好用的问题,然后给出改进建议,这都体现在工单中」,然后改进 serial-assistant。本工单 = 问题登记 + 改进建议;修复 PR 见本工单回帖。
问题(台架实证,阶段 16 网络回归 2026-11-03/04)
那一轮抓板端日志走 serial-assistant daemon,daemon 中途重启过一次,重启后
status.port.ready: false,且不会自己把端口重新打开;从重启点到发现为止,板子吐的字节全部静默丢失,那一轮的板端日志就是这么丢的,被迫改用 pyserial 直读 COM3 重跑。根因(对照
.dsh/skills/serial-assistant/scripts/serial_tool.py,master 2b5eb1c,v1.1.0-skill)Daemon.run()(:655)第一件事就是self._save_meta()(:657),而新实例port_name=None(__init__:274),于是 meta.json 被立即改写成port: null——上一任 daemon 死在持口状态时,_save_meta()(:309–317)里那份端口/波特率/DTR/RTS 现场在重启瞬间就被清掉;启动流程也没有任何重开动作(state="stopped"),要等人手工再敲一次open才恢复采集。_port_error()(:400–412)释放端口、置state="error",只留一句port released, reopen with 'open';串口环serial_loop()(:354–388)在self.ser is None时纯空转。USB 转串口掉线/重枚举(台架常态)后,即使 CH340 几秒后回来,daemon 也不会自己去把它重新打开。verify_log.py、人)分不清「板子全程安静」和「采集器死了」——比丢日志本身更危险,因为它会让残缺日志看起来是完整的。wait-idle把「采集器死了」渲染成「板子安静」:端口未开时等待照常计满并返回良性的reason: no_data,调用方拿不到「这是因为没口可采」的信号(丢日志那一轮的形态正是如此)。影响
status。open之后采集一直在——中途断流而日志表面连续。改进建议(与修复 PR 一一对应)
close/stop),新 daemon 启动即按 meta 的 port/baud/DTR/RTS 自动重开;显式close/stop清除重开意图,之后不重开。_port_error后串口环不再躺平,按退避自动重试重开(REOPEN_SETTLE_S 起步、倍增、封顶 30 s),直到成功或显式close。status新增auto_reopen(enabled/attempts/last_error/next_retry_in_ms),port语义拆成ready(实际)与desired(意图);wait-idle在端口未开且自动重开未完成时快速失败并带上 auto-reopen 现场,不再返回no_data。serial-boot-test先open后wait-idle,不受影响);selftest新增无头用例(重开意图判定、退避计划、缺口标记、no_data 门);status.daemon.version升1.2.0-skill(一台机多副本靠版本辨归属);SKILL.md +串口助手设计说明.md+串口助手使用指南.md同步。验收标准
selftest全绿(含新增用例)。bench.lock独占 COM3,速测速放):open后强杀 daemon(模拟崩溃)→ 下一次 CLI 调用自动拉起新 daemon 并自动重开口,status.port.ready: true,serial.log 可见「缺口起/缺口止」两行 SYS 标记;close后重启 daemon 不自动重开;stop语义不变(停 daemon 即放手)。@super_agent_bot 按照你的建议进行修复测试
收到:按 #75 的 R1–R5 实施(自动重开 + 自动重连 + 缺口标记 + 状态可见),无头 selftest 与 COM3 台架锁下实测,修复 PR 会回帖到本工单。