diff --git a/doc/tasks.md b/doc/tasks.md index 3be303d2..6049f883 100644 --- a/doc/tasks.md +++ b/doc/tasks.md @@ -39,6 +39,20 @@ register_async в этом случае вернёт result=NULL и освободит идентификаторы подготовленного результата. Обеспечить атомарность регистрации всех блоков с учётом внешней транзакции и описать гарантии .h. Лог /tmp/media-index-location-audit.log: second-block-failure commit=-1 rows_remaining=1. + Уточнение плана: гарантия относится к БД, не к уже выполненному копированию worker. + SAVEPOINT сохраняет внешнюю транзакцию при локальных ошибках; RAISE(ROLLBACK) уничтожает и транзакцию, и savepoint. + Повтор скачанного блока не должен затирать подписанную запись автора нулевой node_sign; + отличающиеся chat_id/location сейчас также молча игнорируются с возвратом 0 — конфликт надо диагностировать. + Дополнительные проверки: /tmp/media-index-plan-review.c, /tmp/media-index-plan-review.log. + +[ ] **Удаление канала: поздний completion повторно регистрирует медиа** — проверка плана 22.10.2026: + Стенд запускает register_async(copy=0), очищает media_files канала до обработки completion и затем обрабатывает uasync: + delete_channel=0, rows_before_completion=0, callback err=0, rows_after_completion=1. + mi_reg_done выполняет commit раньше on_media_registered, где проверяется наличие db_sync канала. + media_delivery_cancel_channel отменяет downloads/streams/relay, но не исходящие задачи регистрации. + Согласовать завершение подготовки с удалением канала до commit; учесть повторное создание того же channel_id + и отдельно определить судьбу файлов, которые worker успел опубликовать. Проверка только наличия канала недостаточна. + Реализация не менялась; стенд /tmp/media-index-plan-review.c, лог /tmp/media-index-plan-review.log. [ ] **media_index_delete_channel: возвращать реальные ошибки удаления** — воспроизведено 22.10.2026: После DROP TABLE media_files delete_channel возвращает 0 при SQLite-ошибке no such table.