Skip to content

✅ test(e2e): 增加语音日程用户旅程 - #374

Open
jing-gou wants to merge 1 commit into
1024XEngineer:mainfrom
jing-gou:dev/350-schedule-voice-hil
Open

✅ test(e2e): 增加语音日程用户旅程#374
jing-gou wants to merge 1 commit into
1024XEngineer:mainfrom
jing-gou:dev/350-schedule-voice-hil

Conversation

@jing-gou

Copy link
Copy Markdown
Collaborator

结论

增加 Issue #350 的 Host/HIL 语音日程用户旅程 runner、夹具、板卡 descriptor 模板和证据测试。

背景

Issue #350 要求通过正式语音会话验证 schedule.create/query/update/delete、幂等、补全、歧义/冲突和语音修正,并明确记录当前未公开的 schedule.undo 缺口。

改动范围

  • 增加 scripts/schedule_voice_e2e.pyscripts/run_schedule_voice_e2e.py
  • 增加 Host 旅程测试和 SparkBot/PCB descriptor 模板。
  • 增加固定业务 fixture、失败分类和脱敏 evidence 结构。
  • 没有修改日程业务实现、MCP 契约、IM、提醒、Gateway、屏幕或声学验收。

接口与依赖影响

仅复用现有统一 E2E Runner、设备租约、公开 schedule MCP 边界和百炼语音脚本;不新增运行时依赖或持久化格式。

测试与构建证据

Host 测试和 Python 测试由该分支提供;真实 PCB/SparkBot HIL 需在对应设备、网络和 BAILIAN_KEY_FILE 可用后执行。当前 PR 不伪造未执行的硬件证据。

已知风险

周期例外和 schedule.undo 取决于当前公开契约;未开放时记录 product_gap。HIL 适配器只负责真实设备语音边界,业务断言仍需结合设备实际 evidence。

兼容窗口与回退

新增脚本和配置模板,不改变现有运行路径。回退本 PR 即可移除新增测试文件。

Refs #350

@fennoai fennoai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

本次审查覆盖新增的 Host/HIL schedule voice runner、设备 descriptor、证据生成和 Python 测试。Host 侧现有 5 项 Python 测试及新增脚本编译均通过;以下问题会影响 HIL 可执行性或测试结果可信度。

Additional findings

  • scripts/schedule_voice_e2e.py:?: [P1] 将 descriptor 的串口传给实际 HIL 命令: prepare 校验并租用了 descriptor 中的 descriptor.port,但这里启动的 run_bailian_sparkbot_test.sh 没有收到该端口;脚本会改用继承的 SPARKBOT_SERIAL 或其默认值。因此使用示例 descriptor 指定的板卡时,租约保护的是一个串口而测试实际可能打开另一个串口,甚至误测默认设备。请显式传递 SPARKBOT_SERIAL=str(self.descriptor.port)(或增加等价的 --port 参数)。
  • scripts/schedule_voice_e2e.py:?: [P1] 让 --scenario 真正驱动被测旅程: CLI 暴露了 --scenario,但 Host adapter 这里始终调用固定的 run_host_matrix,而 HIL adapter 的 run 也始终发送同一组 create/query 文本;除默认场景外,用户请求的场景(例如 update、delete-idempotency 或 recurrence-exception)不会被执行却可能报告通过。请把选择的 scenario 传入 Host/HIL 执行路径,并在证据中记录实际 case。
  • scripts/schedule_voice_e2e.py:?: [P2] 失败矩阵不得写成 passed 证据: 这里在计算三个 scenario outcome 之前就把证据 status 固定为 passed。如果新增矩阵中的任一操作失败,MatrixResult.passed 会导致 runner 失败,但已落盘的 journey-<run_id>.json 仍宣称通过,消费者会得到与最终 runner 状态矛盾的证据。请先计算 passed,再将 status 设为 passedfailed(并保留对应失败信息)。

Comment on lines +464 to +466
report = _last_json_object(completed.stdout)
if not report:
raise RunnerFailure(FailureCategory.PRODUCT, "voice_report_missing")

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

[P1] 解析多行 HIL 报告而不是按行解析

被调用的 voice_linx_serial_multiturn_test.py 使用 json.dumps(..., indent=2) 输出多行 JSON;_last_json_object 只尝试解析以 { 开头的单行,因此对该正常输出始终返回 None,HIL 成功执行随后会被错误归类为 voice_report_missing。请解析完整 stdout 中的 JSON(或让被调用脚本输出机器可读的单行结果)。

@jing-gou

Copy link
Copy Markdown
Collaborator Author

PCB HIL 执行记录(2026-08-26)

  • Host runner:通过;三套 Python E2E 测试分别为 350 = 5 passed、351 = 2 passed、352 = 2 passed。
  • PCB 固件:构建成功,应用分区 ota_0 @ 0x20000 写入并 verify 成功;MCP 日程/提醒/IM 工具启动完成。
  • DashScope preflight:1/1 成功。
  • PCB 真实 HIL:350、351、352 均已执行,均分类为 device 失败;设备 Wi-Fi 配网帧已写入,但 WIFI_STA_DISCONNECTED reason=201(未找到 SSID),未达到 wifi_ready/sntp_synced/ready,因此没有伪造通过。
  • 证据目录:/tmp/voicelife-hil-evidence(本机保存,未上传凭据或完整串口日志)。

@JunLang-7 JunLang-7 left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

hard code了日期 如2026-09-02 过期之后再进行HIL会失败

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.

2 participants