first commit

This commit is contained in:
Chris
2026-03-23 20:23:58 +08:00
commit 74d612aca1
3193 changed files with 692056 additions and 0 deletions

75
docs/MIGRATION_NOTE.md Normal file
View File

@@ -0,0 +1,75 @@
# 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 查詢依賴這些欄位。