diff --git a/doc/encrypted_attachments.md b/doc/encrypted_attachments.md index 79040b2b..ee5a2464 100644 --- a/doc/encrypted_attachments.md +++ b/doc/encrypted_attachments.md @@ -168,6 +168,17 @@ SQL-ошибка сохраняет все записи и файлы; сете Если rollback не закрыл собственную транзакцию, таймер не запускается повторно: модуль снимается и владелец останавливает ядро после poll. +Перед каждой сетевой попыткой очередь собственной транзакцией проверяет команду и +фиксирует `retry_at=now+5с`. Только после commit выполняются проверка допуска и сеть; +SQL-отказ сохраняет команду/дату и не отправляет пакет. За проход обрабатываются до16 +команд, периодический tick —10с. Пустая очередь освобождает свою транзакцию без +вызова commit hook. Отсутствие маршрута, backpressure и отказ отправки сохраняют очередь. + +Очистка неподтверждённых подготовок выполняется до workers и после их завершения. +Если SQLite-транзакция открыта, весь recovery откладывается, файлы сохраняются: +незакоммиченное удаление истории не доказывает отсутствие публикации. Инициализация +модуля также отклоняет внешнюю транзакцию до изменения таблиц/таймера/сети. + В шапке desktop-клиента кнопка «Запросы расшифровки» видна при наличии запросов без решения и показывает их число. Список содержит участника, вложение, дату и отдельные кнопки выдачи/отказа. @@ -273,6 +284,8 @@ prepare/bind/step/finalize удаления метаданных; дополни Дополнительные проверки:13 SQL-отказов привязки авторской пары,25 наблюдения новой/существующей идентичности и60 операций wanted/downloaded. Сверяются все поля через независимый reader, в том числе в событии; старые ключи/метаданные/соседняя запись сохраняются. +Открытое удаление истории при shutdown сохраняет опубликованные файлы; rollback и +restart восстанавливают прежний снимок. Внешняя транзакция также запрещает повторный init. Проверяются канонический UUID,коллизия/внешняя транзакция/commit veto/ABORT/IGNORE, повторная ошибка в отделённом batch,восстановление при startup без сети и17 каналов с fallback после заполнения очереди16. Ручной обработчик передаёт все23 подписанных diff --git a/src/chat/chat_attachment.h b/src/chat/chat_attachment.h index 277c4f29..b487482a 100644 --- a/src/chat/chat_attachment.h +++ b/src/chat/chat_attachment.h @@ -12,7 +12,7 @@ * Исходящий REQUEST сохраняется собственной транзакцией request+outbox после повторной проверки состояния. * Уведомление/отправка следуют после commit; внешняя транзакция откладывает весь проход файлов и очереди. * Перед сетевой попыткой отдельно фиксируется retry_at; отказ SQL не отправляет команду и сохраняет очередь/дату. - * Пустая очередь завершает свою транзакцию без commit hook. Повтор — через5с, за проход не более16 команд. + * Пустая очередь завершается без commit hook. retry_at отодвигается на5с; tick каждые10с, до16 команд за проход. * Расшифровка стартует после commit decrypting=1. До commit метаданных завершение остаётся у модуля: * таймер повторяет SQL без нового worker; не более 16 активных/ожидающих завершения файлов на instance. * quiesce останавливает повторы, destroy после workers освобождает также отложенные завершения.