{% extends "base.html" %} {% block title %}Compare{% endblock %} {% block content %} {% if error %}

{{ error }}

← Back to runs
{% else %}
← All runs

Compare runs

{# ── Run summaries side by side ── #}
Run A
{{ run_a.name }}
{{ result.duration_a_ms|round|int }}ms · {{ run_a.started_at.strftime('%H:%M:%S') }} {% if run_a.status == 'ok' %} ok {% elif run_a.status == 'error' %} error {% else %} running {% endif %}
Run B
{{ run_b.name }}
{{ result.duration_b_ms|round|int }}ms · {{ run_b.started_at.strftime('%H:%M:%S') }} {% if run_b.status == 'ok' %} ok {% elif run_b.status == 'error' %} error {% else %} running {% endif %}
{# ── Stats strip ── #}
{% if result.only_in_a == 0 and result.only_in_b == 0 %} 0 changes — these runs are structurally identical {% else %} {% if result.only_in_a > 0 %} -{{ result.only_in_a }} span{{ 's' if result.only_in_a != 1 else '' }} {% endif %} {% if result.only_in_b > 0 %} +{{ result.only_in_b }} span{{ 's' if result.only_in_b != 1 else '' }} {% endif %} {{ result.in_both }} unchanged {% endif %} · A {{ result.duration_a_ms|round|int }}ms B {{ result.duration_b_ms|round|int }}ms {% if dur_delta_pct is not none %} {% if dur_delta_pct > 0 %} (+{{ dur_delta_pct }}%) {% elif dur_delta_pct < 0 %} ({{ dur_delta_pct }}%) {% else %} (0%) {% endif %} {% endif %} {% if result.cost_a_usd is not none and result.cost_b_usd is not none %} · cost A ${{ "%.4f"|format(result.cost_a_usd) }} → B ${{ "%.4f"|format(result.cost_b_usd) }} {% endif %} {% if result.tokens_a is not none and result.tokens_b is not none %} · tokens {{ result.tokens_a }} → {{ result.tokens_b }} {% endif %}
{# ── Two waterfalls side by side ── #}
{# ── Run A waterfall ── #}
0 {{ (max_duration_ms * 0.25)|round|int }}ms {{ (max_duration_ms * 0.5)|round|int }}ms {{ (max_duration_ms * 0.75)|round|int }}ms {{ max_duration_ms }}ms
{% for sp in waterfall_a %}
{{ sp.name }}
{% else %}

No spans in run A.

{% endfor %}
{# ── Run B waterfall ── #}
0 {{ (max_duration_ms * 0.25)|round|int }}ms {{ (max_duration_ms * 0.5)|round|int }}ms {{ (max_duration_ms * 0.75)|round|int }}ms {{ max_duration_ms }}ms
{% for sp in waterfall_b %}
{{ sp.name }}
{% else %}

No spans in run B.

{% endfor %}
{# ── Detail panels side by side ── #}

← Click a span in A to inspect

← Click a span in B to inspect

{% endif %} {% endblock %}