What's new in v0.34.0
Added
- Auto-enroll near-miss evidence (#434). Every auto-enrollment decision now persists per-label diagnostic data (similarity, margin, vote agreement, top candidate, roster size) in a new
auto_enroll_evidencetable. Previously this evidence was computed and discarded, making threshold tuning guesswork. - Speaker roster dedup CLI (#432).
voxint speakers dedupreports probable duplicate speakers using embedding cosine similarity and optionally merges safe pairs. Dry-run by default. - Post-batch reconcile CLI (#430).
voxint speakers reconcilere-derives speaker proposals for runs that were matched against a smaller roster than today. Reports a semantic before/after diff. Dry-run by default with explicit--apply. - Restart preflight checks (#422). Restarting a completed run now checks for adjudication work that would be invalidated. Segment-scope rulings block restart; label-scope rulings warn with a required acknowledgment checkbox.
- Feature flag dependency nesting (#406). Dependent flags are visually nested under prerequisites in Settings, disabled when prerequisites are off, and preserved on save.
- Operator feedback when invariant blocks a flag reset (#404). Plain-language notice instead of a silent redirect.
Fixed
- Watch-folder batch cap prevents model-service flooding (#418). Each sweep now submits at most
WATCH_FOLDER_BATCH_SIZEfiles (default 8). - Saturation errors no longer exhaust the retry budget (#418). 503s from model services are classified as saturation and excluded from
STAGE_MAX_ATTEMPTS. - Settings compat routes now reconcile switch state (#446). Five legacy POST routes that bypassed
_reconcile_switchesare fixed.
Install / upgrade
# Docker (recommended)
docker compose pull
# pip
pip install voxint==0.34.0Full changelog: https://github.com/bengizmo/voxint/blob/main/CHANGELOG.md