# 5F 第五階段整合驗收計畫

本文件定義第五階段 5F 的整合驗收方式。5F 不是新增功能實作節點，而是在 5A PluginLoader、外部 DLL manual-only、5B config schema、5C DB audit、5D auth / Swagger 與 5E Windows Service 都完成對應確認、實作、測試與文件同步後，做一次跨模組收斂驗收。

## 0. 文件狀態

| 項目 | 內容 |
|---|---|
| 文件狀態 | 已執行完成 |
| 建立日期 | 2026-06-07 |
| 對應節點 | 第五階段 5F 整合驗收 |
| 程式 repo | `hs-device-control-template` |
| 程式 branch | `poc/nmodbus-tcp` |
| 目前程式基準 | `0789d35` |
| 本文件是否授權程式修改 | 否 |

## 1. 進入 5F 的必要前提

| 前提 | 目前狀態 | 5F 前必須具備的證據 |
|---|---|---|
| 5A PluginLoader | 已完成第一批 metadata-only 實作 | 程式 commit、Application tests、solution tests、停止線掃描與驗收紀錄 |
| 外部 DLL manual-only | 已完成 fake verifier | 程式 commit、Application tests、solution tests、manual-only 停止線與驗收紀錄 |
| 5B config schema | 已完成 metadata-only schema 驗證 | 程式 commit、Core tests、solution tests、文件同步與驗收紀錄 |
| 5C DB audit | 已完成 Application 層 audit contract / fake writer | 程式 commit、Application tests、Infrastructure.MySql tests、solution tests、停止線與驗收紀錄 |
| 5D auth / Swagger | 已完成七項確認、最小 API key gate、development-only Swagger、測試、Actions 與線上驗收 | 保留 `c92342b`、WebApi.Tests 17 passed、solution tests 536 passed、Actions run `27094590136` success 與 5D 驗收紀錄 |
| 5E Windows Service | 已完成最小 hosting gate、非敏感 options、runner、console smoke path 保留、明確 `--windows-service` smoke path、測試、Actions 與線上查核 | 保留 `0789d35`、ServiceHost.Tests 19 passed、Application.Tests 67 passed、solution tests 548 passed、Actions run `27098568634` success、5E 實作驗收紀錄與 5E 線上驗收紀錄 |

## 2. 5F 驗收範圍

| 範圍 | 驗收重點 |
|---|---|
| Application contract | 5A 到 5C 的 Application 層 contract 不互相污染，不把 DB / WebApi / ServiceHost 實作塞入 Application。 |
| WebApi 邊界 | 5D 完成後，確認 auth / Swagger 不破壞既有 Tasks、Devices、Schema、Health API 測試。 |
| ServiceHost 邊界 | 5E 完成後，確認 service hosting 不破壞既有 console smoke path 與 ServiceHost runtime tests。 |
| 安全停止線 | 確認 repo 不保存 secret、token、password、正式 IP、正式 port、正式 path、正式 service account 或正式機器名稱。 |
| DB 停止線 | 確認第五階段沒有未授權 DDL / ALTER TABLE / formal Apply / 正式 DB 寫入。 |
| Loader 停止線 | 確認外部 DLL 真實載入、plugin folder 掃描與正式 assembly 執行仍依後續授權，不被 5F 偷渡。 |
| 文件同步 | README、docs README、首頁、progress / status、public mirror 與線上頁面需一致。 |

## 3. 驗收命令與證據

| 驗收項目 | 建議命令 / 證據 |
|---|---|
| 全量測試 | `dotnet test HS.DeviceControl.sln --no-restore` |
| Application contract | `dotnet test tests\HS.DeviceControl.Application.Tests\HS.DeviceControl.Application.Tests.csproj --no-restore` |
| WebApi | `dotnet test tests\HS.DeviceControl.WebApi.Tests\HS.DeviceControl.WebApi.Tests.csproj --no-restore` |
| ServiceHost | `dotnet test tests\HS.DeviceControl.ServiceHost.Tests\HS.DeviceControl.ServiceHost.Tests.csproj --no-restore` |
| Infrastructure.MySql | `dotnet test tests\HS.DeviceControl.Infrastructure.MySql.Tests\HS.DeviceControl.Infrastructure.MySql.Tests.csproj --no-restore` |
| 停止線掃描 | 掃描 DB DDL、Swagger production、Windows Service install、外部 DLL loading、plugin folder scan、secret 與正式環境字串 |
| 污染掃描 | 使用既定污染關鍵字清單掃描 repo，不把污染字串寫入文件內容 |
| 文件鏡像 | 比對 `docs/` 與 `public/docs/` 對應檔案 hash |
| 線上驗收 | Cloudflare Pages 首頁、5D / 5E / 5F 文件頁、`status.json`、`progress.json` |

## 4. 5F 不包含項目

- 不新增功能實作。
- 不新增正式 DB table。
- 不執行 DDL / ALTER TABLE / DROP TABLE / formal Apply。
- 不寫入正式 DB。
- 不新增或保存正式 secret、token、password、正式 IP、正式 port、正式 path、正式 service account。
- 不安裝 Windows Service。
- 不載入外部 DLL。
- 不掃描正式 plugin folder。
- 不修改 Adapter public contract。
- 不修改既有 API route，除非 5D 已另行確認。

## 5. 建議回覆格式

5E 程式實作與驗收完成後，若要進入第五階段總整合驗收，建議回覆：

```text
5F 整合驗收執行前確認：
1. 同意
2. 同意
3. 同意
4. 同意
5. 同意
6. 同意
7. 同意
```

## 6. 目前結論

5F 整合驗收已依本計畫完成。5D auth / Swagger 與 5E Windows Service 均已完成實作、測試、Actions、文件同步與線上驗收；5F 已完成七項確認、分項測試、全量測試、runtime smoke、停止線掃描與污染掃描。
