# 菜单填充启发规则与边界情况全集

## 职责边界

> **本文件专注于"填充策略"**——即荤素菜的选品、搭配和输出规范。
> 计算逻辑（N+1、去重、并发锁、降级）→ **[algorithm-engine.md](algorithm-engine.md)**
> 约束分层体系与裁决序 → **[SKILL.md](../SKILL.md)**
> 模式判定与加载策略 → **[mode-routing.md](mode-routing.md)**
> 地域味型与菜系菜品池 → **[cuisine-profiles.md](cuisine-profiles.md)**
> 菜品速查（选菜不确定时）→ **[dishes-reference.md](../assets/dishes-reference.md)**

---

## 约束分层执行细则

> 这是 SKILL.md §约束分层体系 的细化执行指南。二级约束允许在冲突时协商降级，三级约束可退化。

### 一级硬约束执行

1. **忌口过滤**：从所有候选池（肉源、素菜、调料、味型）中彻底剔除禁用的项目。
2. **健康红线**：痛风→禁海鲜/内脏/浓汤；高血压→控盐（腊肉/咸菜回避）；糖尿病→控糖（拔丝/蜜汁类回避）。
3. **真实存在**：每道菜名必须是真实存在的。不确定时宁可不推也不要杜撰。
4. **去模糊化**：清单中的菜名不存在二选一。用户追问备选时再给。

### 二级优化约束执行与降级

| 约束 | 默认 | 降级条件 | 降级后 |
|------|------|---------|--------|
| N+1 公式 | 严格 | 用户明确偏离 | 尊重用户意图 |
| 荤素比例 | a/b 按公式 | 用户提全素/全荤 | 按用户意图，可全素/全荤 |
| 肉源单射 | 严格 | 可用肉源 < b | 最小碰撞模式（<=2 次） |
| 2 套方案 | 严格 | 用户只需 1 套 | 输出 1 套 + "如需备选随时索取" |
| 并发锁 | 严格 | 用户不关心 | 跳过设备说明，仅菜名清单 |

### 三级风格约束退化

- **极客术语**：首轮高密度，后续衰减 50% 每次。
- **专家内阁**：用户嫌长时折叠为一行摘要；用户催"快点"时完全跳过。
- **算法批注**：用户只需菜名时省略。
- **方案命名 flair**：简化场景用简洁名称。

---

## 方案一设计原则（经典/高效向）

### 荤菜填充

- 荤 1：库存优先（慢炖/红烧肉源）→ 默认猪肉。后台线程，不占炒锅。
- 荤 2：库存优先（爆炒肉源）→ 默认鸡肉。独占炒锅。K > 0 避高辣。
- 荤 3+：去重链 + 库存，非炒工艺。

### 素菜填充

| a | 策略 |
|---|------|
| 1 | 快手清炒时蔬 |
| >= 2 | 清炒 + 凉拌/清蒸；蔬菜种类对比（绿叶 vs 根茎/瓜果） |

---

## 方案二设计原则（并发优化/差异化向）

### 荤菜填充

- 荤 1：库存优先（非炒硬件肉源）→ 默认鱼肉（清蒸）。独立设备。N=1 时降级为极速快手菜。
- 荤 2：库存优先（爆炒肉源）→ 默认牛肉。独占炒锅。
- 荤 3+：去重链 + 库存，非灶台设备。

### 素菜填充

| a | 策略 |
|---|------|
| 1 | 凉拌类（零灶台） |
| >= 2 | 凉拌 + 非炒素菜；种类对比同上 |

---

## 通用启发规则

1. 菜名真实存在，中式家常或经典饭店菜。
2. 忌口防火墙最高优先级。
3. 库存匹配标注"[库存匹配]"。
4. 两方案在肉源/工艺/至少 1 道核心菜上有明显差异。
5. 标签一致性：打标权重 < -2 的菜品在当前场景中剔除。
6. **地域味型协调**：同一方案内不混搭风格冲突过大的菜系组合（如粤式清蒸 + 川式水煮）。方案间可跨菜系。详见 [cuisine-profiles.md](cuisine-profiles.md)。

---

## 边界情况处理全集

> 边界拦截器的详细触发条件和执行规则见 **[algorithm-engine.md](algorithm-engine.md) §5 边界拦截器** 和 **§6 优雅降级策略**。以下为本文件的补充执行细则——只记录 algorithm-engine 未覆盖的交互/输出层面的边界。

### 人数与儿童（补充执行细则）

| 边界 | 处理 |
|------|------|
| N = 1 | 方案二荤 1 降级为极速快手菜，评价改为"单人极速"。2 套方案照常输出 |
| K > N | 非法输入，标记错误并要求更正 |
| K = N | 全面避高辣，每套方案至少 2 道甜味/酸甜 |

### 肉源与特殊饮食（补充执行细则）

| 边界 | 处理 |
|------|------|
| 用户说"全素" | 植物蛋白链（豆腐→菌菇→面筋→豆制品→坚果）替代肉源链，工序并发保留 |
| 忌口覆盖全部肉源 | 触发 algorithm-engine §6 降级路径；告知用户，建议放宽约束 |

### 交付形式输出差异化（执行细则）

| 形式 | 输出追加 |
|------|---------|
| 外卖 | 面/粉→标注"汤面分离"；炸物→"空气炸锅复热3分钟"；避纯汤品；同店满减提示 |
| 堂食 | 每道荤菜附推荐饭店品类（品类级别，非具体商户） |
| 下厨 | 标注设备+耗时；方案二荤1和荤2设备必须不同；按需附厨房调度时间轴 |

### 交互层面边界（执行细则）

| 边界 | 处理 |
|------|------|
| 用户一次提交完整上下文 | 直接快速通道，不追问 |
| 用户部分变量 | 仅追问缺失项，已提供变量注明"已捕获" |
| 冷启动未完成 + 直接给上下文 | 不阻塞，1 行轻量提问；方案照常输出 |
| 约束不可调和 | 触发 algorithm-engine §6 降级；标注告知用户 |
| 最低输出 | N=1 也输出 2 套方案（或 1 套 + "如需备选随时索取"） |
