{% extends "base.html" %} {% from "fragments/export_menu.html" import export_menu %} {% from "fragments/review_journey.html" import review_journey %} {% block title %}Voxint — review {{ run_source_title(run) }}{% endblock %} {% block body %}

← queue

{# Review header card (issue #92): the run identity, the claim state, and the journey's actions in one surface. The claim wording is contract text the integration tests assert on — keep it verbatim. #}
{# Friendly run identity + the two-step sequence (issue #117 Phase B). This is Step 1 ("who is speaking"); the fragment is static and shared with the transcript page — it owns no progress counter and no actions. #} {{ review_journey(run, 1) }} {% if token %}

Claimed by you.

{# Step 1 → Step 2 (issue #117 Phase B): the one dominant Continue. Carries the live claim token so the transcript stepper writes without re-claiming (a fresh claim would kill this tab's token). #} Continue to checking the words →
{% else %}

Not claimed by this tab — decisions are disabled.

{% endif %}
{{ export_menu(run) }} {# Workbench-player island (issues #49 + #55). Mounted OUTSIDE #labels so it survives every htmx innerHTML swap of the decision cards. It owns the