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

3.3 KiB
Raw Blame History

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 有獨立 statusdraft / active / archived

新行為Variant 無 status。生命週期完全由上層 Experiment status 控制。使用者只編輯 nametraffic_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 時自動建立原始 Variantname="原始版本"
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 查詢依賴這些欄位。