{# Graphical job view: header + overall bar + phase stepper + collapsible log. Replaces #jobview; self-repolls every 1s WHILE running, drops the trigger once done. #} {% set indeterminate = (not prog.determinate) and job.running %} {% set fill = 30 if indeterminate else (prog.overall if prog.overall is not none else 100) %}
{{ job.status }} {{ job.task }} {{ job.target }} ⏱ {{ elapsed }} {% if job.exit_code is not none %}exit {{ job.exit_code }}{% endif %} {% if job.running %}
{% endif %}
{% if prog.overall is not none and not indeterminate %} {{ prog.overall }}% {% endif %}
{% if prog.has_phases %}
    {% for ph in prog.phases %}
  1. {%- if ph.state == "done" %}✓{% elif ph.state == "failed" %}✕{% elif ph.state == "active" %}●{% endif -%} {{ ph.label }}
  2. {% endfor %}
{% endif %}
Log
{{ log_text }}{% if not log_text %}(no output yet){% endif %}