4A WebApi / ServiceHost / Plugin Loader 決策確認表
本文件承接 4A WebApi / ServiceHost / Plugin Loader 邊界分析,把第四階段正式入口前需要先確認的 7 項決策整理成可逐項回覆的確認表。
本文件只做決策確認與後續回填,不代表已同意新增 ServiceHost 專案、WebApi 專案、API route、Controller、middleware、Plugin Loader、外部 DLL 載入、認證授權套件、背景服務套件、正式 DB DDL、正式 Apply、敏感連線資訊保存或既有 public method 簽章調整。
0. 確認狀態
| 項目 | 內容 |
| 文件狀態 | 已確認 |
| 整理日期 | 2026-06-06 |
| 確認日期 | 2026-06-06 |
| 對應階段 | 第四階段 4A WebApi / ServiceHost / Plugin Loader 前置確認 |
| 前置文件 | 4A WebApi / ServiceHost / Plugin Loader 邊界分析 |
| 程式 repo | hs-device-control-template |
| 程式 branch | poc/nmodbus-tcp |
| 程式基準 commit | a158551 新增 3D Application contract 第一版 |
| 本次確認範圍 | WebApi 邊界、ServiceHost 邊界、Plugin Loader 邊界、Application 共用協調層、部署維運前置與停止線 |
| 確認結果 | 使用者已確認採用建議路線,4B 可先進入最小 WebApi contract 與實作 |
| 確認後可進入 | 第四階段 4B / 4C / 4D 執行切分表、第四階段 4A / 4B 切分線上驗收紀錄、第四階段標準 / 文件 / 施作範圍 / 驗收條件總表、WebApi contract 草案、ServiceHost contract 草案、Plugin Loader 信任模型 / metadata contract 草案或第四階段現場工具前置規劃 |
| 本次仍不做 | 不新增 ServiceHost / WebApi、不新增 route、不建立 Plugin Loader、不載入 DLL、不改 public method 簽章、不改 config schema、不連 DB、不執行 DDL 或正式 Apply |
1. 建議確認方式
使用者可直接回覆以下格式:
```text
4A 決策確認:
- 同意
- 同意
- 同意
- 同意
- 同意
- 同意
- 同意
備註:若有需要調整的項目,請寫在這裡。
```
若任一項不同意,建議寫成:
```text
第 N 項不同意,改為:...
```
2. 七項決策確認表
| 編號 | 決策項 | 建議定案 | 若同意的影響 | 若不同意需補充 |
| 1 | 4A 只做邊界分析與決策確認 | 本節點只建立邊界分析與決策確認表,不進入程式實作。 | 可安全完成 4A 前置確認,後續再選擇 WebApi、ServiceHost 或 Plugin Loader 其中一條進入 contract 草案。 | 需說明是否要直接實作,以及允許建立哪個正式入口或專案。 |
| 2 | WebApi 第一版邊界 | WebApi 只做 HTTP request / response、權限、DTO mapping、查詢與控制請求轉交。 | 未來 Controller 不寫 Workflow / Node 邏輯、不操作 Adapter、不直接碰 DB gateway。 | 需說明是否允許 WebApi 直接呼叫 Core / Adapter / DB,以及如何保留錯誤、Log 與狀態一致性。 |
| 3 | ServiceHost 第一版邊界 | ServiceHost 只做背景執行生命週期、任務協調、adapter lifecycle、health 與 log / trace。 | 可保持背景服務與 HTTP 入口分責;ServiceHost 不提供 HTTP。 | 需說明是否要讓 ServiceHost 同時提供 HTTP,以及部署、安全、重啟與責任切分方式。 |
| 4 | Plugin Loader 第一版邊界 | 先保留 metadata / contract 層,不載入外部 DLL,待信任模型與版本策略確認後再實作。 | 可先整理 plugin 信任、版本、metadata 與狀態語意,不執行外部程式碼。 | 需先確認來源信任、簽章、版本、錯誤隔離、卸載與回復策略。 |
| 5 | Application 層作為共用協調層 | WebApi、ServiceHost、現場工具都應透過 HS.DeviceControl.Application contract,不重寫 Workflow 或 Adapter 操作。 | 可維持任務狀態、錯誤碼、Log、Trace、設備狀態與測試一致。 | 需說明各入口各自實作時,如何避免狀態分裂與流程邏輯重複。 |
| 6 | 部署與維運前置 | 建立正式入口前,先確認設定來源、環境變數、health、log、operator、host name、app version 與敏感資訊保存方式。 | 可降低後續部署、安全與維運返工風險。 | 需接受先實作入口再補維運規則可能造成的返工與安全風險。 |
| 7 | 停止線維持 | 4A 不新增正式入口、不改 public method 簽章、不改 config schema、不執行 DB DDL、不接真實硬體。 | 可先完成文件、contract 草案與實作前確認,不跨過高風險邊界。 | 需明確列出允許突破的停止線、原因、驗證方式與回復策略。 |
3. 本次確認結果
| 編號 | 決策項 | 確認結果 |
| 1 | 4A 只做邊界分析與決策確認 | 同意,4A 文件型前置已完成並已推送文件 repo。 |
| 2 | WebApi 第一版邊界 | 同意,4B 採最小 WebApi,透過 Application contract 承接,不直接操作 Core / Adapter / DB gateway。 |
| 3 | ServiceHost 第一版邊界 | 同意,ServiceHost 留到 4C,不在本輪與 WebApi 混責。 |
| 4 | Plugin Loader 第一版邊界 | 同意,Plugin Loader 留到 4D,不掃描 folder、不載入外部 DLL。 |
| 5 | Application 層作為共用協調層 | 同意,WebApi 透過既有 Application contract 做 mapping。 |
| 6 | 部署與維運前置 | 同意,本輪不新增正式部署設定、不保存敏感資訊。 |
| 7 | 停止線維持 | 同意,本輪不做 DB DDL、ALTER TABLE、正式 Apply、ServiceHost 或 Plugin Loader。 |
使用者確認文字:
```text
確認項目依照您的建議
```
4. 確認後可進入的工作
| 順序 | 工作 | 範圍 |
| 1 | 4A 決策確認結果回填 | 將使用者 1 至 7 回覆整理成本文件的確認紀錄。 |
| 2 | 第四階段 4B / 4C / 4D 執行切分表 | 已整理 WebApi 在 4B、ServiceHost 在 4C、Plugin Loader 在 4D 的建議順序與停止線。 |
| 3 | 第四階段 4A / 4B 切分線上驗收紀錄 | 已確認 Cloudflare Pages 首頁、4A 決策確認表、4B / 4C / 4D 切分表與 progress.json 可線上讀取。 |
| 4 | 第四階段標準 / 文件 / 施作範圍 / 驗收條件總表 | 已整理第四階段總標準、文件交付、4A / 4B / 4C / 4D 施作範圍與驗收條件。 |
| 5 | 第四階段目標模式完成稽核表 | 已確認文件型目標模式可收斂完成,並列出尚未授權的程式實作停止線。 |
| 6 | WebApi contract 草案 | 已建立 4B WebApi contract 草案 / 實作前確認表,整理 API 類型、request / response DTO、錯誤格式、權限與停止線。 |
| 7 | ServiceHost contract 草案 | 只整理背景生命週期、Adapter lifecycle、health、log / trace 與任務協調 contract,不建立正式服務。 |
| 8 | Plugin Loader 信任模型與 metadata 草案 | 只整理信任來源、版本、metadata、registration 與錯誤隔離策略,不載入 DLL。 |
| 9 | 第四階段現場工具 / 管理畫面前置規劃 | 只釐清使用者、場景、權限與資料來源,不新增 Web UI 或 WinForms Debug Tool。 |
5. 仍需停止的項目
即使七項決策全部同意,除非使用者另外明確授權,仍不得自動執行以下項目:
- 不新增
HS.DeviceControl.ServiceHost專案。 - 不新增
HS.DeviceControl.WebApi專案。 - 不新增 API route、Controller、endpoint 或 middleware。
- 不新增或更換認證授權、背景服務、佇列、Plugin framework、Web framework 套件。
- 不修改 Core / Adapters / Infrastructure / Application public method 簽章。
- 不修改
devices.json/workflows.json/appsettings.jsonschema。 - 不建立 Plugin Loader。
- 不掃描 plugin folder。
- 不載入外部 DLL。
- 不保存密碼、Token、IP、Port、完整 connection string、正式 DLL 路徑或正式環境資訊。
- 不執行 DB 寫入、DDL、ALTER TABLE 或正式 Apply。
- 不改程式啟動方式。
- 不接真實硬體或案場客製邏輯。
6. 建議下一步
請先回覆 4A 七項決策確認。七項確認完成後,可先確認 第四階段 4A / 4B 切分線上驗收紀錄,再依 第四階段 4B / 4C / 4D 執行切分表 優先進入 WebApi contract 草案,並依序評估 ServiceHost contract 草案與 Plugin Loader 信任模型 / metadata contract 草案。