{# QA-033 — Executive Overview compact ASI breakdown. 10-row at-a-glance table ported from the Agents-tab _asi_rows.html, with: - tighter padding (4 px row vs 12 px) - shorter score bar (6 px vs 32 px) - no subtitle line ("Direct · indirect · multi-turn") — headline only - read-only (no
drawer) — the radar above is the deep view Same view-model contract — reads asi_rows[*] (.code, .name, .score_pct, .score_label, .is_pending, .is_attention, .weight_label, .weight_high, .findings.{critical,high,medium,low}, .status_label, .status_class). Live updates: each -like row carries data-live="asi-compact-{code}-*" keys so the SSE patcher can rewrite the score / AIVSS / status without a full reload. The scope prefix `asi-compact-` keeps these distinct from the Agents-tab `asi-{code}-score` keys so both surfaces can coexist in the DOM today (QA-030 deletes the Agents copy in a later ship). #}
    {% for row in asi_rows %} {% set _f = row.findings %} {% set _row_findings = (_f.critical | default(0)) + (_f.high | default(0)) + (_f.medium | default(0)) + (_f.low | default(0)) %} {% set _score_pct = row.score_pct | default(0) %} {% set _row_critical = (not row.is_pending) and (_score_pct | float < 40.0) %}
  1. {{ row.code }} {{ row.name }} {% if row.is_pending %}—{% else %}{{ row.score_label }}{% endif %} × {{ row.weight_label }} {{ _f.critical | default(0) }} {{ _f.high | default(0) }} {{ _f.medium | default(0) }} {{ _f.low | default(0) }} {{ row.status_label }}
  2. {% endfor %}