{% extends "base.html" %} {% from "_macros.html" import best_badge, best_badge_dual, score_view_toggle, submission_badge, submission_badge_dual, agent_chip, model_chip, run_status, download_icon %} {% block title %}{{ run.run_id }} · {{ run.task }} · SForge{% endblock %} {% block content %} {# ── Breadcrumb ── #}
← runs / {{ run.task }} / {{ run.run_id }}
{# ── Header ── #}

{{ run.run_id }}

{{ run.task }} {{ agent_chip(run.agent) }} {{ model_chip(run.model) }} {{ run_status(run) }} {% if run.score_direction == "minimize" %}minimize{% endif %}
{% if has_trajectory %} Trajectory → {% endif %}
{{ download_icon("/run/" ~ run.run_id ~ "/" ~ run.task ~ "/download", "task .tar.gz", "Download entire task dir (logs + submissions + final archive) as .tar.gz") }} {{ download_icon("/run/" ~ run.run_id ~ "/" ~ run.task ~ "/agent-output", "agent log", "Download raw agent_output.txt (the agent's full conversation log)") }}
{% if run.has_score %}Best score{% else %}Best pass rate{% endif %}
{{ best_badge_dual(run) }} {% if run.best_round %}at {{ run.best_round }}{% endif %}
Rounds
{{ run.total_rounds }}
Runtime
{{ format_duration(run.runtime_seconds) }}
Archive
{%- if run.archive_size_bytes -%}{{ "%.1f"|format(run.archive_size_bytes/1024) }} KB {%- else -%}{%- endif -%}
{# ── Evolution Timeline ── #} {% set has_auto = run.submissions | selectattr("kind", "equalto", "auto") | list | length > 0 %} {% if run.submissions %}

Evolution Timeline

{% if run.has_rescaled %}{{ score_view_toggle() }}{% endif %} {% if has_auto %} {% endif %}
{% if has_auto %} agent auto {% endif %} scroll to zoom · drag to pan
{% endif %} {# ── Submissions (expandable rows with inline diff) ── #}

Submissions

{{ run.submissions|length }}
{% if run.submissions %}
{% for s in run.submissions %}
{{ s.round_label }} {{ s.kind }} {{ submission_badge_dual(s, run) }} {% if s.round_label == run.best_round %}best{% endif %} {%- if s.kind == "game" -%}{{ s.runtime_seconds|int }} moves {%- else -%}{{ s.passed }}/{{ s.total_tests }} passed {%- endif -%} {{ format_duration(s.runtime_seconds) }}
Loading diff...
{% endfor %}
{% else %}
No submissions.
{% endif %}
{# ── Diagnostics ── #}

Diagnostics

{% if has_trajectory %} raw trace trace JSON {% endif %} {% if has_log %}run_agent.log{% endif %} {% if has_daemon_log %}daemon.log{% endif %} {% if has_prompt %}prompt{% endif %}
{% if log_tail %}
Harness log
{{ log_tail }}
{% endif %} {% if daemon_tail %}
Auto-eval daemon log
{{ daemon_tail }}
{% endif %} {% if not log_tail and not daemon_tail %}
No log files found.
{% endif %}
{{ run.path }}
{# ── ECharts ── #} {% if run.submissions %} {% endif %} {% endblock %}