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 驗證紀錄。
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:
$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. 已完成驗證指令
本目標在使用者確認後已執行:
dotnet test tests\HS.DeviceControl.Infrastructure.MySql.Tests\HS.DeviceControl.Infrastructure.MySql.Tests.csproj --filter FullyQualifiedName~MySqlTaskStoreNodeExecutionsManualMySql56Tests --logger "console;verbosity=detailed"
通過重點:
SchemaPrecheck: TrueSave result: successNodeExecutionRowCount: 2FindById result: TrueListRecent contains TaskId: TrueCleanup result: True
8. 稽核結論
目前 node_executions 的前置確認、必要實作、fake gateway 測試、schema precheck、manual-only 驗證入口與真實測試 DB 寫入 / 查詢 / cleanup 驗證皆已完成。
本目標可標記完成。建議下一步同步文件網站進度,並進入 command_executions 或 DB LogWriter / TraceStore 設計前確認。