# MySQL TaskStore node_executions 目標模式收斂稽核

## 1. 文件目的

本文件整理目標模式下，第二階段 MySQL TaskStore 與 Schema Automation 的收斂證據、已完成驗證與延後邊界。

本文件不執行真實 DB 寫入、不保存密碼、不修改 schema、不執行 DDL，只作為目前狀態稽核與下一步確認依據。

本文件的安全測試驗證範圍截至程式 repo commit `22d5eb6`；文件本身後續以 commit `80c8e04` 補齊並同步到文件網站。

2026-06-02 後續已在使用者明確同意下，於測試 DB 建立 `node_executions`，並以程式 repo commit `0216296` 作為驗證執行版本完成真實 DB manual-only 寫入 / 查詢 / cleanup 驗證；驗證紀錄已於 commit `ade8860` 同步。驗證紀錄見 [MySQL TaskStore node_executions 真實 DB 驗證紀錄](mysql-taskstore-node-executions-real-db-verification-record.md)。

## 2. 稽核時間與版本

| 項目 | 內容 |
| --- | --- |
| 稽核日期 | 2026-06-02 |
| 程式 repo 分支 | `poc/nmodbus-tcp` |
| 已驗證程式 commit | `22d5eb6` |
| `node_executions` 真實 DB 驗證執行 commit | `0216296` |
| `node_executions` 驗證紀錄同步 commit | `ade8860` |
| 稽核文件 commit | `80c8e04` |
| 目標 | 收斂第二階段 MySQL TaskStore 與 Schema Automation，補齊 `node_executions` 持久化前置確認、必要實作與驗證，並明確界定延後邊界。 |

## 3. 已完成證據

| 項目 | 目前狀態 | 主要證據 |
| --- | --- | --- |
| `task_executions` 第一版 PoC | 已完成 | 已有 Save / FindById / ListRecent 與真實 DB manual-only 驗證紀錄。 |
| `node_executions` schema class | 已完成 | `MySqlTaskNodeExecutionSchema` 維護 table、column、index 與 comment。 |
| `node_executions` SQL builder | 已完成 | `MySqlTaskStoreSqlBuilder` 會先 delete 同 task id 的 node rows，再依 `NodeRecords` 順序 insert。 |
| `node_executions` fake gateway 測試 | 已完成 | `MySqlTaskStoreTests` 覆蓋 delete-before-insert、insert order、欄位 mapping、長欄位截斷與錯誤遮蔽。 |
| schema precheck 停止線 | 已完成 | `MySqlTaskStoreNodeExecutionSchemaPrecheckTests` 覆蓋缺表、缺欄位、缺 comment、PK 不符與缺 index。 |
| manual-only xUnit 入口 | 已完成 | `MySqlTaskStoreNodeExecutionsManualMySql56Tests` 預設 gate 關閉，只有明確開啟才會寫入測試 DB。 |
| 真實 DB 驗證前確認清單 | 已完成 | `mysql-taskstore-node-executions-real-db-precheck.md` 已固定測試 DB、schema、gate、cleanup、通過條件與停止線。 |
| `node_executions` 真實 DB 寫入 / 查詢 / cleanup 驗證 | 已完成 | 使用者確認後建立測試 DB table，manual-only 測試通過，`NodeExecutionRowCount=2`，`FindById` / `ListRecent` 通過，cleanup 成功。 |
| 延後邊界 | 已完成 | 文件已明確標示 `command_executions`、詳細 log table、Schema Apply / DDL Executor 與 NodeRecords 查詢回填皆延後。 |
| 狀態同步流程 | 已補強 | 文件網站 `status.json` 可同步最新程式 commit，且可用 UTF-8 正確解析。 |

## 4. 本次安全驗證結果

本次只執行不碰真實 DB 的安全驗證，並明確關閉 manual gate：

```powershell
$env:HS_MYSQL_TASKSTORE_ENABLED="false"
$env:HS_MYSQL_TASKSTORE_ALLOW_WRITE="false"
$env:HS_MYSQL_INSPECT_ENABLED="false"
```

| 驗證項目 | 指令 | 結果 |
| --- | --- | --- |
| MySQL Infrastructure 測試 | `dotnet test tests\HS.DeviceControl.Infrastructure.MySql.Tests\HS.DeviceControl.Infrastructure.MySql.Tests.csproj` | 59 passed |
| 全專案測試 | `dotnet test HS.DeviceControl.sln` | 391 passed |

已知警告：

- `NETSDK1138`：`.NET 5.0` 已停止支援。這是既有技術決策風險，不影響本次驗證結果，但後續需安排升級評估。

## 5. 必要證據收斂結果

| 項目 | 狀態 | 收斂說明 |
| --- | --- | --- |
| `node_executions` 真實 DB 寫入 / 查詢驗證 | 已完成 | 使用者明確同意後執行 manual-only 測試，schema precheck、Save、node rows 查詢、FindById、ListRecent 與 cleanup 皆通過。 |
| 真實 DB 驗證紀錄 | 已完成 | 已新增 `mysql-taskstore-node-executions-real-db-verification-record.md`。 |
| 第二階段 TaskStore 多表進度 | 可標記完成 | `task_executions` 與 `node_executions` 皆已有真實 DB manual-only 驗證證據；命令明細與詳細 log table 已明確延後，不阻塞本節點收斂。 |

## 6. 明確延後邊界

| 項目 | 狀態 | 延後原因 |
| --- | --- | --- |
| `command_executions` | 延後 | RawRequest / RawResponse 資料來源尚未固定，不宜直接改 public model。 |
| 詳細 log table | 延後 | 建議獨立走 DB LogWriter / TraceStore，不應塞入 `MySqlTaskStore.Save`。 |
| Schema Apply / DDL Executor | 延後 | 任何 `CREATE TABLE`、`ALTER TABLE`、`DROP` 都屬高風險 DB 操作，需要另行確認。 |
| `FindById` / `ListRecent` 回填 `NodeRecords` | 延後 | 會改變查詢語意與 contract，需要另行設計。 |

## 7. 已完成驗證指令

本目標在使用者確認後已執行：

```powershell
dotnet test tests\HS.DeviceControl.Infrastructure.MySql.Tests\HS.DeviceControl.Infrastructure.MySql.Tests.csproj --filter FullyQualifiedName~MySqlTaskStoreNodeExecutionsManualMySql56Tests --logger "console;verbosity=detailed"
```

通過重點：

- `SchemaPrecheck: True`
- `Save result: success`
- `NodeExecutionRowCount: 2`
- `FindById result: True`
- `ListRecent contains TaskId: True`
- `Cleanup result: True`

## 8. 稽核結論

目前 `node_executions` 的前置確認、必要實作、fake gateway 測試、schema precheck、manual-only 驗證入口與真實測試 DB 寫入 / 查詢 / cleanup 驗證皆已完成。

本目標可標記完成。建議下一步同步文件網站進度，並進入 `command_executions` 或 DB LogWriter / TraceStore 設計前確認。
