Files
story/docs/device-factory-reset-controls-20260922.md
T
Codex Local bf1233d5df
ci / verify (push) Canceled after 0s
feat: expand companion platform, device controls, and memoir workflows
Add customer and operator login, BLE provisioning, device fleet controls, call memory, memoir generation, and refreshed family and maintenance portals. Include API contracts, migrations, firmware sources, tests, assets, and deployment documentation.
2026-10-08 10:06:44 +08:00

42 lines
5.1 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# COM6 恢复出厂实现进度
状态:后端和网页已发布 `0.99.9-rc.device-reset1`,小程序入口已实现但尚未确认正式发布。COM6 已烧录 `1.7.0-controls.5` 并通过更新后的软件语音通路回归。尚未对 COM6 执行清空,实机重置、重新配网及重新绑定验收仍待完成。
## 已实现的流程
1. 原账号通过现有解绑流程释放设备。新设备仍绑定家庭或账号时,恢复出厂接口返回 `DEVICE_RESET_AUTHORIZATION_REQUIRED`。
2. 在设备附近进入蓝牙配网模式,客户端读取 `get_info.factory_reset_supported`。两端页面复用 Wi-Fi 输入,确认擦除范围后发送 `factory_reset` 命令,不发送绑定令牌。已绑定设备需要先从原账号解绑,旧固件不显示入口。
3. 设备显示擦除提示,用户在 60 秒内轻触确认。请求在确认前只处于 `received`,没有向云端发起重置。确认事件和 Wi-Fi 参数写入现有 BLE pending 记录,格式版本 3。
4. 设备联网后,以既有 DEVREQ1 工厂身份签名读取 `/api/v1/device/factory-reset/state`。该路由只向未绑定设备返回当前重置计数器,不是解绑授权。
5. 设备生成并持久化固定重置正文,再调用 `/api/v1/device/factory-reset`。重试保持正文和 reset_id,HTTP nonce 可更新。后端复用 devicereset 事务和幂等记录,绑定代次变化或新归属会使旧请求失效。
6. 事务检查通话和两类固件任务,清空云端期望与实际配置,吊销旧用户会话及绑定上下文,并保留出厂身份和 License。此次修复了原服务仍保留 desired_config 和漏查 fleet_ota 的问题。
7. 固件验证重置编号、计数器、CLAIMABLE 状态和完整清理动作清单,再把“云端已批准”保存到 Flash,最后清除本地用户设置与 Wi-Fi。
8. 若清理中断,下次启动在初始化语音、触摸线程和 BLE 前完成剩余清理;未获得云端批准时不会擦除。完成后重启至蓝牙添加流程。
## 本地清理范围
- 清除 `voice`、`ble_setup`、`wifi` 命名空间。
- 清除 `platform` 中的语音服务凭据和 pending_conv;保留平台设备身份。
- 清除 `control` 中的音量、名称、待机状态、旧命令回执和诊断探针。
- 保留 `ble_factory` 工厂身份分区、control 的 OTA/installed 元数据、应用分区和资源分区。
- 保留 `factory_reset` 恢复日志;批准标记写入并读回验证后才允许清理,清理全部成功才写完成标记。
- Wi-Fi 驱动在现有正常启动与 BLE 路径均使用 RAM 存储;仅从上述 Wi-Fi 命名空间恢复连接。
## 已验证
- devicereset 与 onboarding 全包隔离数据库测试通过,最新日志 `.tmp-factory-reset/integration/`。
- 新增真实 DEVREQ1 路由测试:清除旧配置、丢失响应后重放而不重复重置、禁止修改重放正文、家庭/账号绑定拒绝、匿名拒绝、pending/accepted OTA 拒绝、四种活动通话状态拒绝、结束后允许、重新绑定后旧回执不能清除新归属。
- 原恢复出厂 HTTP handler 测试通过。
- `device-reset-host.cjs` 执行真实 C 实现,在 ASan/UBSan 下通过:云端拒绝不擦除、正文重试一致、错误回执拒绝、请求保存失败、批准保存失败、Wi-Fi 清理前中断、完成标记提交失败以及损坏恢复记录。
- 更新真实 BLE endpoint 的主机测试,验证新命令等待实体确认、不能与配网任务互换、禁止携带绑定令牌、配网窗口结束拒绝。
- 最终 ESP-IDF 构建通过:`1.7.0-controls.5`,3,753,168 字节,SHA256 `6a898dc76fb2f916d212f6b7a8137f2445929700046405c5a693d718fa645647`。日志 `.tmp-factory-reset/firmware-build6.log`。确认 ota_0 仍为有效活动槽后,仅烧录 0x10000 应用槽,设备 MAC 与烧录哈希校验通过;证据 `flash-controls5.json`。
- BLE 回执新增 `operation`,区分 `factory_reset` 与 `configure`;两端仅接受匹配的重置回执,蓝牙断开、其他操作成功或仅云端未绑定均不能显示重置成功。
- 线上发布检查:API/Web 版本、首页及 JS/CSS 哈希一致;运行配置和其他服务容器保持原值;新重置接口匿名请求均被拒绝。
- 网页本地模拟验收覆盖明确擦除提示、等待实体确认、成功后重新添加指引、断连不误报成功及旧固件隐藏入口;此项不替代设备实测。
- 03:05 UTC COM6 上报 `controls.5`、MQTT 已连接,绑定数 1,音量实际/期望均 60,配置版本实际/期望均 12,未完成命令 0。
- 更新后固定语句回归 `voice-20260922T030755Z.log`:持续下行 PCM、实际播放写入、解码及写入错误 0,主动结束成功回执。没有保存语音文本;仍需现场听感及真实麦克风收音确认。
## 待完成
需要家属账号授权解绑及设备现场轻触确认,完成实物重置、重新配网、重新绑定和语音恢复。已经请求用户确认是否同意清除真实设备设置及现场配合;未收到答复不能当作授权。小程序正式发布和两端登录后的实机端到端验收仍待完成。主机故障注入与数据库测试不作为 COM6 清空成功记录。