Зачем:
- хранить локальные handoff и launcher в постоянном каталоге без риска случайного коммита
- не терять временно закрепленный стенд диаризации между компьютерами
Что:
- весь корневой .scratch добавлен в ignore
- существующие диагностические скрипты оставлены отслеживаемыми
- описание локальных и переносимых артефактов приведено к новой политике
Проверка:
- git check-ignore -v --no-index .scratch/new-local-artifact
- git ls-files .scratch
- git diff --check
- Зачем:
- uv tool install сохранял Python 3.11 старого окружения и отклонял пакет с требованием Python 3.13.
- Что:
- в команды установки и обновления добавлен явный выбор Python 3.13.
- актуализировано описание выбора Python в спецификации.
- Проверка:
- git diff --check.
Зачем:
- не допустить загрузку W0 и Sortformer без отдельного принятия трёх референсов владельцем
- связать manifest с точными байтами listening package и owner-authored record
Что:
- добавлены строгие схемы трёх reference rows и четырёх решений Step 3
- все внешние файлы проверяются через held fd без symlink и TOCTOU
- добавлены negative tests для подмен, неточных JSON-типов и небезопасных путей
Проверка:
- uv run pytest -q (532 passed, 2 skipped)
- uv run ruff check src/local_transcriber/streaming_sortformer_experiment.py tests/test_streaming_sortformer_experiment.py
- git diff --check
- Зачем:
- результат локальной разведки нужен для решения о целесообразности Ryzen-прогона.
- Что:
- опубликованы безопасные агрегаты скорости, памяти и качества.
- зафиксированы отклонения от приемочной спецификации и открытый статус #46.
- добавлены хеши закрытых результатов, моделей, runtime и runner-скрипта.
- Проверка:
- privacy_scan для публичного Markdown прошел.
- git diff --cached --check прошел.
- Зачем:
- для эксперимента из задачи #46 нужен изолированный и воспроизводимый стенд.
- Что:
- добавлены строгая схема, предварительные проверки и конечный автомат;
- зафиксированы расписание A/B, пороги, измерения, C ABI и правила приватности;
- экспериментальный модуль исключён из production wheel.
- Проверка:
- целевые тесты: 105 passed;
- полный набор: 438 passed, 2 skipped;
- Ruff: All checks passed.
Refs: #46
- Зачем:
- старые результаты решено сохранить до завершения и приемки задачи #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 завершился успешно.