# Schema Initializer DryRun ConsoleHost 接入實作紀錄

## 1. 實作目的

本次實作將 ConsoleHost 的 schema dry run demo 從直接使用 `SchemaDryRunPlanner`，改為透過 `SchemaInitializer` 取得 `SchemaInitializerResult`。

目標是讓 ConsoleHost 先對齊未來 ServiceHost / WebApi 也可共用的 initializer 協調層，同時維持本階段安全邊界：不連線 MySQL、不讀取 `information_schema`、不執行 DDL、不改 ConsoleHost 啟動方式。

## 2. 本次程式 commit

| 項目 | 內容 |
|---|---|
| repo | `hs-device-control-template` |
| branch | `poc/nmodbus-tcp` |
| commit | `ac52376` |
| commit 訊息 | 接入 Schema Initializer ConsoleHost DryRun 顯示 |
| 測試總數 | 318 |

## 3. 修改檔案

| 檔案 | 調整內容 |
|---|---|
| `src/HS.DeviceControl.ConsoleHost/Program.cs` | ConsoleHost schema dry run 區塊改由 `SchemaInitializer` 產生結果，新增 `FormatSchemaInitializerResult()` 與 `CreateSchemaInitializerDryRunDemo()` |
| `tests/HS.DeviceControl.ModbusPoc.Tests/ConsoleHostSchemaDryRunDisplayTests.cs` | 新增 initializer dry run 成功、warning、manual review、失敗與 null result 顯示測試 |

## 4. 實作內容

### 4.1 ConsoleHost 接入

ConsoleHost 原本流程：

```text
ConsoleHost -> SchemaDryRunPlanner -> SchemaDryRunResult -> FormatSchemaDryRunResult
```

本次改為：

```text
ConsoleHost -> SchemaInitializer -> SchemaInitializerResult -> FormatSchemaInitializerResult
```

保留既有 `FormatSchemaDryRunResult()`，不在本次移除舊 formatter。

### 4.2 顯示內容

ConsoleHost 目前會輸出：

```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 ...
Warnings:
- Dry Run 不會連線或修改 MySQL。
```

此輸出讓使用者可直接看到：

- 目前是 `DryRun`。
- 來源是 `ConsoleHost`。
- 有 `CorrelationId` 可追蹤。
- SQL 只做 preview。
- 明確標示不會連線或修改 MySQL。

## 5. 驗證結果

| 驗證項目 | 結果 |
|---|---|
| `dotnet test tests\HS.DeviceControl.ModbusPoc.Tests\HS.DeviceControl.ModbusPoc.Tests.csproj` | 通過 37 個測試 |
| `dotnet test` | 通過 318 個測試 |
| `dotnet run --project src\HS.DeviceControl.ConsoleHost` | 成功完成代表流程，並顯示 `Schema initializer dry run:` |
| MySQL package | 未新增 |
| 真實 DB 連線 | 未執行 |
| DDL | 未執行 |
| ConsoleHost 啟動方式 | 未修改 |

## 6. 影響範圍

| 範圍 | 影響 |
|---|---|
| Core | 無新增修改 |
| ConsoleHost | schema dry run 顯示來源改走 initializer |
| Tests | ModbusPoc / ConsoleHost 顯示測試增加 5 個 |
| MySQL | 無影響，仍未連線 DB |
| Workflow / TaskEngine / Adapter | 無行為變更 |

## 7. 已知限制

- 目前仍使用 `MockSchemaInspector.Empty()`。
- 尚未讀取真實 MySQL `information_schema`。
- 尚未提供 `--schema-dry-run` 或 `--schema-apply` 啟動參數。
- 尚未實作 Apply / DDL executor。
- 尚未將 schema 初始化結果寫入 TaskStore 或正式 Log 儲存。

## 8. 建議下一步

建議下一步進入：

`ConsoleHost Schema Initializer DryRun 人工驗證紀錄`

整理本次 `dotnet run --project src\HS.DeviceControl.ConsoleHost` 的實際輸出、驗證目的、結果判斷、限制與下一步，讓文件網站可直接看到此節點的實際效果。
