# 外部 DLL manual-only 邊界確認表

本文件承接 5A 最小 PluginLoader 完成稽核，作為第五階段下一個高風險節點的實作前確認。此節點只確認外部 DLL 的 manual-only 驗證邊界，不代表已同意實作 DLL 掃描、DLL 載入、plugin folder 設定、trust policy schema 或 Windows Service 整合。

## 0. 文件狀態

| 項目 | 內容 |
|---|---|
| 文件狀態 | 已確認 |
| 建立日期 | 2026-06-07 |
| 確認日期 | 2026-06-07 |
| 使用者回覆 | 7 項皆同意 |
| 對應階段 | 第五階段外部 DLL manual-only |
| 前置依據 | 5A 最小 PluginLoader 已完成，程式 commit `9e7302a` |
| 程式 repo | `hs-device-control-template` |
| 程式 branch | `poc/nmodbus-tcp` |
| 本文件性質 | 實作前確認，不執行程式修改 |

## 1. 目前程式 repo 唯讀盤點

| 檢查項目 | 結果 |
|---|---|
| 工作樹 | 乾淨，位於 `poc/nmodbus-tcp` |
| 最新 commit | `9e7302a`，新增 5A 最小 PluginLoader metadata 驗證 |
| Application plugin 檔案 | 已有 `IPluginLoader`、`PluginLoadRequest`、`PluginLoadResult`、`PluginLoaderOptions`、`PluginLoaderService` |
| 外部載入 API 掃描 | 未發現正式程式使用外部載入 API |
| plugin folder 掃描 | 未發現正式程式掃描 plugin folder |
| DLL 字串 | 只出現在既有 Application.Tests unsafe-source 測試樣本 |
| 結論 | 下一步可先設計 manual-only 驗證入口，但不得直接開始真實 DLL 載入 |

## 2. 建議範圍

| 範圍 | 建議 |
|---|---|
| DLL 來源 | 只能由測試 fixture 或使用者明確提供的本機測試路徑進入 manual-only 驗證，不自動掃描資料夾。 |
| 預設行為 | 預設不載入 DLL，必須有明確 gate，例如 `AllowExternalDllManualTest=true`。 |
| CI 行為 | CI 不執行真實 DLL 載入，只跑 fake / metadata tests。 |
| 驗證方式 | 先建立 request / result / plan 類型與 fake loader 測試，真實 DLL manual-only 測試需使用者再確認。 |
| 安全摘要 | 錯誤訊息與 log 不寫入完整路徑、token、連線字串或敏感內容。 |
| 失敗處理 | DLL 不存在、checksum mismatch、contract mismatch、載入失敗、反射失敗都需回標準錯誤碼，不吞 exception。 |
| 卸載 / recovery | 真實 DLL 載入若後續要實作，需先定義 unload / retry / failed state / recovery，不在本文件直接授權。 |

## 3. 明確不納入本次確認

| 不納入項目 | 原因 |
|---|---|
| 自動掃描 plugin folder | 需要 5B config schema 與 trust policy 決策。 |
| 真實 DLL 載入程式 | 高風險邊界，需再確認載入方式、隔離、卸載與錯誤處理。 |
| 正式 Adapter contract 變更 | 可能影響硬體邊界與 public method 簽章。 |
| DB audit table | 屬 5C，需 DDL / rollback / manual-only DB 驗證設計。 |
| WebApi auth / Swagger | 屬 5D。 |
| Windows Service 安裝 | 屬 5E，且涉及系統權限。 |
| 真實硬體控制 | 不屬於外部 DLL manual-only 實作前確認。 |

## 4. 七項決策確認

1. 同意外部 DLL 節點先做 manual-only 邊界，不自動掃描 plugin folder。
2. 同意預設不載入 DLL，必須由明確 gate 開啟 manual-only 測試。
3. 同意 CI 不載入真實 DLL，只跑 fake / metadata / stop-line tests。
4. 同意本節點先設計 request / result / plan / error mapping，不改 Adapter public contract。
5. 同意不把完整路徑、secret、token、connection string 寫入 log、result 或文件。
6. 同意 DB audit、config schema、auth / Swagger、Windows Service 不在本節點實作。
7. 同意若後續要載入真實 DLL，必須再次停下確認載入方式、隔離、卸載、recovery 與驗收條件。

使用者已於 2026-06-07 回覆 7 項皆同意，本文件可作為進入「外部 DLL manual-only 程式 repo 結構檢查與實作前確認」的依據。

## 5. 建議確認文字

```text
外部 DLL manual-only 邊界確認：
1. 同意
2. 同意
3. 同意
4. 同意
5. 同意
6. 同意
7. 同意
```

## 6. 下一步

七項確認已完成，可進入外部 DLL manual-only 程式 repo 結構檢查與實作前確認。下一步仍只允許唯讀盤點與實作前文件整理；未完成下一份實作前確認前，不修改程式 repo、不建立 DLL 載入程式、不新增 plugin folder schema。
