專案

一般

配置概況

動作

Feature #451

進行中
SC

Plan C 可試跑版:C#/WebView2 薄殼改寫(對照表40+5項全源碼+單檔發佈,按鈕→可互動 1.83s 院外實測)+ install.ps1 + backup_m2.ps1

Feature #451: Plan C 可試跑版:C#/WebView2 薄殼改寫(對照表40+5項全源碼+單檔發佈,按鈕→可互動 1.83s 院外實測)+ install.ps1 + backup_m2.ps1

是由 Sashiba Chou 於 約 2 個月 前加入.

狀態:
New
優先權:
Normal
被分派者:
-
開始日期:
2026-08-14
完成日期:
完成比例:

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.py 59/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 打包鏈未動

沒有任何資料可供顯示

動作

匯出至 PDF Atom