# Migration Note — 規格重置欄位相容說明

## 適用版本

規格重置：2026-03-22（詳見 `CURRENT_WORK_ITEMS.md` 第二節）

---

## 移除的欄位與相容策略

### 1. `variants.is_control`

**舊行為**：每個 Experiment 有一個 `is_control=true` 的變體代表控制組。

**新行為**：建立 Experiment 時自動建立第一個 Variant（命名為「原始版本」），無任何特殊角色標記。所有 Variant 地位平等，由流量權重決定分配比例。

**相容策略**：
- Backend `domain/admin.py` `Variant` dataclass 已移除 `is_control` 欄位。
- `schemas/admin.py` `VariantRead` / `VariantCreate` / `VariantUpdate` 均已移除。
- `repositories/directus/variants.py` `default_fields` 已移除 `is_control`。
- `application/runtime/assignment.py` 已移除所有 `is_control=variant.is_control` 引用。
- **Directus 欄位本身**：可保留在 DB schema 中，不影響新流程；若需清除可在 Directus 後台刪除 `variants.is_control` 欄位。

---

### 2. `variants.status`

**舊行為**：Variant 有獨立 `status`（draft / active / archived）。

**新行為**：Variant 無 status。生命週期完全由上層 Experiment `status` 控制。使用者只編輯 `name` 與 `traffic_weight`。

**相容策略**：
- Backend `domain/admin.py` 已移除 `Variant.status`。
- `repositories/directus/variants.py` `default_fields` 已移除 `status`。
- Frontend `variant-view-model.js` 已移除 `status` / `buildVariantStatusTag`。
- **Directus 欄位**：`variants.status` 欄位在 DB 中仍存在，可安全保留；不再被讀取或寫入。

---

### 3. `variant_changes.enabled`

**舊行為**：每筆 VariantChange 有 `enabled` 布林值，`False` 表示該筆修改暫時停用，不進入 runtime payload。

**新行為**：`enabled` 欄位移除。所有在 `PUT /api/editor/variants/{id}/changes` 的 changes 均視為有效；不需要的修改直接刪除即可。

**相容策略**：
- Backend `domain/editor_builder.py` 已移除 `enabled` 過濾邏輯。
- `schemas/editor.py` `EditorChangeRead` / `EditorChangeWrite` 已移除 `enabled` 欄位。
- Frontend `editor-workspace-model.js` 已移除所有 `enabled: true` 殘留。
- **Directus 欄位**：`variant_changes.enabled` 欄位在 DB 中仍存在，可安全保留；不再被讀取或寫入。若 Directus repo 的 `default_fields` 仍包含 `enabled`，需確認已移除（已於 2026-03-22 修正）。

---

## 新增行為（對應舊欄位的補充）

| 舊欄位 | 替代機制 |
|--------|---------|
| `variants.is_control` | 建立 Experiment 時自動建立原始 Variant，`name="原始版本"` |
| `variants.status` | Experiment `status` 控制整體啟停，Variant 無獨立生命週期 |
| `variant_changes.enabled` | `PUT /api/editor/variants/{id}/changes` 改為完整覆蓋語意（刪除不在 request 中的舊 change） |

---

## Directus DB 清理建議（選擇性）

若需徹底清理 DB schema，可在 Directus 後台或 migration script 執行：

```sql
-- 可選，不影響系統運作
ALTER TABLE variants DROP COLUMN IF EXISTS is_control;
ALTER TABLE variants DROP COLUMN IF EXISTS status;
ALTER TABLE variant_changes DROP COLUMN IF EXISTS enabled;
```

**注意**：執行前確認沒有其他服務或直接 SQL 查詢依賴這些欄位。
