fix(planner): correct set_size to 3 dinners and switch cost filter to per-serving

- set_size 21→3, top_k 20→10: generate 3 weekly dinners not full 3×7 matrix
- All 3 items assigned MealType.DINNER on Mon/Wed/Fri
- RecipeCost gains servings field + cost_per_serving property
- compute_recipe_cost accepts servings param (default 4)
- filter.py gates on cost_per_serving instead of total_cost
- max_meal_cost 500→50 (now a meaningful $/serving threshold)
- Email displays ~$X/serving instead of inflated raw total
- select_set: candidate_pool uses max(top_k, set_size) to prevent
  combinations(n<set_size) returning empty iterator

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-22 07:20:17 -07:00
co-authored by Claude Sonnet 4.6
parent 16069bfa92
commit 35f736a052
7 changed files with 27 additions and 13 deletions
+2 -1
View File
@@ -41,7 +41,8 @@ def select_set(
return pool, _set_score(pool, config)
pool.sort(key=lambda s: s.score, reverse=True)
candidate_pool = pool[: config.top_k]
# top_k must cover at least set_size items or combinations() yields nothing
candidate_pool = pool[: max(config.top_k, config.set_size)]
best: List[ScoredRecipe] = []
best_score = float("-inf")