- Зачем:
- старые результаты решено сохранить до завершения и приемки задачи #46.
- Что:
- архивы задач #41/#42 закреплены как временные и доступные только для чтения;
- стенду #46 запрещено читать архивы или использовать их как основу A/B;
- удаление перенесено на момент после приемки нового отчета.
- Проверка:
- выполнены git diff --check и проверка формулировки в задаче #46.
- Зачем:
- локальные оптимизации каскада не достигли 30%-го порога ускорения;
- старые закрытые хранилища и капсулы не должны стать будущей зависимостью.
- Что:
- собран единый реестр результатов задач #41 и #42;
- опубликовано разложение Ryzen baseline и выбрана архитектурная гипотеза;
- подготовлены самодостаточная спецификация и ready-for-agent задача #46.
- Проверка:
- пройдены self-review и две независимые линии ревью;
- проверены 44 строки реестра, 42 арифметических инварианта и ссылки;
- выполнены ai-text-lint, privacy scan и post-lint guard.
Refs: #45
Зачем:
- Сохранить полный ход проверки гипотез и исключить ненужный повтор старой матрицы.
Что:
- Добавлен ledger этапов W/M/Q/E/C с рецептами, числами и причинами отсева.
- Зафиксированы правила переиспользования результатов и границы повторных прогонов.
- Связана следующая end-to-end карта в задаче #45.
Проверка:
- uv run --no-sync pytest -q (389 passed, 2 skipped).
- Codex taste-review и ai-text-lint: APPROVED.
Зачем:
- Проверить переносимость Intel-handoff на Ryzen и закрыть выбор CPU-профиля.
Что:
- Усилена проверка связи Ryzen-manifest с капсулой и переносимости рецептов.
- Добавлены регрессионные тесты и публичный отчет с исходом new map.
Проверка:
- uv run --no-sync pytest -q (389 passed, 2 skipped).
- uv run --no-sync ruff check src/local_transcriber/benchmark_experiment.py tests/test_benchmark_experiment.py.
Зачем:
- капсула должна содержать каждый вход, названный в manifest
- Intel handoff нужно проверять на Ryzen без сравнения чужого SKU
Что:
- входы manifest связаны с индексом и SHA-256 файлов капсулы
- validate-only финального handoff пропускает только проверку машины
- версии Python, пакетов и экспериментальной сборки по-прежнему обязательны
Проверка:
- uv run pytest -q tests/test_benchmark_experiment.py
- uv run ruff check для изменённых файлов
Зачем:
- часть Intel-стендов не публикует ACPI platform_profile
- balanced-режим на таком стенде доступен через power-profiles-daemon
Что:
- добавлен fallback на powerprofilesctl get
- поведение закреплено тестом
Проверка:
- uv run pytest -q tests/test_benchmark_experiment.py
- uv run ruff check для изменённых файлов
- Зачем:
- нужно оценить локальные ASR-кандидаты для русских встреч с английскими IT-терминами.
- Что:
- собраны первичные данные по GigaAM, Nemotron, Qwen3-ASR, Canary и Cohere.
- разделены известные факты, рабочие гипотезы, рекомендация и неизвестные.
- сопоставлены языки, таймкоды, режимы работы, поставка и лицензии.
- Проверка:
- выполнено горячее ревью документа и git diff --cached --check.
- Зачем:
- один агент не может последовательно работать на двух ноутбуках.
- Что:
- этапы 0-4 закреплены за Intel, этапы 5-6 - за зависимой Ryzen-задачей.
- добавлен проверяемый handoff через отчет, commit и приватную ZIP-капсулу.
- устранен штатный возврат с Ryzen на Intel и ограничен финальный бюджет.
- Проверка:
- `.venv/bin/pytest -q tests/test_diarization_calibration.py tests/test_speaker_diarizer.py tests/test_diarization.py` (61 passed).
- Зачем:
- нужен ограниченный эксперимент для отсева явных проигрышей без полного перебора и лишней точности.
- Что:
- зафиксирована поэтапная матрица проверок на Intel и Ryzen.
- определены пороги скорости, условия качества, контроль памяти и приватности.
- описаны воспроизводимость стенда, QDQ-происхождение данных и правила решения.
- Проверка:
- `.venv/bin/pytest -q tests/test_diarization_calibration.py tests/test_speaker_diarizer.py tests/test_diarization.py` (61 passed).
- Зачем:
- вывод об обычном обновлении должен опираться на проверяемые API и wheel для поддерживаемых сред.
- Что:
- исправлены ссылки на tagged source и уточнены границы manylinux и будущего CPython 3.15.
- зафиксирован smoke test CPython 3.13 и практическая польза обновления.
- вычищены двусмысленные формулировки без изменения фактов и чисел.
- Проверка:
- uv run pytest -q: 334 passed, 2 skipped.
- 23 внешние ссылки отвечают HTTP 200; git diff --check.
- Зачем:
- требовалось определить первый wheel с публичным API для шага окна.
- Что:
- зафиксирована граница 1.13.5/1.13.6 и матрица Python/платформ.
- выбрано обычное обновление и задана точная граница прототипа.
- Проверка:
- git diff --cached --check.
- Зачем:
- исследовательское решение должно однозначно задавать повторное использование эмбеддингов и проверку счетчиков.
- Что:
- выбран внутренний интерфейс подготовки и финализации sherpa-onnx.
- закреплены входы, вариант NME и критерии качества.
- измерения CPU и памяти отделены от будущих гейтов карты.
- Проверка:
- `uv run pytest -q` (334 passed, 2 skipped).
- `git diff --check`.
- 31 внешняя ссылка отвечает HTTP 200.
- Зачем:
- README и backlog должны одинаково и однозначно описывать границы CPU-замеров перед merge.
- Что:
- Замер Ryzen ограничен одной зафиксированной тестовой машиной.
- Из backlog убраны повтор и искусственные противопоставления вокруг целевого SKU.
- Проверка:
- `git diff --check`.
- Зачем:
- Исследование числа говорящих не проходило отдельный Wayfinder-тикет и не должно публиковаться как принятое решение.
- Что:
- Записка об оценке числа говорящих удалена из publication-ветки.
- Проверка:
- `git diff --check`.
- Зачем:
- вопрос тикета требует проверить формы официальных release-графов, а исходная записка опиралась только на экспортные контракты.
- Что:
- зафиксированы реальные формы и CPU smoke-test batch size 2 для WeSpeaker, CAMPPlus и TitaNet.
- уточнены поддержка equal-length batch у CAMPPlus и fallback между S8S8, U8U8 и U8S8.
- Проверка:
- git diff --check.
- Зачем:
- нужно выбрать реалистичный способ ускорения эмбеддингов на разных x86 CPU.
- Что:
- зафиксированы ограничения batch, stream/session и static INT8 для трех моделей.
- рекомендованы два прототипа и минимальная матрица CPU/ISA.
- Проверка:
- git diff --cached --check.
- Зачем:
- требовалось сравнить облегченные модели диаризации на старом CPU без изменения рабочей конфигурации.
- Что:
- добавлен воспроизводимый и возобновляемый прогон матрицы Pyannote FP32/INT8 с WeSpeaker и TitaNet.
- зафиксированы измерения 108 ячеек, ограничения эксперимента и решение сохранить модель по умолчанию.
- локальные записи в каталоге tmp исключены из индекса Git.
- Проверка:
- .venv/bin/python -m pytest.
- /tmp/local-transcriber-ruff-bin/ruff check scripts/benchmarks/diarization_calibration.py tests/test_diarization_calibration.py.
- Зачем:
- транскрипты ONNX и faster-whisper на CPU имели одинаковую подпись.
- Что:
- для ONNX добавлено обозначение ONNX (CPU) в метаданных транскрипта.
- различие движков и пользовательская шапка покрыты тестами.
- примеры шапки в README и PRD приведены к текущему ONNX-профилю.
- Проверка:
- env -u FORCE_COLOR -u COLUMNS -u LINES uv run pytest.
- Зачем:
- предупреждения из задачи #7 выглядели как фрагменты Python traceback.
- Что:
- на время запуска CLI установлен однострочный Rich-рендер предупреждений.
- сохранены буквальный текст сообщений и восстановление глобального hook.
- single- и batch-сценарии покрыты автоматическим тестом.
- Проверка:
- uv run pytest tests/test_cli.py -q.
- Зачем:
- в #27 чистая установка Linux не включала sherpa-onnx-core, поэтому import sherpa_onnx падал при загрузке libonnxruntime.so.
- uv при универсальном резолвинге использовал метаданные armv7 wheel без Requires-Dist и терял обязательную платформенную зависимость.
- Что:
- версия sherpa-onnx зафиксирована на 1.13.5 вместе с явным metadata override для sherpa-onnx-core==1.13.5.
- рядом с pin и override записано правило их совместного обновления.
- uv.lock обновлен с зависимостью на core и wheel-файлами поддерживаемых платформ.
- Проверка:
- uv lock --check и uv tree --locked --package sherpa-onnx подтвердили зависимость от core 1.13.5.
- чистые uv sync --frozen, uv pip check и import sherpa_onnx завершились успешно в Linux.
- uv run pytest -q: 282 passed, 2 skipped.
- uvx ruff check src/local_transcriber/speaker_diarizer.py tests/test_speaker_diarizer.py завершился успешно.
- Зачем:
- в #27 чистая установка Linux не включала sherpa-onnx-core, поэтому import sherpa_onnx падал при загрузке libonnxruntime.so.
- uv при универсальном резолвинге использовал метаданные armv7 wheel без Requires-Dist и терял обязательную платформенную зависимость.
- Что:
- версия sherpa-onnx зафиксирована на 1.13.5 вместе с явным metadata override для sherpa-onnx-core==1.13.5.
- рядом с pin и override записано правило их совместного обновления.
- uv.lock обновлен с зависимостью на core и wheel-файлами поддерживаемых платформ.
- Проверка:
- uv lock --check и uv tree --locked --package sherpa-onnx подтвердили зависимость от core 1.13.5.
- чистые uv sync --frozen, uv pip check и import sherpa_onnx завершились успешно в Linux.
- uv run pytest -q: 282 passed, 2 skipped.
- uvx ruff check src/local_transcriber/speaker_diarizer.py tests/test_speaker_diarizer.py завершился успешно.
- Зачем:
- решения по неопределённым словам и CPU-стоимости должны быть проверяемыми до публикации реализации.
- Что:
- задокументировано отклонение post-hoc сглаживания Speaker ? по соседним кластерам.
- добавлено исследование стоимости каскада и облегчённых embedding-моделей.
- Проверка:
- `git diff --cached --check` — без ошибок.
Зачем:
- локальным транскриптам нужна структура реплик для конспектов и протоколов.
Что:
- добавлены пословные таймкоды для всех ASR-бэкендов и сведение с Sherpa-ONNX.
- реализованы CLI-флаги, деградация без потери ASR и speaker Markdown.
- добавлены проверяемый кеш моделей, тесты и документация.
Проверка:
- `pytest` — 283 passed, 1 skipped.
- `pyright` — 0 errors.
- Ruff и `git diff --check` — без ошибок.
- выполнены три контрольных прогона на реальных записях.
- Зачем:
- спецификация не должна оставлять неоднозначности перед реализацией диаризации.
- Что:
- уточнены сведение слов, таймкоды и предупреждение о малом кластере.
- очищены терминология и граница между ADR и спецификацией.
- сохранён результат сравнения WeSpeaker и CAMPPlus.
- Проверка:
- git diff --cached --check и проверка относительных ссылок.
- Зачем:
- решения карты должны стать устойчивой основой для реализации диаризации.
- Что:
- добавлены ADR-007 и спецификация пословной диаризации.
- дополнен доменный словарь и удалены закрытые направления из backlog.
- Проверка:
- git diff --cached --check.
- Зачем:
- потребовалось отделить временный результат диаризации от итоговых реплик транскрипта.
- Что:
- добавлено определение разметки говорящих и перечислены нежелательные синонимы.
- уточнено, что разметка не содержит текст, имена участников и голосовые эмбеддинги.
- Проверка:
- выполнена команда git diff --cached --check.
- Зачем:
- решение о пословной привязке должно использовать единый язык во всех документах карты.
- Что:
- определены сегмент распознавания и слово с временной привязкой.
- реплика говорящего отделена от единицы запуска модели распознавания.
- Проверка:
- git diff --check.
- Зачем:
- результат benchmark нужно интерпретировать с учётом ограничения питания ноутбука.
- Что:
- зафиксировано урезанное питание во время прогонов.
- визуальная оценка потери производительности около 30% явно отделена от измеренных результатов.
- Проверка:
- git diff --check.
- Зачем:
- требовалось проверить долю смешанных ASR-сегментов на трёх записях, включая разговоры на двоих.
- Что:
- добавлен отчёт с долями сегментов и времени для трёх рабочих созвонов.
- обвязка замеров переведена на откалиброванный порог 0,89.
- исследовательский скрипт приведён к формату ruff.
- Проверка:
- выполнены три полных прогона bench_conflict.py с WeSpeaker и порогом 0,89.
- uv run ruff check и ruff format --check прошли успешно.
- Зачем:
- слуховая проверка (#12) показала, что разметку диаризации читают как
истину, хотя она содержит ложный кластер, пропуски и неполные перекрытия.
- Что:
- в глоссарий добавлен термин «Опорная разметка» с запретом на
«эталонную», «истинную» и ground truth.
- определение описывает роль разметки в измерении, а не результат
конкретного прогона: выводы о пороге 0,9 остались в тикетах карты.
- Проверка:
- git show --stat HEAD и чтение CONTEXT.md.