docs: 按 humanizer 重写项目文档并同步 RMIC::2026 现状
构建客户端 / 检查(类型 + 单元测试) (push) Canceled after 0s
构建客户端 / Linux x64(deb + AppImage) (push) Canceled after 0s
构建客户端 / Windows x64(NSIS 安装包) (push) Canceled after 0s
构建客户端 / macOS 通用(.app + .dmg) (push) Canceled after 0s

This commit is contained in:
2026-10-19 10:47:00 +08:00
parent d9a27b69f3
commit e3acb37d32
22 changed files with 3029 additions and 203 deletions
@@ -0,0 +1,39 @@
id,category,priority,precondition,steps,expected,pass_criteria,evidence,tools,est_minutes
"N-01","正常","P0","健康板;新模板;工具版本锁定","分段写 Bootloader/分区表/App;逐段 verify;复位;串口与 UDP 验收","3 段 verify OK;启动日志正常;15 s 内收到完整帧","verify 全通过;无 panic/brownout;perf 帧率>=15 fps 且丢帧<=5%","verify 日志;serial.log;perf.json","esptool;perf_probe;serial_soak","20"
"N-02","正常","P0","健康板;已 provision;同布局","只写新 App;verify;复位;检查 config 保留","App 版本更新;原 SSID 配置仍生效","App hash 与 manifest 一致;config seq 不变;联网正常","verify;serial;perf","esptool;perf_probe","15"
"N-03","正常","P0","健康板;已 provision;模板支持 config","只 patch config(换 SSID);不写 App;复位","新 SSID 生效;App SHA-256 不变","app-readback SHA-256 与 manifest 一致;serial 显示 config source=partition;联网正常","app hash;serial;perf","esptool;provision.py;perf_probe","10"
"N-04","正常","P1","健康板","连续 provisioning 3 次(相同输入)","幂等;无 brick;报告一致","3/3 通过;设备身份一致;无重复写入错误","3 份 result.json","provision.py","20"
"N-05","正常","P1","健康板;归档镜像","写 merged image 并 verify(对照)","记录是否通过;不用于坏板","结果记录;不改变坏板策略","verify 日志","esptool","10"
"B-01","坏板","P0","故障板;E1 备份已验证","牺牲板 E2 写读表征;生产板定向读 0xFADE7/0x10863 + 扫描模板写入区","E2 复现缺陷;生产板地图正确;恢复 verify","至少识别两个已知地址;恢复后关键区 verify OK","scan.json;verify;backup hash","esptool;provision.py","30"
"B-02","坏板","P0","故障板;新布局;模板镜像","分段写新 App/表;verify;复位","写入区不含坏地址;App 实际镜像 verify OK;启动","3 段 verify OK;serial live;UDP 有帧","verify;serial;perf","esptool;perf_probe","25"
"B-03","坏板","P0","故障板;强制 App 槽包含坏字节","写实际镜像;读回比较","若镜像字节不可写则 verify 失败;工具换槽或拒绝;不 brick","失败可定位到地址;设备仍可进下载模式;报告不报成功","verify;scan;report","esptool;provision.py","25"
"B-04","坏板","P0","故障板;config 一个槽含坏扇区","写 config 多副本;复位","跳过坏槽;至少一个副本有效;联网","serial 显示有效 seq;报告记录 skipped 槽;App hash 不变","scan;serial;report","esptool;provision.py","20"
"B-05","坏板","P1","故障板;merged 镜像","写 merged image(对照)","预期失败或高风险;工具默认禁止","记录失败地址/错误;后续流程仍走分段","verify 日志;report","esptool","15"
"B-06","坏板","P1","故障板;疑似间歇坏字节","同一扇区扫描 3 次;不同温度/供电","标记 SUSPECT;隔离;不用于 App","3 次结果一致或明确记录间歇;SUSPECT 不进 App 槽","scan.json","esptool;provision.py","30"
"B-07","坏板","P2","故障板;全片备份","全片扫描 + 恢复","得到全片地图;恢复关键区;不丢数据","恢复后关键区 verify OK;时间记录","scan.json;backup hash","esptool","60"
"O-01","OTA","P1","OTA-ready;Bootloader rollback","写 ota_0;切换;复位","新版本启动;分区日志正确","serial 显示 ota_0;版本正确;联网","serial;otatool","otatool.py;perf_probe","30"
"O-02","OTA","P1","OTA-ready;当前槽有效","写损坏镜像/错误 SHA;复位","Bootloader 拒绝;旧槽仍启动","旧版本启动;无 brick;serial 有拒绝原因","serial","otatool.py;esptool","20"
"O-03","OTA","P1","OTA-ready;USB 继电器","OTA 写入 25/50/75% 时断电;恢复","至少一个槽可启动;无需整片擦","3 个断点均能启动;版本/分区符合预期","serial;relay log","otatool.py;relay","45"
"O-04","OTA","P1","OTA-ready;目标槽含坏区","OTA 到坏槽;复位","安全失败;旧槽不受影响","旧版本启动;无 brick;报告记录坏槽","serial;scan","otatool.py;esptool","25"
"O-05","OTA","P2","启用 anti-rollback","OTA 降级;复位","按策略拒绝或接受;不 brick","策略与日志一致;设备可启动","serial","otatool.py","20"
"H-01","热插拔","P0","1 块板;驱动已装","插拔 20 次;记录发现时间","20/20 发现;P95<=2 s","无漏检;无端口残留;无错板","discovery.json","serialport;provision.py","20"
"H-02","热插拔","P0","2 块板同时插入","按 MAC 选择;执行 patch/verify","0 次错板;端口/MAC 正确","两块设备报告 MAC 与操作一致","report","serialport;provision.py","20"
"H-03","热插拔","P1","写入进行中","拔掉 USB","报错;设备可恢复;不报成功","错误码明确;重插后可进下载模式","log;report","provision.py","15"
"H-04","热插拔","P1","扫描进行中","拔掉 USB","报错;备份可恢复;不半写成功","重插后恢复;关键区 verify OK","log;backup","provision.py","20"
"H-05","热插拔","P1","串口监视器占用端口","执行 provisioning","明确端口占用;不挂死","错误码/提示;进程退出","log","provision.py;espflash monitor","10"
"H-06","热插拔","P0","错固件/错芯片","选择不兼容 manifest","写入前拒绝;设备不变","App hash 前后一致;错误码 3","report","provision.py","10"
"P-01","断电","P0","健康板/坏板;可恢复","App 写入 50% 断电;上电;重刷","可进下载模式;重刷后启动;不 brick","BOOT 恢复;verify OK;serial live","serial;verify","esptool;relay","20"
"P-02","断电","P0","config 已有一个有效副本","config 写入时断电;上电","旧副本有效;启动","serial 显示旧 seq;联网正常","serial","esptool;relay","15"
"P-03","断电","P1","分区表迁移中","分区表写入时断电;上电;重刷","BOOT 恢复;重刷表/App;不 brick","可进下载模式;重刷后启动","serial;verify","esptool;relay","25"
"P-04","断电","P2","Bootloader 更新中(最高风险)","Bootloader 写入时断电;上电;BOOT 恢复","可恢复;不 permanent brick","BOOT 可进下载;重刷后启动","serial;verify","esptool;relay","30"
"P-05","断电","P2","扫描/恢复中","拔 USB/断电;恢复","备份可用;关键区不丢","关键区 verify OK;无半写成功","backup hash","esptool","30"
"S-01","安全","P0","正常 provision","检查日志、报告、命令行历史","无密码明文;只有 SSID/hash/seq","grep 不到密码;报告字段合规","grep;report","provision.py","10"
"S-02","安全","P1","Secure Boot/加密板(如有)","espefuse summary;尝试未签名 patch","检测 eFuse;拒绝未签名/未加密 patch","工具退出码 10;设备不变","espefuse 输出;report","espefuse;espsecure","20"
"S-03","安全","P1","篡改 manifest/App","校验 SHA-256 后烧录","拒绝烧录","错误码 3;设备不变","report","provision.py","10"
"S-04","安全","P2","伪造 VID/PID 设备","主动探测 chip/MAC/Flash","识别不匹配;拒绝","不写入;报告记录","report","serialport;esptool","20"
"R-01","回归","P0","host 环境","pytest 全部 host tests","100% 通过","0 failed;覆盖 config/分区/manifest/选择逻辑","JUnit/HTML","pytest","10"
"R-02","回归","P1","硬件在环","20 次循环(N/B/H 子集)","首次通过率>=95%;0 brick;0 错板","统计达标;失败可定位","summary.json","pytest;provision.py","120"
"R-03","回归","P0","锁定工具版本","重复执行同一命令 3 次","同输入同命令/同结果","版本/哈希/输出一致","versions.txt;report","all","15"
"R-04","回归","P1","报告 schema","用 jsonschema 校验 result/scan/manifest","全部通过","0 schema error","schema 校验日志","pytest;jsonschema","10"
"M-01","迁移","P1","旧布局 0x70000 板","备份;写新 App→新表→可选 Bootloader;保留 NVS/PHY;复位","新布局启动;NVS/PHY 保留;config 可用","serial live;MAC 不变;Wi-Fi 校准未丢","serial;report","esptool;provision.py","30"
"M-02","迁移","P0","旧布局板","尝试只 patch config","工具拒绝并提示迁移","错误码 3/提示明确;设备不变","report","provision.py","10"
1 id category priority precondition steps expected pass_criteria evidence tools est_minutes
2 N-01 正常 P0 健康板;新模板;工具版本锁定 分段写 Bootloader/分区表/App;逐段 verify;复位;串口与 UDP 验收 3 段 verify OK;启动日志正常;15 s 内收到完整帧 verify 全通过;无 panic/brownout;perf 帧率>=15 fps 且丢帧<=5% verify 日志;serial.log;perf.json esptool;perf_probe;serial_soak 20
3 N-02 正常 P0 健康板;已 provision;同布局 只写新 App;verify;复位;检查 config 保留 App 版本更新;原 SSID 配置仍生效 App hash 与 manifest 一致;config seq 不变;联网正常 verify;serial;perf esptool;perf_probe 15
4 N-03 正常 P0 健康板;已 provision;模板支持 config 只 patch config(换 SSID);不写 App;复位 新 SSID 生效;App SHA-256 不变 app-readback SHA-256 与 manifest 一致;serial 显示 config source=partition;联网正常 app hash;serial;perf esptool;provision.py;perf_probe 10
5 N-04 正常 P1 健康板 连续 provisioning 3 次(相同输入) 幂等;无 brick;报告一致 3/3 通过;设备身份一致;无重复写入错误 3 份 result.json provision.py 20
6 N-05 正常 P1 健康板;归档镜像 写 merged image 并 verify(对照) 记录是否通过;不用于坏板 结果记录;不改变坏板策略 verify 日志 esptool 10
7 B-01 坏板 P0 故障板;E1 备份已验证 牺牲板 E2 写读表征;生产板定向读 0xFADE7/0x10863 + 扫描模板写入区 E2 复现缺陷;生产板地图正确;恢复 verify 至少识别两个已知地址;恢复后关键区 verify OK scan.json;verify;backup hash esptool;provision.py 30
8 B-02 坏板 P0 故障板;新布局;模板镜像 分段写新 App/表;verify;复位 写入区不含坏地址;App 实际镜像 verify OK;启动 3 段 verify OK;serial live;UDP 有帧 verify;serial;perf esptool;perf_probe 25
9 B-03 坏板 P0 故障板;强制 App 槽包含坏字节 写实际镜像;读回比较 若镜像字节不可写则 verify 失败;工具换槽或拒绝;不 brick 失败可定位到地址;设备仍可进下载模式;报告不报成功 verify;scan;report esptool;provision.py 25
10 B-04 坏板 P0 故障板;config 一个槽含坏扇区 写 config 多副本;复位 跳过坏槽;至少一个副本有效;联网 serial 显示有效 seq;报告记录 skipped 槽;App hash 不变 scan;serial;report esptool;provision.py 20
11 B-05 坏板 P1 故障板;merged 镜像 写 merged image(对照) 预期失败或高风险;工具默认禁止 记录失败地址/错误;后续流程仍走分段 verify 日志;report esptool 15
12 B-06 坏板 P1 故障板;疑似间歇坏字节 同一扇区扫描 3 次;不同温度/供电 标记 SUSPECT;隔离;不用于 App 3 次结果一致或明确记录间歇;SUSPECT 不进 App 槽 scan.json esptool;provision.py 30
13 B-07 坏板 P2 故障板;全片备份 全片扫描 + 恢复 得到全片地图;恢复关键区;不丢数据 恢复后关键区 verify OK;时间记录 scan.json;backup hash esptool 60
14 O-01 OTA P1 OTA-ready;Bootloader rollback 写 ota_0;切换;复位 新版本启动;分区日志正确 serial 显示 ota_0;版本正确;联网 serial;otatool otatool.py;perf_probe 30
15 O-02 OTA P1 OTA-ready;当前槽有效 写损坏镜像/错误 SHA;复位 Bootloader 拒绝;旧槽仍启动 旧版本启动;无 brick;serial 有拒绝原因 serial otatool.py;esptool 20
16 O-03 OTA P1 OTA-ready;USB 继电器 OTA 写入 25/50/75% 时断电;恢复 至少一个槽可启动;无需整片擦 3 个断点均能启动;版本/分区符合预期 serial;relay log otatool.py;relay 45
17 O-04 OTA P1 OTA-ready;目标槽含坏区 OTA 到坏槽;复位 安全失败;旧槽不受影响 旧版本启动;无 brick;报告记录坏槽 serial;scan otatool.py;esptool 25
18 O-05 OTA P2 启用 anti-rollback OTA 降级;复位 按策略拒绝或接受;不 brick 策略与日志一致;设备可启动 serial otatool.py 20
19 H-01 热插拔 P0 1 块板;驱动已装 插拔 20 次;记录发现时间 20/20 发现;P95<=2 s 无漏检;无端口残留;无错板 discovery.json serialport;provision.py 20
20 H-02 热插拔 P0 2 块板同时插入 按 MAC 选择;执行 patch/verify 0 次错板;端口/MAC 正确 两块设备报告 MAC 与操作一致 report serialport;provision.py 20
21 H-03 热插拔 P1 写入进行中 拔掉 USB 报错;设备可恢复;不报成功 错误码明确;重插后可进下载模式 log;report provision.py 15
22 H-04 热插拔 P1 扫描进行中 拔掉 USB 报错;备份可恢复;不半写成功 重插后恢复;关键区 verify OK log;backup provision.py 20
23 H-05 热插拔 P1 串口监视器占用端口 执行 provisioning 明确端口占用;不挂死 错误码/提示;进程退出 log provision.py;espflash monitor 10
24 H-06 热插拔 P0 错固件/错芯片 选择不兼容 manifest 写入前拒绝;设备不变 App hash 前后一致;错误码 3 report provision.py 10
25 P-01 断电 P0 健康板/坏板;可恢复 App 写入 50% 断电;上电;重刷 可进下载模式;重刷后启动;不 brick BOOT 恢复;verify OK;serial live serial;verify esptool;relay 20
26 P-02 断电 P0 config 已有一个有效副本 config 写入时断电;上电 旧副本有效;启动 serial 显示旧 seq;联网正常 serial esptool;relay 15
27 P-03 断电 P1 分区表迁移中 分区表写入时断电;上电;重刷 BOOT 恢复;重刷表/App;不 brick 可进下载模式;重刷后启动 serial;verify esptool;relay 25
28 P-04 断电 P2 Bootloader 更新中(最高风险) Bootloader 写入时断电;上电;BOOT 恢复 可恢复;不 permanent brick BOOT 可进下载;重刷后启动 serial;verify esptool;relay 30
29 P-05 断电 P2 扫描/恢复中 拔 USB/断电;恢复 备份可用;关键区不丢 关键区 verify OK;无半写成功 backup hash esptool 30
30 S-01 安全 P0 正常 provision 检查日志、报告、命令行历史 无密码明文;只有 SSID/hash/seq grep 不到密码;报告字段合规 grep;report provision.py 10
31 S-02 安全 P1 Secure Boot/加密板(如有) espefuse summary;尝试未签名 patch 检测 eFuse;拒绝未签名/未加密 patch 工具退出码 10;设备不变 espefuse 输出;report espefuse;espsecure 20
32 S-03 安全 P1 篡改 manifest/App 校验 SHA-256 后烧录 拒绝烧录 错误码 3;设备不变 report provision.py 10
33 S-04 安全 P2 伪造 VID/PID 设备 主动探测 chip/MAC/Flash 识别不匹配;拒绝 不写入;报告记录 report serialport;esptool 20
34 R-01 回归 P0 host 环境 pytest 全部 host tests 100% 通过 0 failed;覆盖 config/分区/manifest/选择逻辑 JUnit/HTML pytest 10
35 R-02 回归 P1 硬件在环 20 次循环(N/B/H 子集) 首次通过率>=95%;0 brick;0 错板 统计达标;失败可定位 summary.json pytest;provision.py 120
36 R-03 回归 P0 锁定工具版本 重复执行同一命令 3 次 同输入同命令/同结果 版本/哈希/输出一致 versions.txt;report all 15
37 R-04 回归 P1 报告 schema 用 jsonschema 校验 result/scan/manifest 全部通过 0 schema error schema 校验日志 pytest;jsonschema 10
38 M-01 迁移 P1 旧布局 0x70000 板 备份;写新 App→新表→可选 Bootloader;保留 NVS/PHY;复位 新布局启动;NVS/PHY 保留;config 可用 serial live;MAC 不变;Wi-Fi 校准未丢 serial;report esptool;provision.py 30
39 M-02 迁移 P0 旧布局板 尝试只 patch config 工具拒绝并提示迁移 错误码 3/提示明确;设备不变 report provision.py 10