{% if render_mode != 'fragment' %} {% if domain %}{% endif %} Findings by Project - Finite State Report {% include "_design_system.html" %} {% include "_console_shell.html" %} {% endif %} {# NOTE: This {% if render_mode != 'fragment' %} {% endif %} {% import "_console_macros.html" as fs with context %} {% if render_mode != 'fragment' %} {{ fs.topbar( crumbs=["Finite State", "Findings by Project"], meta=[ {"label": "Domain", "value": domain or "—"}, {"label": "Generated", "value": generated_at or "—"}, ], controls=[], ) }} {% endif %} {# No
wrapper: that grid container is 220px sidebar + 1fr main. This recipe is single-column (no sidebar), so we use .main directly to avoid a dead 220px gutter on the left. The console pattern in _console_shell.html supports both shapes; sidebar templates (like triage_prioritization) wrap in .layout, sidebar-free templates skip it. #}

Findings by Project

Comprehensive inventory of security findings across projects.

{% if folder_path or project_label %}
{{ fs.panel_head("Applied filter") }} {% if folder_path %}

Folder: {{ folder_path }}

{% endif %} {% if project_label %}

Project filter: {{ project_label }}

{% endif %}

Showing findings for the specified scope only.

{% endif %} {% include "_columns_schema.html" %}
{{ fs.panel_head("Findings", meta=((data | length) | string) ~ (" row" if (data | length) == 1 else " rows")) }}
{% if data %} {% if folder_path %}{% endif %} {# F2: shortened visible labels (values are ≤ double digits); the full descriptions live in title=. #} {% set current_project = namespace(value=None) %} {% for row in data %} {% if row['Project Name'] != current_project.value %} {% set current_project.value = row['Project Name'] %} {% endif %} {# CVSS coercion: row['CVSS'] may be a numpy scalar (from DataFrame.to_dict('records')), Python number, string ("N/A"), or None. `| float(0)` handles all of these uniformly: numerics round-trip, non-numerics → 0.0, and the band classification works off the float. #} {% set cvss_raw = row.get('CVSS', 0) %} {% set cvss_f = cvss_raw | float(0) %} {% if cvss_f >= 9.0 %}{% set cvss_class = 'critical' %} {% elif cvss_f >= 7.0 %}{% set cvss_class = 'high' %} {% elif cvss_f >= 4.0 %}{% set cvss_class = 'medium' %} {% elif cvss_f >= 0.1 %}{% set cvss_class = 'low' %} {% else %}{% set cvss_class = 'info' %} {% endif %} {% if folder_path %}{% endif %} {% endfor %}
CVSS KEV Severity Reachability CVE ID Description Component Group Component VersionFolderProject Project Version Exploit Maturity # Signal cats # In-the-wild CWE CVSS v3 Vector FS Link
{{ row['Project Name'] }}
{% if cvss_f > 0 %}{{ "%.1f"|format(cvss_f) }}{% else %}{{ cvss_raw if cvss_raw is not none else '' }}{% endif %} {% if row.get('KEV') == 'Yes' %}Yes{% endif %} {% set sev = row.get('Severity', '') %} {% if sev %} {{ sev }} {% endif %} {% set rlabel = row.get('Reachability') or 'UNKNOWN' %} {{ rlabel }} {% if row['CVE ID'] and row['CVE ID'] != 'N/A' %} {% if row['CVE ID'].startswith('GHSA-') %} {{ row['CVE ID'] }} {% elif row['CVE ID'].startswith('PYSEC-') %} {{ row['CVE ID'] }} {% else %} {{ row['CVE ID'] }} {% endif %} {% else %} {{ row['CVE ID'] }} {% endif %} {{ row.get('Description', '') }} {{ row.get('Component Group', '') }} {{ row['Component'] }} {{ row['Component Version'] }}{{ row.get('Folder', '') }}{{ row['Project Name'] }} {{ row['Project Version'] }} {{ row.get('Exploit Maturity', '') }} {{ row['# exploit signal categories'] }} {{ row['# in-the-wild exploitation signals'] }} {{ row['CWE'] }} {{ row.get('CVSS v3 Vector', '') }} {% if row.get('FS Link') %} View {% endif %}
{% else %}

No findings found

No security findings match the current criteria.

{% endif %}
{% if render_mode != 'fragment' %} {{ fs.status_bar(items=[ "Recipe: Findings by Project", "Rows: " ~ ((data | length) | string), generated_at | default(''), ], version='fs-report ' ~ (fs_report_version | default('dev'))) }} {% endif %} {% if render_mode != 'fragment' %} {% endif %}