{% extends "base.html" %} {% block title %}Run {{ run.name if run else 'Not Found' }} - riff-observe{% endblock %} {% block content %} {% if error %}

{{ error }}

← Back to runs
{% else %}
← Runs

{{ run.name }}

{{ run.status }} Risk: {{ run.risk_score if run.risk_score is not none else '-' }}

Run Details

{{ run.run_id }}
{{ run.project or '-' }}
{{ run.env or '-' }}
{{ run.agent_version or '-' }}
{{ run.ts_start|format_timestamp }}
{{ run.latency_ms|format_duration }}
{{ run.tool_calls or 0 }}
{{ run.model_calls or 0 }}
{{ run.policy_violations or 0 }}
{% if run.eval_tags %}
{% for tag in run.eval_tags %} {{ tag }} {% endfor %}
{% endif %} {% if run.task %}
{{ run.task | tojson(indent=2) }}
{% endif %}

Spans ({{ spans|length }})

{% if spans %}
{% macro render_span(span, depth=0) %}
{{ ' ' * depth }}{% if depth > 0 %}└─{% endif %} {{ span.status }} {{ span.name }} [{{ span.kind }}] {{ (span.ts_end - span.ts_start)|format_duration if span.ts_end else '-' }}
{% if span.attrs %}
{% for key, value in span.attrs.items() %} {{ key }}={{ value }} {% if not loop.last %} · {% endif %} {% endfor %}
{% endif %} {% if span.error_message %}
Error: {{ span.error_message }}
{% endif %}
{% for child in span.children %} {{ render_span(child, depth + 1) }} {% endfor %} {% endmacro %} {% for span in span_tree %} {{ render_span(span) }} {% endfor %}
{% else %}

No spans recorded.

{% endif %}

Events ({{ events|length }})

{% if events %}
{% for event in events %}
{{ event.ts|format_timestamp }} {{ event.type }} {{ event.payload | tojson }}
{% endfor %}
{% else %}

No events recorded.

{% endif %}
{% endif %} {% endblock %}