## MODIFIED Requirements

### Requirement: 上架/下架套餐

系统 SHALL 通过 `PATCH /api/admin/packages/:id/shelf` 接口允许不同角色切换套餐上下架状态。**操作目标因调用者角色而不同**：平台/超管修改 `tb_package.shelf_status`（全局状态），代理修改自己的 `tb_shop_package_allocation.shelf_status`（代理独立状态）。只有启用状态的套餐才能上架。

#### Scenario: 平台管理员上架启用的套餐
- **WHEN** 平台/超管将启用且下架的套餐设置为上架
- **THEN** 系统更新 `tb_package.shelf_status=1`

#### Scenario: 平台管理员尝试上架禁用的套餐
- **WHEN** 平台/超管尝试上架一个 status=2（禁用）的套餐
- **THEN** 系统返回错误 "禁用的套餐不能上架，请先启用"

#### Scenario: 平台管理员下架套餐
- **WHEN** 平台/超管将上架的套餐设置为下架
- **THEN** 系统更新 `tb_package.shelf_status=2`，只影响平台自营渠道

#### Scenario: 代理上架自己分配的套餐
- **GIVEN** 代理拥有该套餐的分配记录，且 `tb_package.status=1`（启用）
- **WHEN** 代理调用接口设置 shelf_status=1
- **THEN** 系统更新该代理的 `allocation.shelf_status=1`，不修改 `tb_package.shelf_status`

#### Scenario: 代理下架自己分配的套餐
- **GIVEN** 代理拥有该套餐的分配记录，allocation.shelf_status=1
- **WHEN** 代理调用接口设置 shelf_status=2
- **THEN** 系统更新该代理的 `allocation.shelf_status=2`，不影响其他代理

#### Scenario: 代理尝试上架全局禁用的套餐
- **GIVEN** `tb_package.status=2`（禁用）
- **WHEN** 代理尝试将 shelf_status 设置为1
- **THEN** 系统返回错误 "套餐已禁用，无法上架"

#### Scenario: 代理操作未分配的套餐
- **GIVEN** 代理没有该套餐的分配记录
- **WHEN** 代理调用接口操作该套餐的上下架
- **THEN** 系统返回错误 "该套餐未分配给您，无法操作上下架"
