{% extends "base.html" %} {% block title %}Compare Traces - Memorizz{% endblock %} {% block head %}{% endblock %} {% block content %} {% from '_ui.html' import page_header, observability_tabs, empty_state %} {% from '_fmt.html' import tape, count %} {{ page_header('Compare recorded traces', 'Compare operations, source references, artifacts, parser results and delivery evidence. No actions are replayed.', 'Operations', nav=observability_tabs('compare', selection_urls)) }} {{ tape(compare_tape, 'Trace comparison summary') }}
{% for key, value in selection_urls.params.items() %}{% if key not in ['agent_id', 'thread_id'] %}{% endif %}{% endfor %}
{% if comparison %}

Evidence coverage

Baseline: {{ comparison.baseline.headline }} ({{ count(comparison.baseline.normalized_events) }} events; {{ count(comparison.baseline.bundle_count) if comparison.baseline.bundle_count is not none else 'unknown' }} bundles). Candidate: {{ comparison.candidate.headline }} ({{ count(comparison.candidate.normalized_events) }} events; {{ count(comparison.candidate.bundle_count) if comparison.candidate.bundle_count is not none else 'unknown' }} bundles).

Root-local source totals use recorded event provenance. Deduplication and normalization diagnostics may describe the parent query, not an individual root.

{{ comparison.warning }}

Diagnostic differences

Only in baseline
{{ comparison.findings.only_in_baseline|join(', ') or 'None observed' }}
Only in candidate
{{ comparison.findings.only_in_candidate|join(', ') or 'None observed' }}
In both
{{ comparison.findings.in_both|join(', ') or 'None observed' }}
{% for category, change in comparison.changes.items() %}
{{ category|capitalize }} {{ change.removed|length }} removed structures ยท {{ change.added|length }} added structures
{% for entry in change.removed %}{% endfor %} {% for entry in change.added %}{% endfor %}
SideCountCaptured structure (content-free)
Baseline only{{ count(entry.count) }}
{{ entry.value|tojson(indent=2) }}
Candidate only{{ count(entry.count) }}
{{ entry.value|tojson(indent=2) }}
{% endfor %} {% else %} {{ empty_state('Nothing compared yet', 'Enter an agent and two root trace IDs. From a selected trace, the Compare traces tab carries its root in as the baseline.') }} {% endif %} {% endblock %}