# ConsoleHost Schema Initializer DryRun 人工驗證紀錄

## 驗證節點名稱

ConsoleHost Schema Initializer DryRun 人工驗證

## 驗證目的

確認 ConsoleHost 改由 `SchemaInitializer` 取得 dry run result 後，實際輸出是否仍可讓使用者清楚判斷：

- 既有 Workflow 代表流程是否仍正常完成。
- ConsoleHost 是否顯示 `Schema initializer dry run:`。
- 是否能看到 `Mode=DryRun`、`Source=ConsoleHost` 與 `CorrelationId`。
- SQL preview 是否仍完整顯示。
- 是否明確提醒不會連線或修改 MySQL。
- 本節點是否仍未導入真實 MySQL、`information_schema` 或 DDL。

## 驗證時間

2026-05-31

## 驗證對象

| 項目 | 內容 |
|---|---|
| repo | `hs-device-control-template` |
| branch | `poc/nmodbus-tcp` |
| commit | `ac52376` |
| ConsoleHost | `src\HS.DeviceControl.ConsoleHost` |
| 對應文件 | `schema-initializer-dryrun-consolehost-integration-implementation-record.md` |

## 驗證方式

執行：

```powershell
dotnet run --project src\HS.DeviceControl.ConsoleHost
```

驗證時仍使用：

- `samples/config`
- `MockSchemaInspector.Empty()`
- `SchemaInitializer`
- `SchemaInitializerDryRunRequest`
- `FormatSchemaInitializerResult()`

本次驗證沒有：

- 連線 MySQL。
- 讀取 `information_schema`。
- 執行 `CREATE TABLE`、`ALTER TABLE` 或任何 DDL。
- 新增或更換 MySQL package。
- 修改 ConsoleHost 啟動參數或啟動方式。

## 實際輸出摘要

ConsoleHost 前段仍正常完成第一階段代表流程：

```text
Workflow completed.
Task node history:
- NodeId=light-on NodeName=開啟燈號 DeviceId=LED_001 CommandName=LightOn Status=completed TimeTakenMs=2 RetryCount=0 NextNodeId=sensor-verify
- NodeId=sensor-verify NodeName=Sensor 驗證 DeviceId=SENSOR_001 CommandName=SensorVerify Status=completed TimeTakenMs=0 RetryCount=0
Recent tasks:
- TaskId=demo-task WorkflowId=LIGHT_SENSOR_DEMO Status=Completed TimeTakenMs=12 NodeCount=2
```

Schema Initializer DryRun 區塊可正常顯示：

```text
Schema initializer dry run:
Mode=DryRun Success=True Source=ConsoleHost CorrelationId=consolehost-schema-initializer-dry-run TablesToCreate=1 ColumnsToAdd=0 IndexesToAdd=0 ManualReview=0
SQL preview:
- CREATE TABLE IF NOT EXISTS `task_executions` (
  `task_id` varchar(64) NOT NULL COMMENT 'task id',
  `workflow_id` varchar(64) NOT NULL COMMENT 'workflow id',
  `status` varchar(32) NOT NULL COMMENT 'status',
  PRIMARY KEY (`task_id`),
  INDEX `idx_task_executions_status` (`status`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='task execution';
Warnings:
- Dry Run 不會連線或修改 MySQL。
```

## 驗證結果

| 項目 | 結果 |
|---|---|
| Workflow 原有輸出 | 符合預期，仍可完成 `LIGHT_SENSOR_DEMO` |
| Task node history | 符合預期，可看到節點、設備、命令、狀態與下一節點 |
| Recent tasks | 符合預期，可看到任務摘要 |
| Schema Initializer 標題 | 符合預期，顯示 `Schema initializer dry run:` |
| DryRun 模式 | 符合預期，顯示 `Mode=DryRun` |
| 來源資訊 | 符合預期，顯示 `Source=ConsoleHost` |
| 追蹤資訊 | 符合預期，顯示 `CorrelationId=consolehost-schema-initializer-dry-run` |
| 建表數量 | 符合預期，顯示 `TablesToCreate=1` |
| 欄位 / 索引補齊數量 | 符合預期，空 snapshot 下由 `CREATE TABLE` 一次呈現 |
| 人工審查項目 | 符合預期，顯示 `ManualReview=0` |
| SQL preview | 符合預期，可看到 `CREATE TABLE IF NOT EXISTS task_executions` |
| 安全警告 | 符合預期，明確提示 Dry Run 不會連線或修改 MySQL |
| ConsoleHost 啟動方式 | 符合預期，不需要新增參數 |

## 自動測試結果

| 驗證項目 | 結果 |
|---|---|
| `dotnet test tests\HS.DeviceControl.ModbusPoc.Tests\HS.DeviceControl.ModbusPoc.Tests.csproj` | 通過 37 個測試 |
| `dotnet test` | 通過 318 個測試 |

## 是否符合預期

符合預期。

此節點已達到「讓使用者在 ConsoleHost 看見 Schema Initializer DryRun 實際效果」的目的。

## 發現問題或限制

- 目前仍使用 mock schema snapshot，不代表真實 MySQL metadata。
- 目前只顯示 DryRun preview，尚未接真實 MySQL Inspector。
- 尚未提供 `--schema-dry-run`、`--schema-apply` 之類的 ConsoleHost 模式參數。
- 尚未實作 Apply / DDL executor。
- `.NET 5.0` 仍會出現既有 EOL 警告，與本次功能無直接關係。

## 判斷

此驗證節點可以標記完成。

## 建議下一步

建議下一步先整理：

`Schema Automation 第一輪收尾檢查`

確認目前 SQL Generator、Dry Run Plan、Mock Inspector、Schema Initializer、ConsoleHost 顯示與人工驗證是否已足以作為「真實 MySQL Inspector」前的完成邊界。
