{% from "partials/_macros.html" import verdict_pill %} {# ----- shared HTMX attrs for any interaction targeting #findings ----- #} {% set hx_common = 'hx-get="/fragments/findings" hx-target="#findings" hx-swap="innerHTML" hx-include="#findings-filters"' %} {# Confidence bar color tracks the verdict so the bar reinforces severity at a glance (red for malicious, amber for suspicious, etc.). #} {% set conf_color = { 'malicious': 'bg-red-500', 'suspicious': 'bg-amber-500', 'unknown': 'bg-slate-500', 'benign': 'bg-emerald-500', } %} {# Sort-header macro: clicking toggles asc/desc on the same column, always resets to page 1. Active column shows a small arrow. #} {% macro sort_th(col, label, extra='') %} {% set next_order = 'desc' if (sort == col and order == 'asc') else ('asc' if sort == col else 'desc') %} {% endmacro %}
{# =========================== filter bar =========================== #}
{# state mirrored as hidden inputs so hx-include carries it everywhere #}
{% if total %} {{ (page - 1) * per_page + 1 }}–{{ (page - 1) * per_page + findings|length }} of {{ total }} {% if status_filter == 'resolved' %} resolved {% elif status_filter == 'all' %} (active + resolved) {% else %} active {% endif %} {% else %} 0 findings {% endif %}
{# =========================== table =========================== #} {% if findings %}
{{ sort_th('severity', 'verdict', 'w-24') }} {{ sort_th('collector', 'collector') }} {{ sort_th('category', 'category') }} {{ sort_th('confidence', 'conf', 'w-40') }} {{ sort_th('judged', 'judged', 'text-right w-24') }} {% for f in findings %} {% set idx = loop.index %} {% set detail_id = "finding-detail-" ~ idx %} {% set resolved = f.status == 'resolved' %} {% endfor %}
statusartifact
{{ verdict_pill(f.verdict) }} {% if resolved %} resolved {% else %} active {% endif %} {{ f.collector }} {{ f.category }}
{{ "%.2f"|format(f.confidence) }}
{{ f.artifact or '—' }} {{ f.created_at | relative_time }}
{# =========================== pagination =========================== #}
page {{ page }} of {{ total_pages }}
{% else %}
no findings match the current filters
{% endif %}