## 1. Allocation Contract

- [x] 1.1 扩展店铺套餐分配请求与响应类型，支持 `expiry_base_override`、`default_expiry_base`、`effective_expiry_base` 及对应中文名称字段。
- [x] 1.2 接入创建分配接口 `POST /api/admin/shop-package-allocations` 的 `expiry_base_override` 参数。
- [x] 1.3 接入修改生效条件接口 `PATCH /api/admin/shop-package-allocations/{id}/expiry-base`。

## 2. Allocation Expiry Condition UI

- [x] 2.1 在套餐授权/分配弹框提供“跟随套餐默认”“购买即生效”“实名激活时生效”三选一。
- [x] 2.2 选择“跟随套餐默认”时显式提交 `expiry_base_override: null`。
- [x] 2.3 在已分配套餐编辑弹框显示“仅影响后续新订单，不影响已购买套餐”提示。
- [x] 2.4 在已分配套餐详情或编辑弹框显示默认值、覆盖值和最终值的后端中文名称。

## 3. Series Grant Package Visibility

- [x] 3.1 在代理系列授权套餐列表显示默认生效条件、覆盖生效条件和最终生效条件。
- [x] 3.2 从代理系列授权套餐列表编辑生效条件时，使用对应套餐分配记录 ID 调用生效条件更新接口。
- [x] 3.3 保存成功后刷新授权套餐列表或详情，展示后端返回的最新最终生效条件。

## 4. Policy Integrity and Verification

- [x] 4.1 前端不从默认值和覆盖值计算或修改 `effective_expiry_base`。
- [x] 4.2 验证新建分配时三种选项分别提交 `null`、`from_purchase`、`from_activation`，且不提交 `from_realname`。
- [x] 4.3 验证编辑覆盖值和恢复默认均只影响后续新订单，不影响已购买套餐。
- [x] 4.4 验证页面可区分默认值、覆盖值和最终生效条件，并正确显示后端中文名称。
- [x] 4.5 运行相关前端校验，并执行 `openspec validate update-package-allocation-expiry-base-override --strict`。
