diff --git a/doc/media_async_audit_findings.txt b/doc/media_async_audit_findings.txt index 0b35f260..3e5bb2de 100644 --- a/doc/media_async_audit_findings.txt +++ b/doc/media_async_audit_findings.txt @@ -1,7 +1,9 @@ Аудит media_async / media_delivery — 2026-10-24 Статус: alias encrypted_file, граница voice_file, переанонс SQLite и расхождение MIME write/read исправлены. -Сверка оставшихся общих описаний ещё не завершена. Последнее продолжение и результаты MIME-фикса — в конце. -Ниже сохранены исходное воспроизведение, согласованный проект и результаты исправления encrypted_file. +Сверка двух каталогов завершена: все11 заголовков, sync.md, _desc.txt и encrypted_attachments.md. +Общий service_lifecycle.md проверен в media-части; разделы других сервисов не считаются закрытыми. +Ниже сохранена хронология воспроизведений и исправлений; прежние отметки незавершённости относятся к этапам. +Последние проверки MIME и итоговая архитектурная сверка — в конце. Подтверждённый дефект: исходник уничтожается через другое имя того же файла @@ -494,5 +496,35 @@ chat_attachment_send (chat_attachment.c:198..225) имеет такую же с /tmp/media-mime-fix-profile-logs/, /tmp/media-mime-sanitizer-build-retry.log, /tmp/media-mime-sanitizer-tests-build.log, /tmp/media-mime-sanitizer-results.log, /tmp/media-mime-sanitizer-test_*.log. Полный check и Windows/FreeBSD для MIME-фикса не запускались. -encrypted_file.h теперь согласован с реализацией. Остаются общий _desc.txt и сверка -encrypted_attachments.md с chat/UI; общий service_lifecycle за пределами media не входит в этот аудит. +encrypted_file.h теперь согласован с реализацией. Последующая сверка общих описаний завершена ниже. + +Завершение аудита media_async/media_delivery — 2026-10-24 + +- Все11 публичных заголовков двух каталогов сверены по полным функциям и структурам реализаций: + media_async/crypto, attachment/send, encrypted_file, voice_file, media_index/download/delivery/proto, + file_transfer. Уточнены назначения, входы/выходы, владение и потоки, ошибки и wire-ограничения. +- _desc.txt заменён актуальным описанием подготовки, поиска/загрузки, relay, каталога и репликации. + Убраны прежние предположения о RTT-выборе, только прямых соединениях, часовых повторах и ACK-окне. + Отражены фактические QUERY/CM/transfer UUID, пределы выдач, per-group RX-курсор и атомарный приём страницы. + sync.md уточняет отсутствие ожидания HAVE ACK и проверки SQLite при локальном переанонсе. +- encrypted_attachments.md целиком сопоставлен с chat_attachment.c и источниками desktop/Android UI: + inputbar, MessageList/attachment_key_ui, JNI snapshot, ChatRepository, MessageBubble/Reply/ChannelList. + Уточнены MIME, видимость desktop-кнопки при наличии pending requests и preview цитаты после расшифровки. + Контейнер не выдаётся UI как готовый файл; путь/метаданные заменяются после готовности plaintext. + Это сверка исходников, без нового интерактивного GUI/Android runtime-прогона. +- media-раздел service_lifecycle.md сверён по текущему start/quiesce/join/done/destroy и владельцам + worker/temp/CM/relay. Дописано, что ранний MIME-валидатор допустим в uasync и не выполняет I/O. + Общий документ сохраняет частичную отметку: голос, звонки и другие немедийные владельцы вне этой проверки. +- Архитектура исправлений остаётся простой: формат/валидация контейнера принадлежат encrypted_file, + temp/durability — file_io, публикация и БД/UI — задаче chat_attachment; один владелец на ресурс. + Media_index регистрирует подготовленное, delivery проверяет передачу и ведёт каталог своей группы. + Синхронные приём/проверка/сборка delivery в uasync и отсутствие общей транзакции ФС/SQLite + явно описаны как действующие границы. File_transfer оставляет ключи/авторизацию/проверку caller. +- Все четыре воспроизведённых дефекта исправлены и имеют регрессии. Неразобранных подтверждённых + дефектов в рамках этого аудита не осталось. Последние изменения после MIME-прогона — только описания; + git diff --check проходит. Для MIME действуют профиль10/10 и ASAN/UBSan/LSan4/4 выше; + прежние полные185/186 и sanitizer21/21 не приписываются последующим исправлениям. + +Коммиты общей сверки:91fed902 (delivery),8d175049 (encrypted/UI/lifecycle). +Чек-лист: все media-заголовки и encrypted_attachments.md — [V], общий service_lifecycle.md — [~]. +Windows/FreeBSD, новый полный check и интерактивные GUI/Android проверки не выполнялись. diff --git a/doc/tasks.md b/doc/tasks.md index 9bff7bf9..8f9c224f 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,11 +4,18 @@ ## Текущие задачи +[+] **media_async/media_delivery: завершить сверку контрактов и исправлений** — завершено 24.10.2026. + Проверены все11 заголовков двух каталогов по полным реализациям; исправлены alias файлов, + граница voice duration, переанонс SQLite и расхождение MIME. Результаты каждого фикса приведены ниже. + Устаревший _desc.txt заменён описанием текущей архитектуры; уточнены sync.md, encrypted_attachments.md + и media-раздел service_lifecycle.md. Общий lifecycle за пределами media остаётся частично проверенным. + Итог, границы и доказательства: [media_async_audit_findings.txt](media_async_audit_findings.txt). + [+] **encrypted_file: одинаково проверять MIME при записи и чтении контейнера** — исправлено 24.10.2026. - write проверяет только strlen(type)<32 и принимает пустое значение/недопустимые символы, + Прежний write проверял только strlen(type)<32 и принимал пустое значение/недопустимые символы, тогда как read их отвергает. Пять реальных write/read с теми же ключом/UUID/подписанным hash: write=0, read=-1; контрольный application/octet-stream проходит полный roundtrip. - chat_attachment_send также проверяет только длину и может принять такой MIME до записи ключа/запуска worker. + Прежний chat_attachment_send также проверял только длину и мог принять такой MIME до записи ключа/запуска worker. Воспроизведение: /tmp/media-content-type-audit.c и .mk, /tmp/media-content-type-audit.log; исходники/контейнеры: /tmp/media-content-type-audit-FdtMC3/. Исходный файл не меняется. Реализован один bounded encrypted_file_validate_type для send/write/read; 1..31 байт, @@ -19,7 +26,7 @@ ./build.sh --no-gui -j4 PASS; профиль10/10 и ASAN/UBSan/LSan4/4 PASS, detect_leaks=1. Логи: /tmp/media-mime-fix-build.log, /tmp/media-mime-fix-profile-results.log, /tmp/media-mime-sanitizer-results.log. Полный check и Windows/FreeBSD для этого фикса не запускались. - Подробности: [media_async_audit_findings.txt](media_async_audit_findings.txt). Сверка оставшихся описаний продолжается. + Подробности: [media_async_audit_findings.txt](media_async_audit_findings.txt). Сверка описаний завершена. [+] **media_delivery: проверять записи SQLite перед переанонсом локальных блоков** — исправлено 24.10.2026. Прежний announce_local_blocks не проверял длины media_id/block_id, диапазон chunk и полный chat_id. @@ -37,7 +44,7 @@ Логи: /tmp/media-announcement-fix-profile-results.log, /tmp/media-announcement-fix-sql-final.log, /tmp/media-announcement-sanitizer-results.log. Полный check и Windows/FreeBSD не запускались. Архитектура, границы воспроизведения и регрессии: [media_async_audit_findings.txt](media_async_audit_findings.txt). - Сверка описаний двух каталогов ещё не завершена. + Последующая сверка описаний двух каталогов завершена; итог указан в начале списка. [+] **media_async voice_file: согласовать верхнюю границу длительности с метаданными** — исправлено 24.10.2026. Прежняя проверка samples/channels/rate >86400 пропускала полные кадры 24ч+20..980мс, @@ -54,7 +61,7 @@ ./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). - Полный аудит media_delivery ещё не завершён; новые полный check и sanitizer-прогоны не выполнялись. + На этом этапе новые полный check и sanitizer-прогоны не выполнялись; последующие проверки и итог аудита указаны выше. [+] **media_async encrypted_file: не уничтожать source через alias назначения** — исправлено 24.10.2026. write/read отвергают только одинаковые строки; /./ и hardlink обходят проверку одного файла. @@ -72,7 +79,7 @@ Профильные21/21 и основной make check185/185 PASS; proxy9/9, burst1/1, load8/8 PASS в отдельном network namespace,134217728 проверенных байт. ASAN/UBSan/LSan21/21 PASS, detect_leaks=1. Логи: /tmp/media-fix-full-check.log, /tmp/media-fix-network-check.log, /tmp/media-fix-sanitizer-results.log. - Полный аудит остальных контрактов media_async/media_delivery ещё не завершён; Windows/FreeBSD не проверялись. + Последующий аудит остальных контрактов media_async/media_delivery завершён; Windows/FreeBSD не проверялись. [+] **Proxy: исправить HUP/backpressure, владение и rollback** — завершено 24.10.2026. Согласованный проект, причины и результаты: [doc/proxy_fix_plan.txt](proxy_fix_plan.txt).