Feature #451
進行中Plan C 可試跑版:C#/WebView2 薄殼改寫(對照表40+5項全源碼+單檔發佈,按鈕→可互動 1.83s 院外實測)+ install.ps1 + backup_m2.ps1
0%
概述
背景¶
協調者藍圖(2026-08-13 定稿+v2.1)裁決 Plan C(C#/WebView2 薄殼改寫)為本波主軸(Tier 1-0):
協調者 M1 實測 Edge 直開前端 <1s、SyncHUD 按鈕→可互動全鏈 5–10s → Python 殼佔 4–9s,
「先量再做」已量完、直接綠燈。原「計時取證包」提案撤銷,三項併入新殼規格。
另任務單同批交付:install.ps1(ER 版,協調者統一規格)、M2 備份腳本(待機任務 3,日 A 交付)。
規格紅線:對外契約零變更(SyncHUD 呼叫格式含 _issuedAt、TraumaFill --context、exit code 體系
含新 exit 16、config.json 結構、plugin.log 既有行格式)。回退四約束:獨立分支/目錄開發、
main Python 殼保持可建置、機器續跑舊殼至上機日 C 驗收、舊殼移除另走獨立 commit/tag。
變更內容¶
C#/WebView2 薄殼(his_plugin/shell_cs/,.NET 8 + WinForms + WebView2)¶
-
殼行為對照表
BEHAVIOR_PARITY.md(交付物):舊殼 688 行盤成 8 類 40 項契約行為 + 5 項新增,
每項附驗收方式;含本機驗證紀錄節(已驗/留待上機日 C 清單) - 全源碼 11 檔:Program(主流程)/MainForm(WebView2+splash)/Bridge(RPC)/TraumaFillClient/
StartupArgs/AppConfig/Logging/NativeUi/Timing -
Bridge 墊片:注入
window.pywebview.api同名同形(sendPayload/validateDiags/pageReady),
背後走 WebView2 postMessage → 前端零改動،M1 換殼與 M2 前端完全解耦 - 新增三項(v2.1 准許):(a)TIMING 計時行(bootstrap 由 payload
_issuedAt反推;對話框人工等待
與並行等待獨立歸因,不汙染開窗量測)(b)health 探測∥TraumaFill --context 並行(判定順序不變,
exit 2 優先)(c)publish.ps1 自動輸出DEPLOY_MANIFEST.txt(檔名/bytes/SHA256/建置時間) - self-contained 單檔發佈 139MB:AV 掃描面 300+ 檔 → 單檔;pythonnet MOTW 崩潰類消失
- splash HTML 原樣移植;log 行格式與舊殼逐字相同(含 +0800 無冒號時區樣式);
殭屍防護 = WebView2 Dispose + Environment.Exit
install.ps1(ER 版,照協調者統一標準;隨包交付)¶
單一腳本:建目錄 → 複製 → config 帶入(舊版原樣帶過 > 範本 <User> 改寫)→
Unblock-File -Recurse → manifest 雜湊比對(敗=中止不切換) → junction 切換
(ERTools\ER_note_NG → 版本資料夾;不刪鎖檔、SyncHUD 路徑不變、免 admin、
舊佈局自動改名 legacy、報告含回退指令)→ INSTALL_REPORT.txt
scripts/backup_m2.ps1(藍圖 Tier 1-1,日 A 交付)¶
er_note.db SQLite 熱備(backup API,服務不停)+ chroma_db + .env → 時間戳資料夾;
備份後開庫驗證(主表計數)+ SHA256 MANIFEST + 輪替保留 N 份;還原演練/真還原步驟在檔頭註解
前端 pageReady 一行(PluginAssessment.tsx)¶
評估表單掛載(=醫師可互動)時呼叫殼橋 pageReady() 供計時;optional chaining 保證
舊殼(無此方法)與瀏覽器模式靜默略過
驗收標準(本機,院外開發機 + mock TraumaFill)¶
- exit code 全表實測:0(正常/聚焦)/2(server 關)/3(核對不符取消)/4(繼續後完成)/5(缺 config)
- exit 16 原樣透傳 → 前端 v0.9.1 映射「外傷預填工具已由現場停用」;預檢 15→open_screen;帶回全鏈 OK
- payload 讀完即刪(Test-Path False);log 行格式與舊殼逐字同;tasklist 零殘留(webview2 逐行程排查)
- install.ps1 真裝 + junction 切換 + manifest 3/3(比對機制實戰抓到 config.json 誤入基準 bug 並修正)
- backup_m2.ps1 實跑:1512.8MB 熱備 + 開庫驗證(medical_records=44/users=4)+ MANIFEST + 輪替
- 端到端計時(junction 路徑 + payload 正式啟動):按鈕→頁面就緒 1.83s
(bootstrap 0.99 + 並行 0.07 + 開窗 0.29;院外參考值,正式裁決=上機日 C 秒錶 ≤3s) -
python backend/tests/smoke_test.py59/59 PASS(backend 未動;pageReady 為前端加項) - 留待上機日 C:真 TraumaFill/SyncHUD 對接、秒錶驗收、AV/EDR 實證、junction 互切、乾淨機
部署備註¶
-
本票不部署殼 exe(機器續跑 Python 殼至上機日 C);backup_m2.ps1 於日 A 首設;
pageReady 前端行隨下次 M2 更新生效(對舊殼無影響) - 合併
plan-c-shell分支(4 個里程碑 commits)回 master;main 的 Python 殼與 build_exe 打包鏈未動
沒有任何資料可供顯示