{% extends "base.html" %} {% block content %}

Summary

Static analysis results for the current project snapshot.

{% if data.summary %} {% else %}

No summary provided.

{% endif %}
{# Phase 2.5: Assets & Media Section #} {% if data.assets and data.assets.summary %}

đŸ“Ļ Assets & Media

{{ data.assets.summary.total_files or 0 }}
Total Assets
{{ data.assets.summary.images or 0 }}
Images
{{ data.assets.summary.audio or 0 }}
Audio
{{ data.assets.summary.video or 0 }}
Video
{{ data.assets.summary.fonts or 0 }}
Fonts
{# Group issues by severity #} {% set errors = data.assets.issues | selectattr('severity', 'equalto', 'error') | list %} {% set warns = data.assets.issues | selectattr('severity', 'equalto', 'warn') | list %} {% set infos = data.assets.issues | selectattr('severity', 'equalto', 'info') | list %}
{# Errors #}

Missing Assets (Errors) ({{ errors | length }})

{% if errors %} {% for issue in errors %} {% endfor %}
SeverityRuleMessageLocation
{{ issue.severity }} {{ issue.rule_id }} {{ issue.message }} {% if issue.extra and issue.extra.suggestions %}
Suggestions: {{ issue.extra.suggestions | join(', ') }} {% endif %} {% if issue.extra and issue.extra.file_size %}
File size: {{ (issue.extra.file_size / 1024) | int }} KB {% endif %}
{{ issue.file }}:{{ issue.line }}
{% else %}

✓ No missing assets (errors) found

{% endif %} {# Warnings #}

Typo Warnings ({{ warns | length }})

{% if warns %} {% for issue in warns %} {% endfor %}
SeverityRuleMessageLocation
{{ issue.severity }} {{ issue.rule_id }} {{ issue.message }} {% if issue.extra and issue.extra.suggestions %}
Suggestions: {{ issue.extra.suggestions | join(', ') }} {% endif %} {% if issue.extra and issue.extra.file_size %}
File size: {{ (issue.extra.file_size / 1024) | int }} KB {% endif %}
{{ issue.file }}:{{ issue.line }}
{% else %}

✓ No typo warnings found

{% endif %} {# Info #}

Unused Assets (Info) ({{ infos | length }})

{% if infos %} {% for issue in infos %} {% endfor %}
SeverityRuleMessageLocation
{{ issue.severity }} {{ issue.rule_id }} {{ issue.message }} {% if issue.extra and issue.extra.suggestions %}
Suggestions: {{ issue.extra.suggestions | join(', ') }} {% endif %} {% if issue.extra and issue.extra.file_size %}
File size: {{ (issue.extra.file_size / 1024) | int }} KB {% endif %}
{{ issue.file }}:{{ issue.line }}
{% else %}

✓ No unused assets (info) found

{% endif %}
{% endif %} {# Phase 7: Localization Coverage (v0.7.7) #} {% if data.localization and data.localization.enabled %}

🌐 Localization Coverage

Translation completeness across {{ data.localization.total_languages }} language(s)

{{ data.localization.total_source_strings }}
Source Strings
{{ data.localization.total_languages }}
Languages
{{ data.localization.avg_coverage_pct | round(1) }}%
Avg Coverage
{{ data.localization.issues.missing }}
Missing
{{ data.localization.issues.orphaned }}
Orphaned
{{ data.localization.issues.mismatch }}
Mismatches
{# Per-language coverage breakdown #}

Coverage by Language

{% for lang, coverage_pct in data.localization.coverage_by_language.items() %}
{{ lang }} {{ coverage_pct | round(1) }}%
{% endfor %}
{# Localization issues breakdown #}

Localization Issues Overview

Missing translations: {{ data.localization.issues.missing }} | Orphaned: {{ data.localization.issues.orphaned }} | Length mismatches: {{ data.localization.issues.mismatch }}

💡 View detailed locale data in .branchpy/artifacts/locales_index.json

{% endif %} {# Phase 8: Custom Rules & Project Policies (v0.7.8) #} {% if data.customRules and data.customRules.enabled %}

📋 Custom Rules & Project Policies

User-defined validation rules from .branchpy/rules_custom.yml

Total Violations
{{ data.customRules.total_violations }}
❌ Errors
{{ data.customRules.by_severity.ERROR | default(0) }}
âš ī¸ Warnings
{{ data.customRules.by_severity.WARNING | default(0) }}
â„šī¸ Info
{{ data.customRules.by_severity.INFO | default(0) }}
{# Violations by category #}

Violations by Category

{% for category, count in data.customRules.by_category.items() %}
{{ category }} {{ count }}
{% endfor %}
{# Top violations preview (first 10) #}

Recent Violations

{% for violation in data.customRules.violations[:10] %}
{{ violation.rule_id }} {{ violation.severity }}
{{ violation.message }}
{{ violation.category }} Line {{ violation.line }}
{% if violation.matched_text %}
{{ violation.matched_text }}
{% endif %}
{% endfor %} {% if data.customRules.total_violations > 10 %}

... and {{ data.customRules.total_violations - 10 }} more violations

{% endif %}

💡 Configure enforcement levels in .branchpy/policy.toml

{% endif %}

Issues

{% if data.issues %} {% for it in data.issues %} {% endfor %}
LevelCodeMessageFile:Line
{{ it.level }} {{ it.code }} {{ it.message }} {{ it.path }}:{{ it.line or "-" }}
{% else %}

No issues found.

{% endif %}
{# Phase 7: Localization Coverage #} {% if data.localization %}
{% include "partials/l10n_coverage.html" %}
{% endif %} {% endblock %}