{% extends "base.html" %}
{% from "fragments/_chips.html" import chip %}
{% block title %}Voxint — {{ detail.name }}{% endblock %}
{% block cb_breadcrumb %}projects / {{ detail.name }}{% endblock %}
{% block cb_summary %}{{ chip("archived" if detail.archived_at else "active") }}{% endblock %}
{% block cb_actions %}
{% if not detail.archived_at %}
{% if shell.can_write %}
Rename
…
…
{{ trends.date_provenance.label }}
Trends appear once recordings span more than one day.
{{ trends.date_provenance.label }}
{{ trends.date_provenance.label }}
This project is archived: its settings are read-only, and new recordings in its folders no longer use its vocabulary or corrections. Existing quotes can still be edited. Unlinking a folder removes it from this project's views, and restoring the project does not relink it. Restore it to edit settings again.
{% endif %} {% if error %}{{ error }}
{% endif %} {# The fields this project actually overrides, named so the supersede copy never claims blanket replacement when only one field is set (ADR 0002 per-field). #} {% set own_fields %}{% if detail.has_own_vocabulary and detail.has_own_corrections %}vocabulary and corrections{% elif detail.has_own_vocabulary %}vocabulary{% elif detail.has_own_corrections %}corrections{% endif %}{% endset %} {% if assigned %}
Assigned {{ assigned.path }} to this project.
{% if assigned.domain_pack %}
{% if detail.has_own_config %}
This project now applies its own {{ own_fields }} instead of the folder's "{{ assigned.domain_pack }}" pack for its recordings; the pack still supplies everything else.
{% else %}
The folder's "{{ assigned.domain_pack }}" pack keeps applying until this project sets its own vocabulary or corrections.
{% endif %}
{% endif %}
Enrichment covers {{ ec.entity_runs }} of {{ ec.total_runs }} recordings for entities, {{ ec.topic_runs }} of {{ ec.total_runs }} for topics. {% if ec.entity_runs == 0 and ec.topic_runs == 0 %} Enable run enrichment in Settings to see themes. {% endif %}
{% endif %} {% if not insights.entities and not insights.topics and (ec.entity_runs or ec.topic_runs) %}Enrichment ran on this project's recordings but found no topics or entity mentions to report.
{% endif %} {% if insights.entities|length >= 5 %}| {% for rec in insights.coverage.recordings %} | {{ rec.title[:20] }} | {% endfor %}
|---|---|
| {% if spk.name %}{{ spk.name }}{% else %}Unnamed{% endif %} | {% for rec in insights.coverage.recordings %} {%- set cell_key = spk_idx|string ~ "," ~ loop.index0|string -%}{% if cell_key in coverage_set %}● {% else %}{% endif %} | {% endfor %}
Showing a subset of speakers and recordings.
{% endif %}This project has {{ detail.speakers|length }} speaker{{ "s" if detail.speakers|length != 1 else "" }} but no enrichment data yet. Enable run enrichment in Settings to see entities, topics, and speaker coverage here.
{% elif detail.folders %}No completed recordings yet. Once recordings in this project finish processing, you'll see entities, topics, and speaker coverage here.
{% else %}Link a media folder to this project to get started. Completed recordings will produce entities, topics, and speaker coverage here.
{% endif %}{{ quote_board_props.total }} saved quote{{ "s" if quote_board_props.total != 1 else "" }}.
{% else %}Save quotes from Explore to build your evidence board.
{% endif %}names and terms Voxint should spell correctly in this project
{% if detail.vocabulary is not none and detail.vocabulary %}No terms (explicitly set to none).
{% else %}Inheriting from the folder pack or global settings.
{% endif %} {% if not detail.archived_at %} {% if vocabulary_error %}{{ vocabulary_error }}
{% endif %} {% if shell.can_write %}Applies to the next run — finished transcripts don't change.
{% else %}Inactive while archived.
{% endif %}fix a repeated mishearing once, it's fixed everywhere
{% if not detail.archived_at and detail.learn_corrections %}When on, Voxint watches your transcript edits in this project and suggests a rule once the same fix appears in 3 segments. Suggestions never apply until you accept them. Turning this off stops watching; accepted rules stay.
{% endif %} {% if not detail.archived_at and shell.can_write %} {% if corrections_error %}{{ corrections_error }}
{% endif %}{{ rule.match }}
→
{{ rule.replace }}
{% if detail.learned_counts and rule.id in detail.learned_counts %}learned x{{ detail.learned_counts[rule.id] }}{% else %}manual{% endif %}
No correction rules (explicitly none).
{% else %}Inheriting from the folder pack or global corrections.
{% endif %} {% if not detail.archived_at and shell.can_write %}{{ s.match }}
→
{{ s.replace }}
{{ s.count }} segments
{% if not detail.archived_at %}
{% endif %}