feat: distinguish trace allergens from contains #23

Merged
TimCane merged 4 commits from feat/trace-allergens into main 2026-07-20 19:55:56 +01:00
TimCane commented 2026-07-20 19:20:58 +01:00 (Migrated from github.com)

Summary

  • v_recipe splits allergens into contains and trace_allergens; HelloFresh strips its traces-of- slug prefix so one exclusion value matches both arrays, Gousto contributes an empty array
  • excludeAllergens matches contains OR traces by default; new excludeTraces=false narrows to confirmed contains
  • HasTraceAllergens and HasUtensils capability flags on list_sources and detail notes; Gousto caveat states traces are unpublished (empty means unknown, not none)
  • RecipeDetail gains utensils, read per source like pantry items
  • server instructions, tool descriptions and README table extended to match

Test plan

  • dotnet test: 121 unit + 74 integration tests pass, including the search performance gate
  • projection tests pin the rigatoni contains/traces arrays verbatim against the committed fixtures
  • mustard exercises the filter both ways: traces-only carriers drop by default and return under excludeTraces=false while confirmed carriers stay excluded
  • MCP round-trip asserts traceAllergens and utensils reach the wire
## Summary - v_recipe splits allergens into contains and trace_allergens; HelloFresh strips its traces-of- slug prefix so one exclusion value matches both arrays, Gousto contributes an empty array - excludeAllergens matches contains OR traces by default; new excludeTraces=false narrows to confirmed contains - HasTraceAllergens and HasUtensils capability flags on list_sources and detail notes; Gousto caveat states traces are unpublished (empty means unknown, not none) - RecipeDetail gains utensils, read per source like pantry items - server instructions, tool descriptions and README table extended to match ## Test plan - `dotnet test`: 121 unit + 74 integration tests pass, including the search performance gate - projection tests pin the rigatoni contains/traces arrays verbatim against the committed fixtures - mustard exercises the filter both ways: traces-only carriers drop by default and return under excludeTraces=false while confirmed carriers stay excluded - MCP round-trip asserts traceAllergens and utensils reach the wire
Sign in to join this conversation.
No description provided.