A 階段最後 milestone、出測試計畫 + 自動化腳本 + 三平台人工 checklist、使用者下週手動跑實機驗證。 Testing artifacts (8 檔、2630 行): - .autoflow/06-testing/m9-5-validation-plan.md: 656 行(4 情境 × 3 平台 × 2 chip = 24 combo) - 4 e2e specs (vitest + RTL + mock WS / mock fetch): - firmware-upgrade-happy-path.spec.ts (357 / 4 cases) - firmware-upgrade-error-recovery.spec.ts (356 / 4 cases + 8 reason it.each) - firmware-r-fw-11-modal-not-closable.spec.ts (303 / 6 cases) - wails-onbeforeclose-firmware-active.spec.ts (217 / 9 cases、含 5 todo 占位 M9-12) - 3 manual checklists: macOS 264 / Windows 234 / Linux 243 行 設計取捨: - 不引入 Playwright/Cypress (visionA-local frontend 沒裝、屬 architect 決策)、走 vitest + mock - E2E 腳本放 06-testing/scripts/ 作 spec doc + 可選實作參考 - 實機驗證走人工 checklist (dongle 插拔 / kill process / SIGTERM 等需要實體互動) MJ3 修復 (M9-4 reviewer round 1 留的 follow-up): - server/internal/api/ws/firmware_ws_test.go: +16/-8 - "type": "firmware:progress" → "firmware_progress" (對齊 firmwareProgressMessage.Type) - "phase" → "stage" (對齊 TDD §4.2 + FirmwareProgress.Stage) - 不動 production code、只 test schema 對齊 執行建議 (給你下週): - Day 1 P0: macOS+Win+Linux × KL520+KL720 happy path (~3h) - Day 2 P1: R-FW-11 + disconnect_during_op + upgrade_mid_failed + 失敗注入 (4h) - Day 3 P2: SIGTERM 延遲關閉 + Wails OnBeforeClose force-quit modal (2-3h) 測試: - go test ./... -race 全綠 (server / wails / frontend 60 tests) - MJ3 修復不破壞既有測試 A 階段開發 6/7 完成 (M9 文件 + M9-1 ~ M9-4.5)、剩 M9-5 實機驗證 (你下週跑)、跑完依結果決定 A 階段交付或派 sub-agent 修。 Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
7.1 KiB
M9-5 Windows 實機驗證 checklist
對應 plan:
../m9-5-validation-plan.md平台:Windows 10 / 11(x86_64) 預估時間:3-4 小時 執行人:使用者(下週)
0. 前置準備(15 分鐘)
- 確認 Windows 版本:
winver、紀錄:__________ - visionA-local A 階段 build 已安裝(含 M9-1 ~ M9-4)
- 清空舊狀態:刪除
%APPDATA%\visiona-local\(PowerShell:Remove-Item -Recurse -Force "$env:APPDATA\visiona-local\") - 準備硬體:
- KL520 KDP1 legacy dongle:__________
- KL520 KDP2 dongle:__________
- KL720 dongle:__________
- WinUSB driver 已綁定(重要、KneronPLUS Windows 必要):
- 開「裝置管理員」→「通用序列匯流排控制器」
- 確認看到
Kneron USB Device或類似條目 - 若沒有、跑 Zadig 工具綁定 WinUSB driver(installer 應已處理)
- Chrome / Edge 任一最新版開啟、F12 DevTools 準備好
- Console / PowerShell 開好
1. Functional 升級流程驗證(90 分鐘)
1.1 情境 A:KL520 KDP1 → KDP2 完整 4-stage(30 分鐘)
前置:插 KL520 KDP1 dongle
- 啟動 visionA-local(雙擊
visiona-local.exe或 Start 選單) - Windows Defender 首次掃描:可能延遲 30-60 秒(KneronPLUS dll 簽章)、若超過 60 秒持續啟動 → P1 bug
- Wails 視窗開啟、控制台顯示 server URL
- 點「開啟瀏覽器」、Devices 頁出現
- 紅色 badge
KDP1 (legacy)顯示 - 點升級、confirm modal、from/to 正確
- 點「開始升級」、upgrading phase
- progress modal 不顯示 ✕ / 取消
- 紅色 banner「請勿拔除裝置」顯示
- stage 序列:preparing → loading → flashing → verifying
- ESC 不關 modal、點外部不關
- 升級在 60 秒內完成(實測時長:______ 秒)
- modal 顯示綠勾、自動關閉、toast 顯示 6 秒
- Devices 卡片 badge 變綠 +
v2.2.0 - Server log(
%APPDATA%\visiona-local\server.log)沒有 panic
截圖:
.autoflow/06-testing/screenshots/windows-A-before.png.autoflow/06-testing/screenshots/windows-A-upgrading.png.autoflow/06-testing/screenshots/windows-A-success.png
1.2 情境 B:KL520 KDP2 short-circuit(15 分鐘)
- 黃色 badge / 點升級
- 3 stage 序列(沒 loading)
- 60 秒內完成(實測:______ 秒)
1.3 情境 C:KL720 升級(15 分鐘)
- 點升級、confirm 顯示「3 分鐘」
- 3 stage(KL720 走 short-circuit)
- 200 秒內完成(實測:______ 秒)
1.4 情境 D:來回升級(15 分鐘)
- 重跑情境 A 一次
- 無 Error 15 SEND_DATA_TOO_LARGE
- 兩次都成功
1.5 多裝置同時連接(15 分鐘)
- KL520 + KL720 同時插
- 兩張卡片
- KL520 升級進行中、試 KL720 升級
- 被擋(409 或 modal 不開)
- KL520 完成後 KL720 可升級
2. Reliability 失敗注入(45 分鐘)
2.1 #1 scan_not_found(5 分鐘)
- 拔 USB、點升級
- error modal「找不到裝置」
2.2 #3 loader_write_failed(10 分鐘)
注入:loading stage 時、Task Manager 強殺 python.exe(或 PowerShell 跑 Stop-Process -Name python -Force)
- error modal「引導程式載入失敗」
- 「拔插後重試」按鈕
- 無 brick warning(recoverable)
2.3 #4 upgrade_mid_failed(10 分鐘)
注入:flashing stage 時、強殺 python
- error modal「韌體寫入失敗」
- errorCode
FW_UPGRADE_* - 「重試」按鈕
2.4 #5 disconnect_during_op(10 分鐘)
注入:flashing stage 時、拔 USB
- error modal「裝置已斷開」
- brick warning role=note
- 無 Retry 按鈕
- Contact Support destructive 按鈕
- 點 Contact Support、開 Outlook / 預設 mail handler
2.5 #6 timeout(10 分鐘)
- 拔 USB 後等 KL520 > 60s
- error modal「操作超時」
3. UX 驗證(30 分鐘)
3.1 Badge 4 色
| State | 觸發 | 紀錄 |
|---|---|---|
| current(綠) | [ ] | |
| older(黃) | [ ] | |
| legacy(紅) | KDP1 | [ ] |
| unknown(灰) | scan 過渡期 | [ ] |
3.2 Modal 警告 banner 全程顯示
- 4 個 stage 都顯示「請勿拔除裝置」
3.3 Toast 停留 6 秒
- 計時驗證
3.4 複製錯誤訊息
- 點複製、變「已複製 ✓」
- PowerShell
Get-Clipboard確認內容
3.5 mailto: 開啟
- destructive reason 點 Contact Support
- Outlook / Windows Mail / 預設 mail handler 開啟
4. Integration 驗證(30 分鐘)
4.1 SIGTERM 延遲關閉
⚠ Windows SIGTERM 行為不直觀——taskkill /F 等於 SIGKILL、不會走 graceful。
替代方法:
-
開兩個 visionA-local 實例(second 應該失敗、single-instance lock)→ 觀察 first instance behavior
-
或:跑升級、然後 Task Manager「End Task」(不 force)視為 SIGTERM 等效
-
啟動升級流程
-
flashing stage 時、Task Manager → End Task(不 Force)
-
visionA-local server 應延遲關閉、log 顯示「delaying shutdown」
-
升級完成才真正退出
4.2 Wails OnBeforeClose 攔截
- 啟動升級流程
- flashing stage 時、點 Wails 視窗右上 ✕
- 視窗不關
- Frontend modal 出現「韌體切換進行中...」
- modal 顯示 task info(device name / chip / stage / etaSeconds)
- 「繼續等待」+「強制關閉」按鈕
- 點強制關閉、第二層 FORCE 確認
- 輸入「force」小寫 → disabled
- 輸入「FORCE」 → enabled
- 點「繼續等待」、modal 關、升級繼續
- 升級完成、再點 ✕ → 視窗正常關
4.3 Alt+F4 攔截
⚠ Windows 特有:使用者可能用 Alt+F4 關視窗
- 升級進行中、Alt+F4
- 預期:同 ✕ 按鈕、攔截 modal 顯示
- 若 Alt+F4 直接關 → P1 bug
5. Windows 特有觀察點
5.1 USB driver 重新枚舉
升級成功後 device re-enumerate、Windows USB stack 可能不穩:
- 升級成功後 5-8 秒內、Devices 頁卡片自動更新(依 needsReset + rescan)
- 若超過 30 秒仍未更新 → P1 bug(既有 KL520 reset bug 重現)
5.2 Defender 即時掃描
- 啟動時間是否 > 60 秒(首次)/ > 10 秒(後續)
- 升級期間 Defender 是否擾動 USB I/O(罕見但可能)
6. 驗證結果摘要
| 類別 | 結果 | 備註 |
|---|---|---|
| §1 Functional | ||
| §2 Reliability | ||
| §3 UX | ||
| §4 Integration | ||
| §5 Windows 特有 |
升級時長實測:
| Combo | 實測 | 護欄 | Pass / Fail |
|---|---|---|---|
| KL520 KDP1→KDP2 | __秒 | 60s | |
| KL520 short-circuit | __秒 | 60s | |
| KL720 | __秒 | 200s |
7. Bug 回報
依 ../m9-5-validation-plan.md §11 格式回報到 .autoflow/06-testing/bugs/M9-5-BUG-{NN}.md。
標題加「[Windows]」前綴方便分流。
完成簽核:________________ 日期:________________