{% extends "base.html" %} {% block title %}Voxint — review transcript {{ run.id.hex[:8] }}{% endblock %} {% block body %}

← workbench

Review transcript {{ run.id.hex[:8] }}

{{ run.media_item.source_path }}

{% if token %}

Claimed by you — verify and edit are enabled.

{% else %}

Not claimed by this tab — verifying and editing are disabled. Claim this run in the workbench to review.

{% endif %}

Read-only transcript (raw ASR evidence, all variants).

{% if not lines %}

No transcript segments for this run.

{% else %} {# Island mount (issue #53): the review-stepper hydrates the verify-and-advance loop + inline edit over this fallback. JS-off, the list below is fully usable: each unverified segment carries a plain verify form that POSTs and redirects back here (the write route content-negotiates). Inline TEXT editing needs the island — stated honestly, never faked. #}

{{ progress.verified }} of {{ progress.total }} segments verified.

{% for ln in lines %} {% set idx = palette.get(ln.diarization_label) %} {% set uncertain = ln.confidence is not none and ln.confidence < low_confidence_threshold %}

[{{ "%.2f"|format(ln.start_seconds) }}–{{ "%.2f"|format(ln.end_seconds) }}] {% if uncertain %}uncertain{% endif %} {% if ln.verified %}verified{% endif %} {% if ln.corrected %}edited{% endif %} {% if ln.diarization_label %}{{ ln.diarization_label }}{% endif %} {% if ln.speaker != ln.diarization_label %}{{ ln.speaker }}:{% endif %} {{ ln.text }} {% if token and ln.segment_id and not ln.verified %}

{% endif %}

{% endfor %}
{% endif %} {% endblock %}