voice{{ "s" if unresolved_voices != 1 else "" }} without a nameacross recordings waiting for review
{# #315: link where these voices can actually be resolved — the review
queue sorted by unresolved count — not /speakers, which only lists
already-known people and never shows unnamed voices. #}
{% if unresolved_voices %}→{% endif %}
{{ failed_runs }}
failed runs{% if failed_runs %}stopped with an error{% else %}nothing broke{% endif %}
{% for value, label in windows %}
{{ label }}
{% endfor %}
{% if window_invalid %}
Unrecognized window value, showing the last day.
{% endif %}
{{ counts.media_added }}
MEDIA ADDED
{{ counts.runs_started }}
RUNS
{{ counts.speakers_enrolled }}
SPEAKERS IDENTIFIED
{{ counts.minutes_transcribed }}min
TRANSCRIBED
RECENT
{% if activity %}
{% for entry in activity %}
{# Grouped failures carry a .count and .item; single items are ActivityItem directly. #}
{% set is_group = entry.count is defined and entry.count > 1 %}
{% set item = entry.item if is_group else entry %}
{{ format_clock_time(item.at, now=now) }}
{% if is_group %}
{% set nerr = normalize_error(item.error) %}
{{ entry.count }} runs failed: {{ nerr.label if nerr else "unknown error" }}
{% if nerr and nerr.hint %} {{ nerr.hint }}{% endif %}
{% elif item.kind == "run_completed" %}
Processing finished: {{ friendly_media_label(item.title, item.source_path) }}{% if item.unresolved_count %} {{ needs_review_chip(item.unresolved_count) }}{% endif %}
{% elif item.kind == "run_failed" %}
{% set nerr = normalize_error(item.error) %}
Processing failed: {{ friendly_media_label(item.title, item.source_path) }}
{% if nerr %} {{ nerr.label }}.{% if nerr.hint %} {{ nerr.hint }}{% endif %}{% endif %}
{% if nerr and nerr.raw != nerr.label %}
Details