diff --git a/doc/tasks.md b/doc/tasks.md index d281f3cd..14584497 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -4,6 +4,19 @@ ## Текущие задачи +[ ] **media_async: файловые примитивы и точные контракты .h** — аудит 22.10.2026: + ma_copy_file проверяет только strcmp: source и ./source обнуляют исходный файл (14→0 байт), возврат 0. + Одинаковые строки несуществующего пути также дают 0 без проверки источника; правила перезаписи/ошибок не описаны. + ma_uuid игнорирует отказ RAND_bytes: при внедрённой ошибке буфер остаётся прежним, вызывающий не получает ошибку. + ma_dir_walk молча возвращает 0 для отсутствующего каталога/обычного файла; ошибки opendir/lstat/readdir не передаются. + Windows-ветка рекурсирует по DIRECTORY без проверки REPARSE_POINT; regular-only контракт .h требует уточнения/реализации. + ma_file_size сужает st_size до int: 3 ГиБ возвращают -1073741824. Ограничение int в .h указано, + но вызывающие media_index/chat_msg используют результат как int64_t: расширение после вызова не восстанавливает размер. + В .h уточнить синхронные done при отказе, -2 также для неверных аргументов/closing, отсутствие callback при done=NULL, + лимит 16 задач до доставки done (включая завершённые workers), размеры ключа/подписи и отсутствие отката побочных эффектов work. + Порядок join→cancel post→done при destroy сверён с uasync и doc/service_lifecycle.md; описание этого порядка соответствует коду. + Стенд вне репозитория: /tmp/media-async-audit.c; результаты: /tmp/media-async-audit.log. Реализация не менялась. + [+] **test_stream_service: убрать зависимость bootstrap-проверки от гонки TCP-handshake** — исправлено 22.10.2026: Падение на строке 409: REINIT=0 при probes=1/subflows=1/failures=0 и доставленной первой пачке. Встречный TCP-линк успевает сообщить peer_reset_id до ETCP CONFIRM: начальная эпоха уже известна,