{# Attack timeline section — collapsible
with the horizontal bar chart for findings-by-severity and a chronologically-ordered list of notable attack moments. Auto-expands when the scan surfaced critical findings; otherwise the reader can drill in. The bar's onClick scrolls to the matching sev bucket in the findings section below. #} {% set _attack_total = (counts.critical | default(0)) + (counts.high | default(0)) + (counts.medium | default(0)) + (counts.low | default(0)) %}
0 %} open{% endif %}> Attack timeline {{ _attack_total }} probe{% if _attack_total != 1 %}s landed{% else %} landed{% endif %}

Across the {{ asi_covered }} ASI categor{% if asi_covered != 1 %}ies{% else %}y{% endif %} exercised, the swarm landed {{ _attack_total }} successful probe{% if _attack_total != 1 %}s{% endif %}. The severity profile below shows where attention should land first.

{% include "dashboard/narrative/_bar_probes_per_agent.html" %}
  • Critical {{ counts.critical | default(0) }} {% if counts.critical and counts.critical > 0 %} Patch immediately. {% else %} None surfaced. {% endif %}
  • High {{ counts.high | default(0) }} {% if counts.high and counts.high > 0 %} Open tickets this sprint. {% else %} None surfaced. {% endif %}
  • Medium {{ counts.medium | default(0) }} {% if counts.medium and counts.medium > 0 %} Plan in the next iteration. {% else %} None surfaced. {% endif %}
  • Low {{ counts.low | default(0) }} {% if counts.low and counts.low > 0 %} Track in backlog. {% else %} None surfaced. {% endif %}