{% extends "base.html" %} {% block title %}q-ai — Compare Runs{% endblock %} {% block content %}
Back to History

Run Comparison

{{ left_run.status.name | format_status }} {{ left_display }}
{% if left_target %}
Target: {{ left_target.name }}{% if left_target.uri %} {{ left_target.uri }}{% endif %}
{% endif %}
Started: {{ left_run.started_at.strftime('%Y-%m-%d %H:%M') if left_run.started_at else "—" }}
Duration: {{ left_duration or "—" }}
ID: {{ left_run.id[:12] }}
{{ right_run.status.name | format_status }} {{ right_display }}
{% if right_target %}
Target: {{ right_target.name }}{% if right_target.uri %} {{ right_target.uri }}{% endif %}
{% endif %}
Started: {{ right_run.started_at.strftime('%Y-%m-%d %H:%M') if right_run.started_at else "—" }}
Duration: {{ right_duration or "—" }}
ID: {{ right_run.id[:12] }}

Module Coverage

Left
{% for mod in left_modules %} {{ mod }}{% if mod not in right_modules %} (only){% endif %} {% endfor %} {% if not left_modules %} No modules {% endif %}
Right
{% for mod in right_modules %} {{ mod }}{% if mod not in left_modules %} (only){% endif %} {% endfor %} {% if not right_modules %} No modules {% endif %}

Finding Diff

{{ left_only | length }} Left only
{{ common | length }} Common
{{ right_only | length }} Right only
{% if left_only %}

Left Only ({{ left_only | length }})

{% for f in left_only %} {% endfor %}
SeverityModuleCategoryTitle
{{ f.severity.name }} {{ f.module }} {{ f.category }} {{ f.title }}
{% endif %} {% if common %}

Common ({{ common | length }})

{% for f in common %} {% endfor %}
SeverityModuleCategoryTitle
{{ f.severity.name }} {{ f.module }} {{ f.category }} {{ f.title }}
{% endif %} {% if right_only %}

Right Only ({{ right_only | length }})

{% for f in right_only %} {% endfor %}
SeverityModuleCategoryTitle
{{ f.severity.name }} {{ f.module }} {{ f.category }} {{ f.title }}
{% endif %} {% if not left_only and not right_only and not common %}

No findings in either run.

{% endif %}
{% endblock %}