{% if domain %}{% endif %} Security Progress Report - Finite State Report
{% if logo_path %}
{% else %}
{% endif %}

Security Progress Report

{{ scope_label | default('All Projects') }} — Security Posture Over Time
Report: Security Progress | Generated: {{ generated_at }} | Scope: {{ scope_label | default('All Projects') }} {% if summary is defined and summary.period_start %} | Period: {{ summary.period_start }} to {{ summary.period_end }}{% endif %} {% if summary is defined and summary.mode == 'version_progression' %} | Mode: Version Progression{% endif %}
{% if summary is defined and summary.mode == 'flat_snapshot' %}
Version progression data is not available. This report requires multiple firmware versions per project to show progress over time. The data below reflects a point-in-time snapshot rather than version-to-version trends.
{% endif %} {% if portfolio_kpi %}
Total Resolved
{{ portfolio_kpi.total_resolved | default(0) }}
Total New
{{ portfolio_kpi.total_new | default(0) }}
Net Change
{% if portfolio_kpi.net_change | default(0) > 0 %}+{% endif %}{{ portfolio_kpi.net_change | default(0) }}
Projects Improved
{{ portfolio_kpi.projects_improved | default(0) }} / {{ portfolio_kpi.total_projects | default(0) }}
{% endif %} {% if portfolio_progression and portfolio_progression | length > 1 %}

Open CVE Trend

Total open CVEs over time, broken down by severity.

{% endif %} {% if projects and projects | length > 0 %}

Project Progress

Per-project vulnerability change between baseline and current versions. Sorted by most improved.

{% set ns = namespace(hidden=0) %} {% for p in projects | sort(attribute='net_change') %} {% if p.net_change | default(0) != 0 or p.baseline_open | default(0) > 0 or p.current_open | default(0) > 0 or p.total_resolved | default(0) > 0 or p.total_new | default(0) > 0 %} {% else %} {% set ns.hidden = ns.hidden + 1 %} {% endif %} {% endfor %} {% if ns.hidden > 0 %} {% endif %}
Project Baseline Open Current Open Resolved New Net Change
{{ p.project_name }} {{ p.baseline_open | default(0) }} {{ p.current_open | default(0) }} {{ p.total_resolved | default(0) }} {{ p.total_new | default(0) }} {% if p.net_change | default(0) > 0 %}+{% endif %}{{ p.net_change | default(0) }}
{{ ns.hidden }} project{{ 's' if ns.hidden != 1 else '' }} with no findings or changes not shown
{% endif %} {% if cve_update_summary and cve_update_summary.total | default(0) > 0 %}

CVE Updates Summary

CVE database changes detected during the reporting window that affect open findings.

{% if cve_update_summary.added | default(0) > 0 %} {% endif %} {% if cve_update_summary.retracted | default(0) > 0 %} {% endif %} {% if cve_update_summary.severity_escalated | default(0) > 0 %} {% endif %} {% if cve_update_summary.severity_downgraded | default(0) > 0 %} {% endif %} {% if cve_update_summary.exploit_gained | default(0) > 0 %} {% endif %} {% if cve_update_summary.exploit_subsided | default(0) > 0 %} {% endif %}
Category Count
Newly Added CVEs{{ cve_update_summary.added }}
Retracted CVEs{{ cve_update_summary.retracted }}
Severity Escalated{{ cve_update_summary.severity_escalated }}
Severity Downgraded{{ cve_update_summary.severity_downgraded }}
Exploit Gained{{ cve_update_summary.exploit_gained }}
Exploit Subsided{{ cve_update_summary.exploit_subsided }}
Total {{ cve_update_summary.total }}
{% endif %} {% if projects and projects | length > 0 and summary is defined and summary.mode == 'version_progression' %}

Version-by-Version Detail

Expand a project to see how vulnerability counts changed across firmware versions.

{% for p in projects | sort(attribute='net_change') %} {% if p.progression and p.progression | length > 0 and (p.net_change | default(0) != 0 or p.baseline_open | default(0) > 0 or p.current_open | default(0) > 0 or p.total_resolved | default(0) > 0 or p.total_new | default(0) > 0) %}
{{ p.project_name }} ({{ p.progression | length }} version{{ 's' if p.progression | length != 1 else '' }}, net {% if p.net_change | default(0) > 0 %}+{% endif %}{{ p.net_change | default(0) }} ) {% for v in p.progression %} {% endfor %}
Version Date Open Resolved New Critical High Medium Low
{{ v.version | default('--') }} {{ v.date_display | default(v.date) | default('--') }} {{ v.open_count | default(0) }} {{ v.resolved | default(0) }} {{ v.new | default(0) }} {{ v.critical | default(0) }} {{ v.high | default(0) }} {{ v.medium | default(0) }} {{ v.low | default(0) }}
{% endif %} {% endfor %}
{% endif %}
{% include '_action_buttons.html' %}