# 3B ManualApplyPreview 決策確認表

本文件承接 [ManualApplyPreview 實作前確認](manual-apply-preview-preimplementation-checklist.md)，把進入程式 repo 前需要使用者確認的 7 項決策整理成可逐項回覆的確認表。

本文件只做決策確認與後續回填，不代表已同意執行 DDL、修改 DB、改 ConsoleHost 預設啟動流程、導入 WebApi / ServiceHost 或保存任何敏感連線資訊。

## 0. 確認狀態

| 項目 | 內容 |
|---|---|
| 確認狀態 | 已確認 |
| 確認日期 | 2026-06-04 |
| 使用者回覆 | 7 項皆同意 |
| 後續狀態 | 程式 repo commit `13c14ca` 已完成第一版 ManualApplyPreview 安全預覽 |
| 仍不得執行 | DDL、DB 修改、正式 Apply、ConsoleHost 預設啟動流程變更、WebApi / ServiceHost 導入、history table 建立 |

## 1. 建議確認方式

使用者可直接回覆以下格式：

```text
3B 決策確認：
1. 同意
2. 同意
3. 同意
4. 同意
5. 同意
6. 同意
7. 同意
備註：若有需要調整的項目，請寫在這裡。
```

若任一項不同意，建議寫成：

```text
第 N 項不同意，改為：...
```

## 2. 七項決策確認表

| 編號 | 決策項 | 建議定案 | 若同意的影響 | 若不同意需補充 |
|---:|---|---|---|---|
| 1 | 第一版範圍 | 只做 `ManualApplyPreview`，不做 DDL executor | 可進入 preview model / risk classifier / formatter 實作；不具備 apply 能力 | 需說明是否要同時做 DDL executor，以及是否允許 DB 寫入 |
| 2 | `CanApply` 行為 | 第一版固定 `false` | 輸出可審核 plan，但明確不能執行 apply | 需定義何時可變成 `true`、gate、權限與確認 token |
| 3 | 風險等級 | 使用 `Low`、`Medium`、`High`、`Critical` | 測試與 ConsoleHost 顯示可依固定等級分類 | 需提供替代等級名稱與排序規則 |
| 4 | Critical 操作處理 | `DROP`、`MODIFY`、`CHANGE`、縮短欄位、NOT NULL 無 default 一律列為 blocked | 高風險操作可顯示但不得進一步 apply | 需指定哪些高風險操作可例外，以及例外條件 |
| 5 | `PlanHash` 規則 | 由 preview 內容產生，不包含密碼、host、port 或完整連線資訊 | 可追蹤 plan 內容，又不洩漏敏感資訊 | 需指定 hash 要額外納入或排除哪些欄位 |
| 6 | ConsoleHost 接入 | 第一版只顯示 preview，不改預設啟動流程 | 可做 formatter / demo request，不影響現有啟動 | 需說明是否要接入啟動流程，以及失敗時是否阻止 Workflow |
| 7 | History table | 第一版不建立、不寫入 `schema_apply_history` 或 `schema_migrations` | 不需要 DB DDL，也不增加儲存邊界 | 需確認 table 欄位、建表權限、寫入 gate 與 cleanup 策略 |

## 3. 本次確認結果

| 編號 | 決策項 | 確認結果 |
|---:|---|---|
| 1 | 第一版範圍 | 同意，只做 `ManualApplyPreview`，不做 DDL executor。 |
| 2 | `CanApply` 行為 | 同意，第一版固定 `false`。 |
| 3 | 風險等級 | 同意，使用 `Low`、`Medium`、`High`、`Critical`。 |
| 4 | Critical 操作處理 | 同意，`DROP`、`MODIFY`、`CHANGE`、縮短欄位、NOT NULL 無 default 一律 blocked。 |
| 5 | `PlanHash` 規則 | 同意，由 preview 內容產生，不包含密碼、host、port 或完整連線資訊。 |
| 6 | ConsoleHost 接入 | 同意，第一版只顯示 preview，不改預設啟動流程。 |
| 7 | History table | 同意，第一版不建立、不寫入 `schema_apply_history` 或 `schema_migrations`。 |

## 4. 已確認結論

本次已採用以下結論：

1. 同意第一版只做 `ManualApplyPreview`。
2. 同意第一版 `CanApply=false`。
3. 同意風險等級採 `Low`、`Medium`、`High`、`Critical`。
4. 同意 Critical 操作一律 blocked。
5. 同意 `PlanHash` 不納入敏感連線資訊。
6. 同意 ConsoleHost 第一版只顯示 preview，不改預設啟動流程。
7. 同意第一版不建立 history table。

採用此結論後，已完成第一版 `ManualApplyPreview` 安全預覽；這仍不是正式 apply，也不代表允許 DDL。

## 5. 確認後可進入的工作

| 順序 | 工作 | 範圍 |
|---:|---|---|
| 1 | 程式 repo 結構檢查 | 已完成。 |
| 2 | 3B 第一版實作範圍盤點 | 已完成，並收斂為 preview model、builder、formatter 與 manual-only gate。 |
| 3 | 小步實作 | 已完成，程式 commit `13c14ca`。 |
| 4 | 3B 完成稽核 | 建議下一步整理，確認是否滿足驗收條件。 |

## 6. 仍需停止的項目

即使七項決策全部同意，仍不得自動執行以下項目：

- 不得執行 `CREATE TABLE`、`ALTER TABLE`、`DROP`。
- 不得連正式 DB 或測試 DB 做 DDL。
- 不得新增真正 DDL executor。
- 不得改 ConsoleHost 預設啟動流程。
- 不得新增 WebApi / ServiceHost / WinForms Debug Tool。
- 不得保存 DB 密碼、Token、完整 connection string 或正式環境資訊。
- 不得新增 history table 或 migrations table。

## 7. 建議下一步

七項決策已確認，且第一版 ManualApplyPreview 已完成。建議下一步整理「3B 完成稽核表」；若要驗證真實 DB，也需另行確認 read-only preview 驗證節點，仍不得執行 DDL。

## 8. 實作回填（2026-06-04）

| 項目 | 結果 |
|---|---|
| 程式 commit | `13c14ca` |
| commit 訊息 | `新增 ManualApplyPreview 安全預覽` |
| 第一版範圍 | 只做 `ManualApplyPreview`，不做 DDL executor |
| `CanApply` | 固定 `false` |
| 風險等級 | `Low`、`Medium`、`High`、`Critical` |
| blocked 規則 | Critical 或未知危險操作會被 blocked |
| `PlanHash` | 由 preview 內容產生，不含敏感連線資訊 |
| ConsoleHost | 只顯示 preview，不改預設啟動流程 |
| History table | 未建立、未寫入 |
| 驗證結果 | Core 9 passed、ConsoleHost formatter 15 passed、MySQL manual-only gate 1 passed、`dotnet run` 成功 |

## 9. 後續仍需確認

- 是否整理 3B 完成稽核表。
- 是否執行真實 DB read-only preview 驗證。
- 3C Service / API 邊界分析已完成後，是否整理 3C 決策確認表。
