# 01 — 创建套餐分配时固化生效条件选择

**What to build:** 运营人员通过系列授权、后续追加授权或批量套餐分配创建代理套餐分配时，可以显式选择跟随套餐默认、购买即生效或实名即生效。系统为本次创建的每条分配保存相同选择，并在列表、详情和操作结果中返回套餐默认值、分配覆盖值及最终有效值的中文名称。任一记录校验或写入失败时，整次操作不留下部分分配。

**Blocked by:** None — can start immediately

**Status:** completed

- [x] 架构主通道为简单写，读取投影使用 Query 或现有只读门面；完整收口创建分配时解析和保存覆盖值的业务边界，不迁移套餐管理 CRUD、价格、佣金或历史购买记录。
- [x] 数据库迁移为套餐分配增加可空的生效条件覆盖字段，`NULL` 明确表示跟随套餐当前默认值，并包含中文字段注释及可逆的向下迁移。
- [x] 系列首次授权、系列后续追加套餐和批量套餐分配均要求显式提交同一个覆盖选择，并写入本次创建的每条分配；跟随默认必须提交 JSON `null`，不能依靠省略字段表达。
- [x] 仅接受 `null`、`from_purchase`、`from_activation`，非法值或字段缺失统一返回参数错误，DTO 枚举说明与套餐常量原文一致。
- [x] 分配列表、详情及创建结果返回默认值、覆盖值、最终有效值及其中文名称；最终有效值由后端计算，前端不得自行合并。
- [x] 任一套餐不存在、跨系列、越权、不可授权或写入失败时整批回滚，不产生部分系列授权、套餐分配或成功副作用。
- [x] 后台分配表单提供“跟随套餐默认、购买即生效、实名即生效”三个选项，并正确发送显式 `null`。
- [x] HTTP 集成测试覆盖全部创建入口、三个选择、整批一致性、字段缺失、非法枚举、越权及事务回滚；前端验收列表和详情的默认值、覆盖值、最终值显示一致。
