docs(media): record validated voice duration fix

This commit is contained in:
evgeny committed 2026-10-24 17:26:11 +02:00
1 parent 359a9f3dfc
commit 40e2fe2e27
2 files changed
+49 -11

No files matched your search

+40 -6
View File
@@ -1,6 +1,6 @@
Аудит media_async / media_delivery — 2026-10-24
Статус: encrypted_file исправлен; продолжение аудита подтвердило отдельный дефект границы voice_file.
Полный аудит двух каталогов ещё не завершён. Новый дефект и проект исправления — в конце.
Статус: encrypted_file и отдельный дефект границы voice_file исправлены.
Полный аудит двух каталогов ещё не завершён. Граница voice_file и результаты исправления — в конце.
Ниже сохранены исходное воспроизведение, согласованный проект и результаты исправления encrypted_file.
Подтверждённый дефект: исходник уничтожается через другое имя того же файла
@@ -258,7 +258,41 @@ attachment_send.c вызывает voice_file_encode в worker, а attachment_va
Верхние границы проверять диагностической точкой до encoder без реального кодирования суток;
сохранить существующий настоящий Opus roundtrip короткой записи.
Аудит остановлен по AGENTS.md:10 после подтверждения и подготовки проекта исправления.
Рабочий код не исправлялся. voice_file.h и attachment.h остаются [~]; оставшаяся
повторная проверка media_delivery не выполнялась. Новый общий тестовый/sanitizer-прогон
не запускался: в этом продолжении изменены только записи аудита, диагностика находится в /tmp.
На этапе подтверждения аудит был остановлен по AGENTS.md:10, без изменения рабочего кода.
Пользователь согласовал исправление; результаты приведены ниже.
Результаты исправления voice_file — 2026-10-24
- ATTACHMENT_DURATION_MAX_MS в attachment.h задаёт один предел86400000мс:
его используют валидатор voice/video, video completion и кодировщик голоса.
- voice_file считает frames=count/frame и проверяет25..4320000 до создания Opus
и открытия выходного файла. Метаданные при раннем отказе не изменяются.
Хвост <20мс сохраняет прежнее поведение: отбрасывается, включая хвост после ровно24ч.
- Проверка архитектуры: frame всегда положителен и не больше1920 для разрешённых rate/channels;
деление count/frame не переполняется. После ограничения frames произведение frames*frame
не превосходит исходного count; frames*20 не превосходит86400000 и помещается в uint32_t.
Подготовка, публикация, владение PCM/файлом и формат контейнера не меняются.
- Лог раннего отказа содержит count/rate/channels/frames и разрешённые границы;
debug принятой записи показывает число кадров, длительность и отброшенный хвост.
- test_attachment: 120 граничных вызовов для пяти частот и mono/stereo.
Все70 недопустимых длительностей отвергнуты до encoder; все50 допустимых
дошли до диагностического encoder с инъекцией отказа. Во всех120 случаях
побайтно сохранены исходные metadata и содержимое существующего output.
Linux64 использует виртуальный read-only PCM; суточное кодирование не выполняется.
- Настоящий Opus encode/decode: прежняя1с запись и десять записей на500мс с хвостом
почти20мс, все rate/channels, все три preset. Проверены header, декодирование,
число20мс кадров, EOF и валидность метаданных результата.
- validate/encode/decode voice/video принимают86400000мс и отвергают86400001мс.
- ./build.sh --no-gui -j4 — PASS. В изменённых C-файлах/тесте предупреждений сборки нет;
общие прежние предупреждения остальных модулей остаются в полном логе.
- Профильные тесты10/10 PASS: attachment, attachment_send, encrypted_file,
encrypted_attachment, media_async, dm_media, dm_worker, services, video, video_no_ffmpeg.
Первый запуск attachment внутри sandbox выдал запреты создания stream fd;
весь профильный набор, включая attachment, успешно повторён вне sandbox.
Логи: /tmp/media-voice-fix-build.log, /tmp/media-voice-fix-profile-results.log,
/tmp/media-voice-fix-profile-logs/test_attachment.log и остальные логи этого каталога.
Новый полный make check и ASAN/UBSan/LSan не запускались; прежние результаты encrypted_file
выше не относятся к этому изменению. Windows/FreeBSD не проверялись.
voice_file.h и attachment.h сохраняют [~]: завершение этого фикса не закрывает
оставшуюся сверку контрактов всего аудита. Повторная проверка media_delivery ещё не завершена.
+9 -5
View File
@@ -4,18 +4,22 @@
## Текущие задачи
[ ] **media_async voice_file: согласовать верхнюю границу длительности с метаданными** — подтверждено 24.10.2026.
Проверка samples/channels/rate >86400 пропускает полные кадры 24ч+20..980мс,
[+] **media_async voice_file: согласовать верхнюю границу длительности с метаданными** — исправлено 24.10.2026.
Прежняя проверка samples/channels/rate >86400 пропускала полные кадры 24ч+20..980мс,
хотя attachment_validate отклоняет duration_ms >86400000. В штатном pipeline это означает
лишнюю подготовку файла перед отказом публикации; дефект относится к граничным записям длиннее суток.
Диагностический вызов реального voice_file_encode с остановкой на создании Opus:
60 случаев, все пять частот и 1/2 канала; 20 подтверждённых расхождений проверки.
/tmp/media-voice-duration-repro.c, /tmp/media-voice-duration-repro.mk, /tmp/media-voice-duration-repro.log.
План: общий предел миллисекунд в attachment.h; в voice_file проверять 25..4320000 полных кадров
Реализован общий предел миллисекунд в attachment.h; voice_file проверяет 25..4320000 полных кадров
до создания encoder/открытия output. Валидатор и video completion используют тот же предел.
Регрессии: границы 500мс/24ч, отбрасывание хвоста <20мс и ранний отказ при превышении на полный кадр.
test_attachment: 120 граничных случаев; 70 ранних отказов, прежний файл и metadata сохранены.
Настоящий Opus encode/decode: 11 записей, включая 500мс с хвостом для всех пяти частот и 1/2 канала.
Границы метаданных voice/video 86400000/86400001мс проверены через validate/encode/decode.
./build.sh --no-gui -j4 PASS; профильные тесты 10/10 PASS, включая DM, encrypted attachments и video.
Логи: /tmp/media-voice-fix-build.log, /tmp/media-voice-fix-profile-results.log, /tmp/media-voice-fix-profile-logs/.
Подробности и ограничения воспроизведения: [media_async_audit_findings.txt](media_async_audit_findings.txt).
Рабочий код не изменён: аудит остановлен по AGENTS.md:10; полный аудит media_delivery ещё не завершён.
Полный аудит media_delivery ещё не завершён; новые полный check и sanitizer-прогоны не выполнялись.
[+] **media_async encrypted_file: не уничтожать source через alias назначения** — исправлено 24.10.2026.
write/read отвергают только одинаковые строки; /./ и hardlink обходят проверку одного файла.