{% if filtered_count > shown_count %}

Showing newest {{ shown_count }} of {{ filtered_count }} matching jobs. Increase rows or filter to narrow the table.

{% endif %} {% if jobs %} {# The scroll box goes INSIDE #queue-table, not around it: hx-swap="outerHTML" replaces #queue-table with this whole fragment, so a wrapper placed around the hx element would be re-emitted inside the surviving old one and nest a level deeper on every 3 s poll. Around the table, it is regenerated with the rest of the fragment and stays exactly one deep. #}
{% for job in jobs %} {% set spec = job.spec %} {% endfor %}
id{{ sort_label('id') }} state{{ sort_label('state') }} host{{ sort_label('host') }} sched{{ sort_label('sched') }} cpus{{ sort_label('cpus') }} mem MB{{ sort_label('mem') }} wall s{{ sort_label('wall') }} submitted (UTC){{ sort_label('submitted') }} diagnosis{{ sort_label('diagnosis') }} submitter{{ sort_label('submitter') }} command{{ sort_label('command') }}
{{ spec.id }} {{ spec.state }} {{ job.queue_host }} {{ job.scheduler_phase if spec.scheduler_target else "-" }} {{ spec.cpus }} {{ spec.mem_mb if spec.mem_mb else "-" }} {{ spec.wall_time_seconds if spec.wall_time_seconds else "-" }} {{ spec.submitted_at[:19] | replace("T", " ") }} {{ job.diagnosis_summary or "-" }} {{ spec.submitter or "-" }} {{ spec.command | join(" ") | truncate(80, true) }}
{% else %}

No jobs.

{% endif %}