{% if domain %}{% endif %} License Report - Finite State Report {% include "_standalone_shell.html" %}
{% include "_default_logo.html" %}

License Risk Report

{{ scope_label | default('All Projects') }} — Software License Analysis
{# Defensive defaults — keeps the template renderable even when the upstream transform short-circuited and never populated these (e.g. empty raw_data path before the data_transformer fix landed). Mirrors component_remediation_package.html. Belt-and-suspenders for CST-747. #} {% set category_summary = category_summary | default({}) %} {% if not category_summary is mapping %}{% set category_summary = {} %}{% endif %} {% set risk_pie = risk_pie | default({'labels': [], 'data': [], 'backgroundColor': []}) %} {% set license_table = license_table | default([]) %} {% set detail_table = detail_table | default([]) %} {% set total_components = total_components | default(0) %} {% set total_licenses = total_licenses | default(0) %} {% set no_license_count = no_license_count | default(0) %}
Report: License Report | Generated: {{ generated_at }} | Scope: {{ scope_label | default('All Projects') }} | Components: {{ total_components | default(0) }}
Total Components
{{ total_components | default(0) }}
Unique Licenses
{{ total_licenses | default(0) }}
Strong Copyleft
0 %}style="color: #d32f2f;"{% endif %}>{{ category_summary.get('Strong Copyleft', 0) }}
Weak Copyleft
0 %}style="color: #f57c00;"{% endif %}>{{ category_summary.get('Weak Copyleft', 0) }}
Permissive
{{ category_summary.get('Permissive', 0) }}
No License
0 %}style="color: #f57c00;"{% endif %}>{{ no_license_count | default(0) }}
{% if risk_pie and risk_pie.labels | default([]) | length > 0 %}

License Risk Distribution

Components grouped by license risk category.

Risk Summary

Breakdown of license risk categories across all components.

{% for cat in ['Strong Copyleft', 'Weak Copyleft', 'Proprietary/Restricted', 'Unknown', 'Permissive'] %} {% set count = category_summary.get(cat, 0) %} {% if count > 0 %} {% endif %} {% endfor %}
CategoryCount%
{{ cat }} {{ count }} {{ ((count / total_components) * 100) | round(1) }}%
{% endif %} {% if license_table and license_table | length > 0 %}

License Breakdown

{% for row in license_table %} {% endfor %}
License Risk Category Components Projects
{{ row.license_name if row.license_name else '(No License)' }} {{ row.risk_category }} {{ row.component_count }} {{ row.projects }}
{% endif %} {% if detail_table and detail_table | length > 0 %}

Component Detail

One row per component. Use this to find every project and component carrying a given license. Full data is also written to License Report_Detail.csv and the Detail sheet of the XLSX file.

{% for row in detail_table %} {% endfor %}
License Risk Category Project Component Version
{{ row.License if row.License else '(No License)' }} {{ row['Risk Category'] }} {{ row.Project }} {{ row.Component }} {{ row.Version }}
{% endif %} {% include "_default_footer.html" %}
{% include '_action_buttons.html' %}