71c7a3414e
import_recipe_text posted plain Swedish text to /api/recipes/create/html-or-json. That endpoint is a scraper entry point: Mealie runs recipe_scrapers over whatever `data` holds and answers 400 for anything without schema.org markup. A text block never had any, so the tool returned 400 on every call it has ever made — including a minimal one-line test recipe. The seven session logs of the importing agent contain no successful text import; every recipe that landed came in through import_recipe_url. The existing test mocked _request away, so it asserted the payload shape and never that Mealie would accept it. Green test, broken tool. Create the recipe with POST /api/recipes and fill it with a PATCH instead. Both are already exercised against this instance. Ingredients are stored as readable `note` lines, which is what parse_ingredients expects to structure afterwards. Also accept a parenthetical on a section heading. `Gör så här (REKONSTRUERAD):` marks where the steps came from, and the old exact-match check turned that import away before it reached Mealie. A PATCH that fails now leaves a name-only recipe, so the error names the slug rather than leaving a silent empty stub. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>