4D PluginLoader contract 草案 / 實作前確認表

返回

4D PluginLoader contract 草案 / 實作前確認表

本文件承接 4D PluginLoader 邊界分析4D PluginLoader 決策確認表,整理 4D 進入任何程式修改前需要再次確認的 contract 草案、候選檔案、測試策略與停止線。

本文件記錄使用者已同意 4D contract 七項文件型決策;此同意只代表可進入程式 repo 唯讀結構檢查與最小 contract 實作評估,不代表已同意建立 PluginLoader、建立 IPluginLoader public contract、掃描 plugin folder、載入外部 DLL、執行外部程式碼、修改 IDeviceAdapter public contract、修改 config schema、導入 plugin framework、保存正式 DLL 路徑、接真實硬體、執行正式 DB DDL 或改變程式啟動方式。

0. 確認狀態

項目內容
文件狀態已確認
整理日期2026-06-06
確認日期2026-06-06
對應階段第四階段 4D PluginLoader contract
程式基準 commita846212 新增 4C ServiceHost 第一版與驗收測試
本文件目標固定 metadata、verification result、state、audit、候選檔案、測試策略與停止線
確認後可進入程式 repo 唯讀結構檢查與最小 contract 實作評估
本文件仍不做不建立 Loader、不載入 DLL、不掃描 plugin folder、不改 Adapter / config / DB、不接真實硬體

1. Contract 第一版定位

原則說明
Contract 先於 Loader先固定資料模型、狀態、錯誤與測試語意,不建立實際 Loader。
Metadata 不等於載入授權metadata 通過格式檢查仍不得自動進入 Loaded
Verification 是獨立結果checksum、來源、版本、敏感資訊與人工核准都要回到標準結果。
State 不直接執行DiscoveredVerifiedRejectedDisabledFaulted 只代表狀態語意,不代表呼叫 DLL。
Audit 先採安全摘要可先定義 audit record,不寫 DB、不保存正式路徑或敏感資訊。
Lifecycle 由 ServiceHost 承接未來若有 Loader lifecycle,應由 ServiceHost 組裝,不由 WebApi Controller 載入 DLL。

2. Metadata contract 草案

欄位建議語意第一版限制
PluginIdPlugin 唯一識別,需穩定且不可空白。不得含路徑、IP、Port 或 secret。
DisplayName人員可讀名稱。不作為安全判斷依據。
VersionPlugin 版本。需與 contract version 分開。
ContractVersion目標 Application / Adapter contract 版本。不相容時只能拒絕,不自動降級。
Sourceplugin 來源,例如 repository fixture 或受控白名單來源。不接受任意資料夾。
Checksumartifact checksum 宣告值。本階段只定義欄位與比對規則,不讀檔。
Capabilities對應 3D capability、device type、command name。不得繞過 Resource / Command / Adapter 邊界。
Enabled是否允許被 catalog 顯示為可候選。不代表可載入或可執行。
DisabledReason停用原因。不保存敏感資訊或完整例外。

3. Verification result 草案

欄位建議語意
Success驗證是否通過。
Code標準錯誤碼,建議延續 Application APP-03xx 區段或另列 APP-04xx 候選。
Message安全摘要,不包含 secret、正式路徑、完整 stack trace。
PluginId對應 plugin identity。
State驗證後狀態,例如 VerifiedRejectedDisabledFaulted
Checks來源、checksum、版本、敏感資訊、人工核准等子檢查摘要。
Warnings非阻擋但需提示的問題。
TimeTakenMs驗證耗時。

4. State contract 草案

狀態語意是否可執行
Discovered已發現 metadata 或候選描述。
Verifiedmetadata、來源、checksum、版本與必要核准通過。否,本階段仍不載入
Rejected驗證失敗或來源不可信。
Disabled被人工或策略停用。
Faulted驗證或未來 lifecycle 發生錯誤。
Loaded保留給未來 Loader 實作。本階段不可使用

5. Audit contract 草案

欄位建議語意限制
AuditId單筆 audit 識別。可用記憶體或測試用 id,不寫正式 DB。
PluginId對應 plugin。不可空白。
DecisionVerifiedRejectedDisabledFaulted 等結果。不等於執行授權。
Reason人工或系統原因摘要。不包含 secret、正式路徑或完整 exception。
Operator操作者或系統來源。若無正式帳號,只能用測試值。
Source安全來源摘要。不保存完整正式 DLL path。
Checksumchecksum 摘要。可遮罩或縮短。
CreatedAtUtc發生時間。使用 UTC。

6. 候選程式檔案

以下只是使用者確認後的候選範圍,尚未授權修改程式 repo。

類型候選檔案或位置
Application plugin contractsrc/HS.DeviceControl.Application/Plugins/*
Verification modelsrc/HS.DeviceControl.Application/Plugins/PluginVerificationResult.cs
State enumsrc/HS.DeviceControl.Application/Plugins/PluginLoadState.cs
Audit modelsrc/HS.DeviceControl.Application/Plugins/PluginAuditRecord.cs
Catalog extension既有 IPluginCatalogService / PluginCatalogService,僅評估是否補只讀查詢
測試tests/HS.DeviceControl.Application.Tests/Plugins/*
Solution原則上不新增專案,不需修改 .sln
文件contract 決策確認、程式 repo 結構檢查、實作紀錄、完成稽核、驗收紀錄

7. 測試策略

測試目的本輪是否可確認
Metadata required fields驗證必要欄位缺漏會回標準錯誤。可確認
Sensitive data rejection驗證 metadata 內含 password、token、connection string、正式 IP / Port 時被拒絕。可確認
Checksum mismatch驗證 checksum 不符會回 Rejected可確認,但不讀真實 DLL
Version mismatch驗證 contract version 不相容會被拒絕。可確認
Disabled plugin驗證停用 plugin 不可被視為可載入。可確認
Audit summary驗證 audit 不含 secret 或正式路徑。可確認
Loader lifecycle驗證 load / unload / recover。不可確認,需另行授權
External DLL test使用測試 DLL 驗證載入。不可確認,需另行授權

8. 七項 contract 確認表

使用者已同意以下七項,可進入程式 repo 唯讀結構檢查與最小 contract 實作評估。

編號決策項確認結果影響
14D contract 第一版放在 Application Plugins 區域已同意,第一版只評估 Application 層 model / service extension。不新增 Loader 專案。
2第一版新增或補齊 metadata / verification / state / audit contract已同意,可盤點候選 model 與 tests。不載入 DLL。
3不建立 IPluginLoader public contract已同意,Loader 仍留在後續階段。避免過早固定載入 API。
4不修改 IDeviceAdapter public contract已同意,plugin capability 必須經 Adapter / dispatcher 邊界承接。保持既有分層。
5不修改 config schema,不保存正式 DLL path 或敏感資訊已同意,只做 model / test,不改 devices.jsonworkflows.jsonappsettings.json避免未成熟 schema 進正式契約。
6測試只做 metadata / verification / audit,不做外部 DLL已同意,測試不呼叫 assembly loading API。降低外部程式碼風險。
7程式修改前先做唯讀結構檢查並回報候選檔案已同意,先盤點程式 repo,再決定是否實作。保留使用者確認點。

使用者確認文字:

4D contract 確認:1. 同意 ... 7. 同意

9. 仍需停止的項目

10. 建議下一步

七項確認已完成,且程式 repo 唯讀結構檢查已整理完成。下一步建議進入 4D 最小 Application plugin contract 實作前最後確認,確認 PluginLoadStatePluginVerificationResultPluginAuditRecord 與測試策略後,再決定是否修改程式 repo。