All checks were successful
ci/someci/push/backend Pipeline was successful
Two follow-ups to the apply-shape fix: opening_hours: previous converter only kept datum_von's weekday, dropping the rest of multi-day ranges. A Sat-Sun event ended up with only Samstag saved. Now iterates [datum_von, datum_bis] inclusive, projects each date to its German weekday, and dedupes by (weekday, open, close). Different hours on the same weekday still produce separate rows so the admin sees the conflict. Capped at 7 distinct weekdays — the form's expressive limit. website validator: the LLM was emitting aggregator/listing URLs (e.g. suendenfrei.tv detail pages) as the official event website because that's where it found grounding info. The prompt already forbade this, but the model ignores soft rules. Add a hard validator-level rejection for known aggregator domains: suendenfrei.tv, mittelalterkalender.info, marktkalendarium.de, festival-alarm.com, mittelaltermarkt.online. These suggestions now land in the "rejected" bucket with a clear reason. image_url / logo_url are unaffected (those legitimately come from any host). Prompt: enumerate the same aggregator domains explicitly under both the "primary source" fallback list and the "website forbidden" rule, so the model has a concrete blacklist instead of a category description. Existing markets with already-saved aggregator websites need manual clearing — the validator only kicks in on new applies. Tests: 4 new opening-hours subtests (range expansion, weekday dedupe, cross-entry dedupe, hours-conflict-kept-separate) and 4 validator subtests (three aggregator domains rejected as website; aggregator host as image_url still ok).
Marktvogt Backend
Go REST API + WebSocket