# Schema Automation 第一輪收尾檢查

## 1. 檢查目的

本文件用來確認第二階段目前的 Schema Automation 第一輪是否已形成完整邊界，並判斷是否可以進入下一個節點。

本次收尾檢查涵蓋：

- Schema Attribute / SQL Generator 設計。
- MySQL 5.6.2 DDL 規則。
- ALTER TABLE Dry Run Plan。
- `ISchemaInspector` 與 `MockSchemaInspector`。
- `SchemaDryRunPlanner`。
- ConsoleHost Schema Dry Run 顯示與人工驗證。
- `SchemaInitializer` DryRun 第一版。
- ConsoleHost 透過 `SchemaInitializer` 顯示 dry run result 與人工驗證。

## 2. 收尾結論

Schema Automation 第一輪可以標記完成。

完成的範圍是：

```text
C# schema definition
-> SQL Generator
-> Mock Inspector
-> Dry Run Plan
-> Schema Initializer
-> ConsoleHost 顯示
-> 人工驗證紀錄
```

目前已足以作為「真實 MySQL Inspector」前的完成邊界。

下一步建議進入：

`真實 MySQL Inspector 前置確認`

但真實 MySQL 套件、DB 連線、`information_schema` 查詢與任何 DDL / Apply 行為仍需要獨立確認，不應直接自動執行。

## 3. 完成項目總表

| 項目 | 狀態 | 證據 / 文件 |
|---|---|---|
| MySQL Schema 自動建表設計 | 已完成 | `mysql-schema-auto-create-design.md` |
| MySQL schema Class 初稿 | 已完成 | `mysql-schema-class-draft.md` |
| Schema Attribute 實作前確認 | 已完成 | `mysql-schema-attribute-preimplementation-checklist.md` |
| Schema Attribute 與 SQL Generator 設計 | 已完成 | `mysql-schema-attribute-sql-generator-design.md` |
| SQL Generator 實作前確認 | 已完成 | `mysql-sql-generator-preimplementation-checklist.md` |
| MySqlSchemaSqlGenerator 第一版 | 已完成 | `mysql-sql-generator-implementation-record.md` |
| ALTER TABLE / Initializer 實作前確認 | 已完成 | `mysql-alter-schema-initializer-preimplementation-checklist.md` |
| ALTER TABLE SQL 與 Dry Run Plan 第一版 | 已完成 | `mysql-alter-dry-run-implementation-record.md` |
| Schema Inspector 前置分析 | 已完成 | `mysql-schema-inspector-preimplementation-checklist.md` |
| `ISchemaInspector` / mock inspector 確認 | 已完成 | `mysql-schema-inspector-interface-mock-preimplementation-checklist.md` |
| `ISchemaInspector` / mock inspector 實作 | 已完成 | `schema-inspector-interface-mock-implementation-record.md` |
| `SchemaDryRunPlanner` 設計 | 已完成 | `schema-dry-run-planner-design.md` |
| `SchemaDryRunPlanner` 第一版 | 已完成 | `schema-dry-run-planner-implementation-record.md` |
| ConsoleHost dry run 顯示 | 已完成 | `schema-dry-run-planner-consolehost-display-record.md` |
| ConsoleHost dry run 人工驗證 | 已完成 | `consolehost-schema-dry-run-display-verification-record.md` |
| `SchemaInitializer` DryRun 設計 | 已完成 | `schema-initializer-dryrun-flow-design.md` |
| `SchemaInitializer` DryRun 第一版 | 已完成 | `schema-initializer-dryrun-implementation-record.md` |
| ConsoleHost 接入 `SchemaInitializer` | 已完成 | `schema-initializer-dryrun-consolehost-integration-implementation-record.md` |
| ConsoleHost Schema Initializer DryRun 人工驗證 | 已完成 | `consolehost-schema-initializer-dryrun-verification-record.md` |

## 4. 目前已驗證能力

| 能力 | 結論 |
|---|---|
| 從 C# class / schema definition 表達 table、column、index、comment | 已具備 |
| 產生 MySQL 5.6.2 相容的 `CREATE TABLE IF NOT EXISTS` | 已具備 |
| 產生非破壞性的 `ADD COLUMN` / `ADD INDEX` | 已具備 |
| 禁止自動產生 `DROP`、`MODIFY`、`CHANGE` | 已具備 |
| 使用 mock schema snapshot 產生 Dry Run Plan | 已具備 |
| 保留 warnings 與 manual review items | 已具備 |
| 將 DryRun 包裝成 `SchemaInitializerResult` | 已具備 |
| ConsoleHost 顯示 SQL preview | 已具備 |
| ConsoleHost 顯示 `Mode` / `Source` / `CorrelationId` | 已具備 |
| 人工驗證 ConsoleHost 實際輸出 | 已完成 |
| 全專案測試 | 已通過 318 個測試 |

## 5. 尚未完成但不屬於第一輪的項目

| 項目 | 判斷 |
|---|---|
| 真實 MySQL Inspector | 下一輪進入前置確認 |
| MySQL package 導入 | 需先確認套件與連線策略 |
| `information_schema` 查詢 | 需先確認 MySQL 5.6.2 欄位與權限 |
| 真實 DB 連線測試 | 需要使用者提供環境與敏感資訊處理方式 |
| DDL executor / Apply 模式 | 需獨立設計確認 |
| `--schema-dry-run` / `--schema-apply` 啟動參數 | 需獨立設計確認 |
| TaskStore 實作 | 屬於資料持久化下一階段 |
| WebApi / ServiceHost / WinForms Debug Tool | 屬於後續平台化階段 |

## 6. 進入真實 MySQL Inspector 前需確認

進入下一階段前，需先確認：

| 確認項目 | 建議 |
|---|---|
| MySQL 套件 | 沿用前面建議，第一版採 `MySqlConnector` |
| 連線資訊 | 不寫入 repo；使用 local config、環境變數或使用者本機安全設定 |
| 查詢範圍 | 第一版只讀 `information_schema.TABLES`、`COLUMNS`、`STATISTICS` |
| 權限 | 只需要 metadata read 權限，不需要 DDL 權限 |
| 測試方式 | 先做 unit test + mock，再做可選的本機 MySQL integration test |
| 失敗處理 | 需回傳標準 `ErrorInfo`，不得吞掉 exception |
| 安全邊界 | 不執行 `CREATE`、`ALTER`、`DROP` |

## 7. 必須停下確認的項目

以下項目不得直接自動執行：

- 新增 `MySqlConnector` package。
- 建立真實 MySQL 連線。
- 要求或使用 DB password / token。
- 讀取真實 `information_schema`。
- 執行任何 DDL。
- 新增 Apply / DDL executor。
- 修改 ConsoleHost 啟動參數。
- 修改資料模型或正式資料庫欄位。

## 8. 建議下一步

建議下一步進入：

`真實 MySQL Inspector 前置確認`

建議先整理：

1. 是否導入 `MySqlConnector`。
2. `IMySqlConnectionFactory` 或同等抽象是否必要。
3. `information_schema` 查詢欄位清單。
4. 連線資訊提供方式與禁止寫入 repo 的規則。
5. 單元測試與 integration test 的分界。
6. 仍不執行 DDL 的安全邊界。
