53afd59c Grounding pipeline and recipe-search settings API (PR #70)
641f468b SearXNG sidecar in compose (PR #77; resumed once Feature 07 landed deploy/compose.yaml in dev)
Acceptance criteria (feature)
Fixture tests from at least six real recipe pages extract title/image/ingredients/steps/minutes; the fetcher refuses private/loopback/link-local/CGNAT/ULA targets including after redirects and DNS rebinding; a grounding run with fake search/fetch/LLM stores a complete recipe and both photo sizes; an ungroundable dish returns a typed error without failing siblings; inside the compose network a SearXNG JSON query returns results.
Guardrails
Never hot-link third-party images (served from the cache); keep source URL + site name; candidates lacking ingredients or an image are rejected; code-derived method/minutes win over LLM guesses; no scraping beyond the single recipe page and its image.
Feature 10 - Recipe Grounding and Photos. All seven tasks done and independently reviewed:
- f4414e41 SSRF-safe recipe fetcher (PR #65)
- 4c4570be schema.org Recipe JSON-LD extractor (PR #66)
- 10c25cb5 Search providers: SearXNG and Brave with ranking (PR #67)
- 8a432108 Photo cache and /media endpoint (PR #68)
- 9b4db226 normalize_recipe skill (PR #69)
- 53afd59c Grounding pipeline and recipe-search settings API (PR #70)
- 641f468b SearXNG sidecar in compose (PR #77; resumed once Feature 07 landed deploy/compose.yaml in dev)
## Acceptance criteria (feature)
Fixture tests from at least six real recipe pages extract title/image/ingredients/steps/minutes; the fetcher refuses private/loopback/link-local/CGNAT/ULA targets including after redirects and DNS rebinding; a grounding run with fake search/fetch/LLM stores a complete recipe and both photo sizes; an ungroundable dish returns a typed error without failing siblings; inside the compose network a SearXNG JSON query returns results.
## Guardrails
Never hot-link third-party images (served from the cache); keep source URL + site name; candidates lacking ingredients or an image are rejected; code-derived method/minutes win over LLM guesses; no scraping beyond the single recipe page and its image.
Feature branch head: 13512f97b811e8fd08b53242123692e7f7a84a3c (dev merged in at 72f7ea5).
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Feature 10 - Recipe Grounding and Photos. All seven tasks done and independently reviewed:
Acceptance criteria (feature)
Fixture tests from at least six real recipe pages extract title/image/ingredients/steps/minutes; the fetcher refuses private/loopback/link-local/CGNAT/ULA targets including after redirects and DNS rebinding; a grounding run with fake search/fetch/LLM stores a complete recipe and both photo sizes; an ungroundable dish returns a typed error without failing siblings; inside the compose network a SearXNG JSON query returns results.
Guardrails
Never hot-link third-party images (served from the cache); keep source URL + site name; candidates lacking ingredients or an image are rejected; code-derived method/minutes win over LLM guesses; no scraping beyond the single recipe page and its image.
Feature branch head:
13512f97b8(dev merged in at72f7ea5).Independent Codex gpt-6-sol review: APPROVED for this exact commit.