Files
mkt.ose.tw/docs/MIGRATION_NOTE.md
2026-03-23 20:23:58 +08:00

76 lines
3.3 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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 查詢依賴這些欄位。