enrichment: capture failure cause + admin retry button

Each enrichment failure now records {"_error": "...", "_step": "..."} into
enrichment_json, mirrors the message into the errors log (visible in
/logs/protokoll), and the list shows the cause as a tooltip on the
"Fehler beim Abrufen der Infos" text. Admins also get a "erneut versuchen"
link per failed row that re-queues just that flat (POST /actions/enrich-flat).

The pipeline raises a typed EnrichmentError per step (fetch / llm / crash)
so future failure modes don't get swallowed as a silent "failed".

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
EiSiMo 2026-04-21 15:05:39 +02:00
parent e0ac869425
commit a8f698bf5e
3 changed files with 79 additions and 24 deletions

View file

@ -142,7 +142,16 @@
Infos werden abgerufen…
· <span data-rel-utc="{{ f.discovered_at|iso_utc }}" title="{{ f.discovered_at|de_dt }}"></span>
{% elif f.enrichment_status == 'failed' %}
Fehler beim Abrufen der Infos
{% set err = (item.enrichment or {}).get('_error') or 'unbekannt' %}
<span title="{{ err }}">Fehler beim Abrufen der Infos</span>
{% if is_admin %}
<form method="post" action="/actions/enrich-flat" class="inline"
hx-post="/actions/enrich-flat" hx-target="#wohnungen-body" hx-swap="outerHTML">
<input type="hidden" name="csrf" value="{{ csrf }}">
<input type="hidden" name="flat_id" value="{{ f.id }}">
<button type="submit" class="underline text-slate-600 hover:text-slate-900 ml-1">erneut versuchen</button>
</form>
{% endif %}
· <span data-rel-utc="{{ f.discovered_at|iso_utc }}" title="{{ f.discovered_at|de_dt }}"></span>
{% else %}
{% set e = item.enrichment or {} %}