78 lines
2.1 KiB
Markdown
78 lines
2.1 KiB
Markdown
# Experiment System Spec
|
||
|
||
## 目標
|
||
|
||
定義銷售實驗主線的最小可上線系統範圍(MVP):
|
||
|
||
- Experiment
|
||
- Variant
|
||
- Change Set
|
||
- Release
|
||
- Runtime delivery
|
||
|
||
## 這輪規格調整(2026-03-22)
|
||
|
||
1. 實驗匹配規則必須同時支援:
|
||
- URL 規則(contains / equals / starts_with / regex)
|
||
- 裝置限制(mobile / tablet / desktop)
|
||
|
||
2. 建立 Experiment 時,自動建立一個「原始版本 Variant」:
|
||
- 系統自動建立,不讓使用者手動調整該原始版本內容
|
||
|
||
3. 移除 `is_control`:
|
||
- 不再讓使用者手動指定對照組
|
||
|
||
4. 移除 `variant_changes.enabled`:
|
||
- 每筆 change 預設生效,不提供啟用/停用欄位
|
||
|
||
5. key 全改為系統生成:
|
||
- `experiment_key`:`EX+timestamp`
|
||
- `variant_key`:`VA+timestamp`
|
||
- 使用者不輸入 key
|
||
|
||
6. Variant 簡化:
|
||
- 不再有 `status`
|
||
- 使用者建立/編輯 variant 只可調整 `name` 與 `traffic_weight`
|
||
|
||
## 核心流程
|
||
|
||
1. 建立 Experiment
|
||
2. 系統自動建立原始版本 Variant(不可編輯內容)
|
||
3. 建立其他 Variant(只編輯 name / traffic_weight)
|
||
4. 在 Editor 編輯 Variant changes
|
||
5. Build Release(產生 runtime payload)
|
||
6. Publish / Rollback
|
||
7. Runtime assign + payload 套用 + event 回傳
|
||
|
||
## Experiment 管理
|
||
|
||
- 列表、建立、編輯、狀態流轉(schedule / pause / resume / archive)
|
||
- 支援 module_type 與 targeting_config
|
||
- targeting_config 最少要包含 `url_rules` 與 `device_targets`
|
||
|
||
## Variant 管理
|
||
|
||
- 列表、建立、編輯、刪除
|
||
- 使用者可調整:`name`、`traffic_weight`
|
||
- 系統管理欄位:`variant_key`
|
||
- 不提供 `status`、`is_control`
|
||
- change set 可讀可寫(不含 enabled 開關)
|
||
|
||
## Release 管理
|
||
|
||
- build:由 variant_changes 聚合 payload
|
||
- publish:將 release 生效
|
||
- rollback:回到前一可用 release
|
||
|
||
## Assignment 規則
|
||
|
||
- 以 stable seed 決定 bucket
|
||
- bucket 對映 variant weight
|
||
- assignment 結果需可追蹤
|
||
|
||
## 第一版成功標準
|
||
|
||
- 後台可完成「建立實驗 -> 建立變體 -> 編輯 -> build -> publish」
|
||
- runtime 可正確回傳 assignment 與 payload
|
||
- rollback 可恢復上一版本
|