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

View File

@@ -0,0 +1,77 @@
# 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 可恢復上一版本