{% extends "base.html" %} {% block title %}Voxint โ€” adjudication queue{% endblock %} {% block body %}

Adjudication queue

Completed runs with voices still needing a human ruling. Signed in as {{ operator }}.

{% if not entries %}

Nothing to review โ€” every completed run is fully resolved. ๐ŸŽ‰

{% else %} {# Sort control โ€” mirrors the runs.html filter idiom, but the queue has no other query state to preserve, so these are plain links. Default stays "oldest" (FIFO fairness + guided-tutorial continuity). #}

Sort: Oldest first ยท Most voices to resolve

{% for e in entries %} {% set resolved = e.total_labels - e.unresolved_labels %} {% endfor %}
MediaDurationAgeProgressClaimed byAction
{{ friendly_media_label(e.title, e.source_path) }}
{{ e.source_path }}
{{ format_duration(e.duration_seconds) }} {% if e.created_at %}{{ format_age(e.created_at, now=now) }} {% else %}โ€”{% endif %} {# Fills toward done: resolved-of-total, so fuller = closer to finished. The adjacent count text is the primary signal; the slim bar reuses the review-journey .progress-track and is aria-hidden (#93). #}
{{ resolved }} of {{ e.total_labels }} resolved
{{ e.claimed_by or "โ€”" }}
{% endif %} {% endblock %}