{# SAST program dashboard: a findings funnel, a CVSS-band breakdown, a "Top Vulnerability Types" (CWE) breakdown, and a short "Top findings" preview linking out to the full, filterable findings register at /activities/sast/findings (sast_findings_list.html) -- the one dashboard in this app backed by a stored table (sast_findings) instead of report text re-parsed on every request. See web/sast_dashboard.py's module docstring for why. #} {% from "_macros.html" import info_tip %} Program dashboard
{% call info_tip("Open findings") %}

SAST findings still open in the register.

A finding stays open until a later scan no longer reports it, or a reviewer closes it.

{% endcall %} {{ sast_dash.funnel.findings }} Open findings
{% call info_tip("Exploitable") %}

Open findings the scan did not mark Latent.

Latent means the vulnerable code is present but not reachable in the current build.

{% endcall %} {{ sast_dash.funnel.exploitable }} Exploitable (not Latent)
{% call info_tip("Verified") %}

Open findings with a Confirmed verdict.

The scan checked the code and believes the issue is real, not just a pattern match.

{% endcall %} {{ sast_dash.funnel.verified }} Verified (Confirmed verdict)
{% call info_tip("Severe") %}

Open findings whose CVSS v3.1 score is High or Critical (7.0 or above).

secfoo computes the score from the finding's own vector. The model does not pick the band.

{% endcall %} {{ sast_dash.funnel.severe }} Severe (CVSS High/Critical)
{% call info_tip("Awaiting sign-off") %}

Severe open findings no reviewer has signed off yet.

Open the findings list to record a decision. The card itself links there.

{% endcall %} {{ sast_dash.funnel.awaiting_signoff }} Severe, awaiting reviewer sign-off
{% call info_tip("CVSS severity") %}

Open findings banded by the CVSS v3.1 score secfoo computes from each finding's vector.

None means the finding had no vector, so no score could be computed.

{% endcall %}

CVSS severity

Computed by secfoo from each finding's own CVSS v3.1 vector -- never asserted directly by the model.

{{ sast_dash.funnel.findings }}
Critical ({{ sast_dash.cvss_band_counts.critical }}) High ({{ sast_dash.cvss_band_counts.high }}) Medium ({{ sast_dash.cvss_band_counts.medium }}) Low ({{ sast_dash.cvss_band_counts.low }}) None ({{ sast_dash.cvss_band_counts.none }})
{% call info_tip("Top vulnerability types") %}

Open findings grouped by CWE, the weakness type.

Findings without a specific CWE ("unverified") are left out of this breakdown.

{% endcall %}

Top vulnerability types

Open findings by CWE. Findings without a specific CWE ("unverified") are excluded from this breakdown.

{% if sast_dash.top_cwe_counts %}
{% for cwe, count in sast_dash.top_cwe_counts %}
{{ cwe }}
{{ count }}
{% endfor %}
{% else %}

No findings with a specific CWE yet.

{% endif %}
{% set top_findings = sast_dash.open_findings[:5] %}

Top findings {% call info_tip("Top findings", inline=True) %}

The five highest-CVSS open findings across every project.

The full register, including closed findings and filters, is on the findings page.

{% endcall %}

The highest-CVSS open findings across all projects.

View all findings ({{ sast_dash.open_findings | length }} open, {{ sast_dash.closed_findings | length }} closed) →
{% if top_findings %}
{% for f in top_findings %} {% endfor %}
ProjectAccessTitleSource locationLast seenCVSS
{{ f.project_display_name }} {% if f.verdict and f.verdict.lower() == 'confirmed' %}Verified{% endif %} {% if f.cvss_vector | cvss_network_reachable %}External{% endif %} {{ f.title }}
{{ f.cwe or "unverified" }}
{{ f.location_file }}{% if f.location_line %}:{{ f.location_line }}{% endif %} {{ f.last_seen_at | fmt_time }} {% if f.cvss_score is not none %} {{ f.cvss_score | cvss_rating_label | capitalize }} {{ "%.1f"|format(f.cvss_score) }} {% else %} No vector {% endif %}
{% else %}
No open findings yet.
{% endif %}