3.3 KiB
3.3 KiB
Migration Note — 規格重置欄位相容說明
適用版本
規格重置:2026-03-22(詳見 CURRENT_WORK_ITEMS.md 第二節)
移除的欄位與相容策略
1. variants.is_control
舊行為:每個 Experiment 有一個 is_control=true 的變體代表控制組。
新行為:建立 Experiment 時自動建立第一個 Variant(命名為「原始版本」),無任何特殊角色標記。所有 Variant 地位平等,由流量權重決定分配比例。
相容策略:
- Backend
domain/admin.pyVariantdataclass 已移除is_control欄位。 schemas/admin.pyVariantRead/VariantCreate/VariantUpdate均已移除。repositories/directus/variants.pydefault_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.pydefault_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.pyEditorChangeRead/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 執行:
-- 可選,不影響系統運作
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 查詢依賴這些欄位。