4D 最小 Application plugin contract 實作前最後確認表

返回

4D 最小 Application plugin contract 實作前最後確認表

本文件承接 4D PluginLoader contract 草案 / 實作前確認表4D PluginLoader 程式 repo 結構檢查表,用來在修改程式 repo 前最後確認 4D 最小 Application plugin contract 的候選檔案、欄位、測試策略與停止線。

本文件仍不代表同意建立真正 PluginLoader、不代表同意建立 IPluginLoader public contract、不代表同意掃描 plugin folder、載入外部 DLL、執行外部 plugin 程式碼、修改 Adapter public contract、修改 config schema、執行 DB DDL 或接真實硬體。

0. 確認狀態

項目內容
文件狀態已確認
整理日期2026-06-06
確認日期2026-06-06
對應階段第四階段 4D 最小 Application plugin contract
程式 repohs-device-control-template
程式 branchpoc/nmodbus-tcp
程式基準 commita846212 新增 4C ServiceHost 第一版與驗收測試
前置確認4D 邊界分析、決策確認、contract 確認、程式 repo 唯讀結構檢查均已完成
使用者確認4D 最小 contract 確認 七項皆同意
確認後可進入程式 repo 最小 Application plugin contract 實作;本機實作與測試已完成
本文件仍不做不修改程式 repo、不建立 Loader、不載入 DLL、不改 Adapter / config / DB

1. 實作定位

原則說明
Application contract only只補 HS.DeviceControl.Application/Plugins 的 model / result / audit 類別。
Metadata 仍不是載入授權即使 metadata 驗證成功,也不代表可載入 DLL 或執行 plugin。
State 只表示審核狀態VerifiedRejectedDisabledFaulted 不觸發任何 loader lifecycle。
Audit 只做安全摘要audit record 不寫 DB、不保存正式路徑、不包含 secret 或完整 exception。
測試先於擴大第一版只用 Application.Tests 驗證 contract,不做外部 DLL 測試。

2. 預計新增檔案

檔案原因邊界
src/HS.DeviceControl.Application/Plugins/PluginLoadState.cs定義 plugin metadata / verification 後的狀態語意。狀態不代表 DLL 已載入。
src/HS.DeviceControl.Application/Plugins/PluginVerificationCheck.cs讓 verification result 可列出來源、版本、checksum、敏感資訊等子檢查摘要。不讀取真實 DLL。
src/HS.DeviceControl.Application/Plugins/PluginVerificationResult.cs定義 4D 最小 verification result。不呼叫 loader、不執行 plugin。
src/HS.DeviceControl.Application/Plugins/PluginAuditRecord.cs定義 audit summary contract。不寫 DB、不保存正式路徑或 secret。
tests/HS.DeviceControl.Application.Tests/PluginVerificationResultTests.cs驗證 verification result 的成功 / 失敗 / warning / safe message。不依賴外部 DLL。
tests/HS.DeviceControl.Application.Tests/PluginAuditRecordTests.cs驗證 audit record 可保存安全摘要且遮蔽敏感資訊。不寫 DB。

3. 預計修改檔案

檔案原因邊界
src/HS.DeviceControl.Application/Plugins/PluginDescriptor.cs以相容方式補 ContractVersionSourceEnabledDisabledReason不移除既有 constructor;不破壞既有測試。
src/HS.DeviceControl.Application/Plugins/PluginCatalogService.cs補 metadata 欄位、disabled、source / contract version 的基本驗證。仍不讀檔、不掃描 folder。
src/HS.DeviceControl.Application/Common/ApplicationErrorCodes.cs補 4D plugin verification / audit 相關錯誤碼。不改既有 APP-03xx 定義。
tests/HS.DeviceControl.Application.Tests/PluginCatalogServiceTests.cs補 contract version、source、disabled、sensitive metadata 測試。不新增測試套件。

4. 明確不修改

不修改項目原因
HS.DeviceControl.sln不新增專案;SDK-style project 會自動納入 .cs
HS.DeviceControl.Core4D 最小 contract 屬 Application 層,不進 Core。
HS.DeviceControl.Adapters不改 IDeviceAdapterExecuteResultDeviceCommand
HS.DeviceControl.ServiceHost不建立 loader lifecycle、不改啟動方式。
HS.DeviceControl.WebApi不新增 plugin route、controller、DTO、auth 或 Swagger 設定。
devices.json / workflows.json / appsettings.json不新增 plugin folder、DLL path、來源白名單或敏感資訊欄位。
Infrastructure.MySql不建立 audit table、不寫 DB、不執行 DDL / ALTER TABLE。
外部 DLL / plugin folder不掃描、不載入、不執行。

5. 欄位建議

Contract建議欄位
PluginLoadStateDiscoveredVerifiedRejectedDisabledFaultedLoaded;其中 Loaded 僅保留未來語意,第一版不得產生。
PluginVerificationCheckNameSuccessCodeMessage
PluginVerificationResultSuccessCodeMessagePluginIdStateChecksWarningsTimeTakenMsError
PluginAuditRecordAuditIdPluginIdDecisionReasonOperatorSourceChecksumCreatedAtUtc
PluginDescriptor 擴充ContractVersionSourceEnabledDisabledReason

6. 測試策略

測試驗證目的
PluginVerificationResult.Ok成功結果需有 Success=TrueCode=NONEState=Verified,且可承接 checks / warnings。
PluginVerificationResult.Fail失敗結果需有錯誤碼、State=RejectedFaulted,且不包含 sensitive detail。
Disabled pluginEnabled=false 或 disabled reason 時不可被視為可載入。
Contract version missing缺少 contract version 時 catalog / verification 應回標準錯誤。
Source missing or unsafe缺少 source 或 source 含 path / secret 時應拒絕。
Audit summaryaudit record 不包含 password、token、connection string、正式路徑。
No loader API測試不使用 Assembly.LoadLoadFromLoadFile,不建立 DLL fixture。

7. 七項確認

使用者已確認以下七項,全部同意後已允許修改程式 repo 的最小 Application plugin contract 範圍。

編號決策項建議確認影響
14D 第一版只做 Application plugin contract同意後只改 HS.DeviceControl.Application 與 Application.Tests。不新增 Loader 專案。
2新增 PluginLoadStatePluginVerificationCheckPluginVerificationResultPluginAuditRecord同意後可新增 public model。固定第一版最小資料模型。
3相容擴充 PluginDescriptor同意後可補 ContractVersionSourceEnabledDisabledReason不移除既有 constructor。
4擴充 PluginCatalogService 基本驗證同意後可補 source / contract version / disabled 驗證。仍不讀檔、不掃描 folder。
5補 Application plugin 錯誤碼同意後可新增 APP-033x 常數。不改既有錯誤碼。
6測試只跑 Application.Tests,必要時再跑 full solution同意後先驗證 4D 最小 contract。不跑 DB manual-only 測試。
7保留所有 Loader / DLL / config / Adapter / DB 停止線同意後仍不得建立 Loader、載入 DLL、改 config schema 或 DB。避免第四階段失控擴大。

建議回覆格式:

4D 最小 contract 確認:
1. 同意
2. 同意
3. 同意
4. 同意
5. 同意
6. 同意
7. 同意

8. 建議下一步

4D 最小 contract 已完成確認,程式 repo 也已完成本機實作與測試驗證。建議接著查看 4D 最小 Application plugin contract 實作與驗收紀錄4D PluginLoader 完成稽核表,再執行程式 repo stage / commit 前確認。