{% extends "base.html" %} {% block title %}Assessment Overview — {{ scan_metadata.project_name if scan_metadata else recipe_name }}{% endblock %} {% block content %} {# ── 1. Header ── #}

Assessment Overview {% if scan_metadata and scan_metadata.project_name %} {{ scan_metadata.project_name }} {% elif folder_filter %} Folder: {{ folder_filter }} {% elif project_filter %} Project: {{ project_filter }} {% endif %} {% if scan_metadata and scan_metadata.version_name %} v{{ scan_metadata.version_name }} {% endif %}

Generated: {{ generated_at }}
{# ── 2. Executive KPIs ── #}

Executive KPIs

{% if summary %}
{{ summary.total_findings | default(0) }}
Total Findings
{{ summary.critical_count | default(0) }}
Critical Findings
{{ summary.high_count | default(0) }}
High Findings
{{ summary.medium_count | default(0) }}
Medium Findings
{{ summary.low_count | default(0) }}
Low Findings
{{ summary.open_count | default(0) }}
Open Findings
{{ summary.triaged_count | default(0) }}
Triaged Findings
{{ summary.exploit_count | default(0) }}
With Known Exploits
{{ summary.epss_high_count | default(0) }}
High Exploit Likelihood
{{ summary.total_components | default(0) }}
Components
{% else %}
No data
{% endif %}
{# ── 3. Severity Distribution Chart ── #} {% if severity_distribution %}

Severity Distribution

{% endif %} {# ── 4. Top Security Risks ── #} {% if top_security_risks %}

Top Security Risks

{% for f in top_security_risks %} {% endfor %}
CVE ID Severity Component Version CVSS EPSS %ile KEV Exploit
{% if domain and f.project_id and f.project_version_id and f.finding_id %} {{ f.cve_id }} {% else %} {{ f.cve_id }} {% endif %} {{ f.severity }} {{ f.component }} {{ f.component_version }} {{ "%.1f"|format(f.cvss_score) if f.cvss_score else "—" }} {{ "%.1f"|format(f.epss_percentile * 100) if f.epss_percentile else "—" }}{% if f.epss_percentile %}%{% endif %} {% if f.in_kev %}KEV{% else %}{% endif %} {% if f.has_exploit %}Exploit{% else %}{% endif %}
{% endif %} {# ── 5. Exploit Maturity ── #} {% if exploit_maturity_summary %}

Exploit Maturity

{{ exploit_maturity_summary.total_with_exploits | default(0) }} finding(s) with known exploit intelligence

{% set cats = [ ("kev", "In KEV"), ("vckev", "VulnCheck KEV"), ("weaponized", "Weaponized"), ("poc", "PoC"), ("threatactors", "Threat Actors"), ("ransomware", "Ransomware"), ("botnets", "Botnets"), ("commercial", "Commercial"), ("reported", "Reported") ] %} {% for key, label in cats %} {% set count = exploit_maturity_summary[key] | default(0) %} {% if count > 10 %}{% set heat = "heat-3" %} {% elif count > 3 %}{% set heat = "heat-2" %} {% elif count > 0 %}{% set heat = "heat-1" %} {% else %}{% set heat = "heat-0" %}{% endif %}
{{ count }}
{{ label }}
{% endfor %}
{% endif %} {# ── 6. Reachability Analysis ── #} {% if reachability_summary and reachability_summary.has_data %}

Reachability Analysis

{{ reachability_summary.reachable | default(0) }}
Reachable
{{ reachability_summary.unreachable | default(0) }}
Unreachable
{{ reachability_summary.inconclusive | default(0) }}
Inconclusive
{% endif %} {# ── 7. Triage Pipeline ── #} {% if triage_pipeline %}

Triage Pipeline

Current VEX triage status of findings

{{ triage_pipeline.in_triage | default(0) }}
Being Investigated
{{ triage_pipeline.affected | default(0) }}
Confirmed Affected
{{ triage_pipeline.exploitable | default(0) }}
Open with Known Exploit
{% if triage_pipeline.vex_summary and triage_pipeline.vex_summary.count %} {% endif %}
{% endif %} {# ── 8. Remediation Progress ── #} {% if remediation_progress %}

Remediation Progress

{{ remediation_progress.p0_count | default(0) }}
P0 Action Cards
{{ remediation_progress.p1_count | default(0) }}
P1 Action Cards
{% if remediation_progress.top_p0_cves %}

Top P0 CVEs

{% for cve in remediation_progress.top_p0_cves %} {% endfor %}
CVE IDComponentCVSSProject
{% if domain and cve.project_id and cve.project_version_id and cve.finding_id %} {{ cve.cve_id }} {% else %} {{ cve.cve_id }} {% endif %} {{ cve.component }} {{ "%.1f"|format(cve.cvss_score) if cve.cvss_score else "—" }} {{ cve.project_name }}
{% endif %} {% if remediation_progress.p0_components %}

P0 Vulnerable Components — Critical + Exploit/KEV

{% for card in remediation_progress.p0_components %}
{{ card.component }}
{{ card.finding_count }} finding(s) · Top CVE: {{ card.top_cve }} · CVSS {{ "%.1f"|format(card.worst_cvss) }}
{% if card.project %}
{{ card.project }}
{% endif %}
{% endfor %}
{% endif %} {% if remediation_progress.p1_components %}

P1 Vulnerable Components — High + Network Vector

{% for card in remediation_progress.p1_components %}
{{ card.component }}
{{ card.finding_count }} finding(s) · Top CVE: {{ card.top_cve }} · CVSS {{ "%.1f"|format(card.worst_cvss) }}
{% endfor %}
{% endif %}
{% endif %} {# ── 9. All Findings by Severity Tier ── #} {% if findings_by_tier %}

All Findings

{% set status_labels = {"UNKNOWN": "Open", "NO_STATUS": "Open", "OPEN": "Open", "IN_TRIAGE": "In Triage"} %} {% set tiers = [ ("CRITICAL", findings_by_tier.CRITICAL | default([])), ("HIGH", findings_by_tier.HIGH | default([])), ("MEDIUM", findings_by_tier.MEDIUM | default([])), ("LOW", findings_by_tier.LOW | default([])), ("INFORMATIONAL", findings_by_tier.INFORMATIONAL | default([])) ] %} {% for tier_name, tier_findings in tiers %} {% if tier_findings %} {{ tier_name }} — {{ tier_findings | length }} finding(s) {% for f in tier_findings %} {% endfor %}
CVE ID Severity Component Version CVSS EPSS %ile KEV Exploit Status
{% if domain and f.project_id and f.project_version_id and f.finding_id %} {{ f.cve_id }} {% else %} {{ f.cve_id }} {% endif %} {{ f.severity }} {{ f.component }} {{ f.component_version }} {{ "%.1f"|format(f.cvss_score) if f.cvss_score else "—" }} {{ "%.1f"|format(f.epss_percentile * 100) if f.epss_percentile else "—" }}{% if f.epss_percentile %}%{% endif %} {% if f.in_kev %}KEV{% else %}{% endif %} {% if f.has_exploit %}Exploit{% else %}{% endif %} {{ status_labels.get(f.status, f.status) if status_labels.get is defined else f.status }}
{% endif %} {% endfor %}
{% endif %} {# ── 10. Component Risk Analysis ── #} {% if component_risk_ranking %}

Component Risk Analysis

{% for c in component_risk_ranking %} {% endfor %}
Component Version Critical High Medium Low Total Risk Score
{{ c.component }} {{ c.component_version }} {% if c.critical > 0 %}{{ c.critical }}{% else %}0{% endif %} {% if c.high > 0 %}{{ c.high }}{% else %}0{% endif %} {{ c.medium }} {{ c.low }} {{ c.total }} {{ c.risk_score }}
{% endif %} {# ── 11. Component Licenses ── #} {% if component_license_distribution %}

Component Licenses

{% endif %} {# ── 12. SBOM Summary ── #} {% if sbom_stats %}

SBOM Summary

Total Components: {{ sbom_stats.total_components | default(0) }}

{% if component_inventory %}
View component inventory ({{ component_inventory | length }}) {% for c in component_inventory %} {% endfor %}
ComponentVersionTypeLicense
{{ c.name }} {{ c.version if c.version else "—" }} {{ c.type if c.type else "—" }} {{ c.license if c.license else "—" }}
{% endif %}
{% endif %} {# ── 13. Per-Project Breakdown (folder scope only) ── #} {% if project_cards %}

Per-Project Breakdown

{% for proj in project_cards %} {{ proj.project_name }} — {{ proj.critical }} critical, {{ proj.high }} high ({{ proj.total }} total)
Critical: {{ proj.critical }} · High: {{ proj.high }} · Medium: {{ proj.medium }} · Low: {{ proj.low }} · Open: {{ proj.open }}
{% if proj.top_findings %} {% for f in proj.top_findings %} {% endfor %}
CVESeverityCVSSComponent
{{ f.cve_id }} {{ f.severity }} {{ "%.1f"|format(f.cvss_score) if f.cvss_score else "—" }} {{ f.component }}
{% endif %} {% if proj.riskiest_component %}
Riskiest component: {{ proj.riskiest_component }} (score: {{ proj.riskiest_score }})
{% endif %}
{% endfor %}
{% endif %} {# ── 14. Scan Metadata ── #} {% if scan_metadata %}

Scan Metadata

{% if scan_metadata.project_name %}Project: {{ scan_metadata.project_name }}{% endif %} {% if scan_metadata.version_name %}Version: {{ scan_metadata.version_name }}{% endif %} {% if scan_metadata.scan_date %}Scan Date: {{ scan_metadata.scan_date }}{% endif %} {% if scan_metadata.days_since_scan is not none %} {{ scan_metadata.days_since_scan }} day(s) ago {% endif %}
{% endif %} {% endblock %}