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

78 lines
2.1 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.
# 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 可恢復上一版本