# 4D Application plugin contract commit / push 前確認

本文件整理程式 repo `poc/nmodbus-tcp` 在提交 `新增 4D 最小 Application plugin contract` 前的變更範圍、測試證據、停止線與建議 commit 訊息，並補充實際 stage / commit / push / Actions 查驗結果。

本文件不代表同意建立真正 PluginLoader、`IPluginLoader`、plugin folder 掃描、外部 DLL 載入、config schema、Adapter contract 或 DB audit table。

## 0. 確認摘要

| 項目 | 內容 |
|---|---|
| 確認日期 | 2026-06-06 |
| 程式 repo | `hs-device-control-template` |
| 程式 branch | `poc/nmodbus-tcp` |
| 前一已提交基準 | `a846212 新增 4C ServiceHost 第一版與驗收測試` |
| 4D commit 狀態 | 已 commit：[`6f34bb9`](https://github.com/Hongsen-tw/hs-device-control-template/commit/6f34bb94de8fe9a63303fe672f7de92c98f07274) `新增 4D 最小 Application plugin contract` |
| push 狀態 | 已 push 至 `origin/poc/nmodbus-tcp` |
| GitHub Actions | Run [`27064992270`](https://github.com/Hongsen-tw/hs-device-control-template/actions/runs/27064992270) success |
| 決策來源 | `4D 最小 contract 確認` 七項皆同意 |
| 建議動作 | 同步文件 repo 的 4D 紀錄、`status.json`、`progress.json` 與 public mirror |

## 1. 程式 repo 變更範圍

本次程式 repo stage 僅納入下列 4D 最小 Application plugin contract 相關檔案。

| 類型 | 檔案 |
|---|---|
| 修改 | `src/HS.DeviceControl.Application/Common/ApplicationErrorCodes.cs` |
| 修改 | `src/HS.DeviceControl.Application/Plugins/PluginCatalogService.cs` |
| 修改 | `src/HS.DeviceControl.Application/Plugins/PluginDescriptor.cs` |
| 修改 | `tests/HS.DeviceControl.Application.Tests/PluginCatalogServiceTests.cs` |
| 新增 | `src/HS.DeviceControl.Application/Plugins/PluginLoadState.cs` |
| 新增 | `src/HS.DeviceControl.Application/Plugins/PluginVerificationCheck.cs` |
| 新增 | `src/HS.DeviceControl.Application/Plugins/PluginVerificationResult.cs` |
| 新增 | `src/HS.DeviceControl.Application/Plugins/PluginAuditRecord.cs` |
| 新增 | `src/HS.DeviceControl.Application/Plugins/PluginContractTextSafety.cs` |
| 新增 | `tests/HS.DeviceControl.Application.Tests/PluginVerificationResultTests.cs` |
| 新增 | `tests/HS.DeviceControl.Application.Tests/PluginAuditRecordTests.cs` |
| 未納入 | Core、Adapters、WebApi、ServiceHost、Infrastructure、config schema、DB DDL、外部 DLL |

## 2. 已完成驗證

| 驗證項目 | 結果 |
|---|---|
| Application tests | `dotnet test tests\HS.DeviceControl.Application.Tests\HS.DeviceControl.Application.Tests.csproj`：40 passed，0 failed。 |
| sandbox 內初次重跑 | 因 NuGet AppData lock 中止，不是測試 assertion 失敗；已用授權外部執行重跑通過。 |
| solution tests | `dotnet test HS.DeviceControl.sln`：492 passed，0 failed。 |
| Loader / DLL 停止線掃描 | `Assembly.Load`、`LoadFrom(`、`LoadFile(`、`IPluginLoader`、`class PluginLoader` 無命中。 |
| `git diff --check` | 無 whitespace error；僅有 Windows LF / CRLF 提醒。 |
| 文件 repo JSON | `progress.json`、`status.json` 與 `public/` 對應檔案可解析。 |
| 文件 repo public hash | source 與 public mirror hash 比對通過。 |
| 污染字串掃描 | 未命中既定污染字串。 |

## 3. 停止線確認

| 停止線 | 是否符合 |
|---|---|
| 不建立真正 `PluginLoader` | 符合 |
| 不建立 `IPluginLoader` public contract | 符合 |
| 不掃描 plugin folder | 符合 |
| 不載入外部 DLL | 符合 |
| 不執行外部 plugin 程式碼 | 符合 |
| 不修改 Adapter public contract | 符合 |
| 不修改 config schema | 符合 |
| 不新增 WebApi route / controller | 符合 |
| 不修改 ServiceHost lifecycle | 符合 |
| 不新增 DB table、DDL、ALTER TABLE 或 Apply | 符合 |
| 不新增 NuGet package 或更換核心框架 | 符合 |

## 4. 已使用 stage 指令

已使用精準路徑 stage，避免納入非 4D 變更。

```powershell
git add `
  src/HS.DeviceControl.Application/Common/ApplicationErrorCodes.cs `
  src/HS.DeviceControl.Application/Plugins/PluginCatalogService.cs `
  src/HS.DeviceControl.Application/Plugins/PluginDescriptor.cs `
  src/HS.DeviceControl.Application/Plugins/PluginLoadState.cs `
  src/HS.DeviceControl.Application/Plugins/PluginVerificationCheck.cs `
  src/HS.DeviceControl.Application/Plugins/PluginVerificationResult.cs `
  src/HS.DeviceControl.Application/Plugins/PluginAuditRecord.cs `
  src/HS.DeviceControl.Application/Plugins/PluginContractTextSafety.cs `
  tests/HS.DeviceControl.Application.Tests/PluginCatalogServiceTests.cs `
  tests/HS.DeviceControl.Application.Tests/PluginVerificationResultTests.cs `
  tests/HS.DeviceControl.Application.Tests/PluginAuditRecordTests.cs
```

stage 後已執行：

```powershell
git diff --cached --check
git status --short --branch
```

## 5. 已使用 commit 訊息

```text
新增 4D 最小 Application plugin contract

- 新增 plugin state、verification result、audit record 與安全摘要 helper
- 擴充 PluginDescriptor 與 PluginCatalogService metadata 驗證
- 補 APP-033x 錯誤碼與 Application.Tests
- 保留 Loader、DLL、config、Adapter、DB 停止線
```

## 6. 實際執行結果

1. 已依本文件精準 stage 程式 repo 4D 檔案。
2. 已執行 `git diff --cached --check` 與 `git status --short --branch`，staged 範圍正確。
3. 已建立 commit [`6f34bb9`](https://github.com/Hongsen-tw/hs-device-control-template/commit/6f34bb94de8fe9a63303fe672f7de92c98f07274)。
4. 已 push `poc/nmodbus-tcp` 至遠端。
5. 已查 GitHub Actions run [`27064992270`](https://github.com/Hongsen-tw/hs-device-control-template/actions/runs/27064992270)：success。

## 7. 結論

4D 最小 Application plugin contract 已完成程式 repo stage / commit / push，且 GitHub Actions success。下一步應同步文件 repo stage / commit / push 與部署查驗，確保文件網站反映 `6f34bb9` 與 4D 完成狀態。
