{% extends "base.html" %} {% block title %}Run {{ run_id[:8] }} — Observability{% endblock %} {% block content %}
| Branch | Duration | {% if g.has_join %}Wait at join | {% endif %}|
|---|---|---|---|
| {{ b.root_agent }} {% if b.spans|length > 1 %}→ {{ b.spans|length - 1 }} more{% endif %} | {{ "%.1f"|format(b.duration_ms/1000) }}s | {% if g.has_join %}{% if b.branch_id == bb.branch_id %}—{% else %}+{{ "%.1f"|format((bb.duration_ms - b.duration_ms)/1000) }}s{% endif %} | {% endif %}{% if b.branch_id == bb.branch_id %} ⏱ Bottleneck {% elif g.has_join %} waiting {% endif %} |
| What we check | This run | Normal range | Verdict |
|---|---|---|---|
| {{ v.name|replace('_', ' ') }} | {% if v.name == 'agent_sequence' %} {% set seq = v.current %} {% if seq|length > 2 %} {{ seq[0] }} → … → {{ seq[-1] }} {% else %} {{ seq|join(' → ') }} {% endif %} {% else %}{{ v.current }}{% endif %} | {{ v.note }} | {% if v.drifted %}{{ v.label|replace('_', ' ') }}{% else %}within range{% endif %} |
| signal | this run | avg of prior | Δ% | verdict |
|---|---|---|---|---|
| {{ v.signal|replace('_', ' ') }} | {{ v.current }} | {{ v.baseline }} | {{ "%+.1f"|format(v.delta_pct) }}% | {% if v.drifted %}outside range{% else %}in range{% endif %} |
| Overall | v{{ vreport.base_version }} | v{{ vreport.target_version }} | Δ | Consistency | Verdict |
|---|---|---|---|---|---|
| {{ v.signal }} | {% if v.signal == 'typical route' %}{{ v.base|join(' → ') }}{% else %}{{ v.base }}{% endif %} | {% if v.signal == 'typical route' %}{{ v.target|join(' → ') }}{% else %}{{ v.target }}{% endif %} | {% if v.signal != 'typical route' %}{{ "%+.1f"|format(v.delta_pct) }}{% if v.signal not in ['avg turns'] %}%{% endif %}{% else %}—{% endif %} | {{ "%.0f"|format(v.consistency*100) }}% | {% if v.status == 'drift' %}Drift {% elif v.status == 'potential' %}Potential {% else %}stable{% endif %} |
| {{ v.signal }} | v{{ vreport.base_version }}: {{ v.base }} | v{{ vreport.target_version }}: {{ v.target }} | {{ "%+.1f"|format(v.delta_pct) }}% | {{ "%.0f"|format(v.consistency*100) }}% | {% if v.status == 'drift' %}Drift {% elif v.status == 'potential' %}Potential {% else %}stable{% endif %} |
| Tool | By | Calls | Fail |
|---|---|---|---|
{{ tool }} |
{% for agent, dist in metrics.tool_distribution_per_agent.items() %}{% if tool in dist %}{{ agent }}{% endif %}{% endfor %} | {{ freq }} | {{ metrics.tool_failure_count }} |
| Outcome | {{ termination_short }} |
| Error spans | {{ metrics.error_span_count }} |
| Tool failures | {{ metrics.tool_failure_count }} |
| Repeated agents | {% if metrics.flagged_loops %} {% for p in metrics.reentry_patterns %}{% if p.flagged %}{{ p.pattern }} {% endif %}{% endfor %} (unexpected re-entry) {% elif metrics.loop_reentry_count %} {{ metrics.loop_reentry_count }} (requested) {% else %}none{% endif %} |
| Busiest agent | {{ "%.0f"|format(metrics.token_concentration*100) }}% of all tokens |
| Wall-clock | {{ "%.1f"|format(metrics.total_wall_clock_ms/1000) }}s · sum of agent time {{ "%.1f"|format(metrics.sum_of_span_durations/1000) }}s |
| Parallelism factor | {{ "%.2f"|format(metrics.parallelism_factor) }}× {% if metrics.parallelism_factor >= 1.5 %} — agents ran in parallel {% elif metrics.parallelism_factor > 1.1 %} — some overlap {% else %} — sequential {% endif %} |
| Parallel groups (DAG) | {% if parallel_groups %} {{ parallel_groups|length }} {% else %} none {% endif %} |