Document confirmed GRANT acknowledgment without saved attachment key

This commit is contained in:
evgeny committed 2026-10-26 22:55:49 +01:00
1 parent 030336eaeb
commit 52651cfa0d
2 files changed
+12 -3

No files matched your search

+9 -2
View File
@@ -137,8 +137,15 @@ REQUEST=1, REQUEST_ACK=2, GRANT=3, DENY=4, RESULT_ACK=5
контейнера. Конфликтующие ключи и результаты отклоняются.
REQUEST_ACK отправляется после сохранения запроса. GRANT/DENY появляются
в outbox только после сохранения решения. Полученный ключ сохраняется до
RESULT_ACK и до запуска расшифровки. Повторы возвращают прежнее решение и не
в outbox только после сохранения решения. Штатно полученный ключ сохраняется до
RESULT_ACK и до запуска расшифровки. Аудит 26.10.2026 выявил открытый дефект этого
подтверждения: ошибка bind ключа при GRANT не проверяется. Получатель может
зафиксировать `key=NULL` вместе со `state=2`, отправить настоящий RESULT_ACK,
а автор — отметить доставку и удалить GRANT из outbox. Это проверено с точечным
SQLITE_NOMEM на собственных узлах через реальный подписанный и зашифрованный обмен;
при UPDATE-ошибке через SQL-триггер откат и повтор работают штатно.
Подробности и граница проверки — в [chat_audit_findings.txt](chat_audit_findings.txt), аудит приёма GRANT.
Повторы возвращают прежнее решение и не
создают новых строк. Таймер обрабатывает ограниченную порцию очереди с
backpressure и повтором через 5 секунд; restart продолжает очереди.
+3 -1
View File
@@ -2,7 +2,9 @@
* send готовит контейнер и публикует сообщение; downloaded/want запускают получение ключа и расшифровку.
* Автор отвечает на запрос через decide. Ключи и очередь доставки сохраняются в локальной БД.
* Все вызовы, кроме identity, — uasync. init после media_async; quiesce до остановки workers, destroy после них.
* Обмен ключами подписан и зашифрован; для доставки нужен живой маршрут обеих сторон. */
* Обмен ключами подписан и зашифрован; для доставки нужен живой маршрут обеих сторон.
* Известный дефект приёма GRANT: ошибка bind ключа может привести к RESULT_ACK при key=NULL.
* Подтверждение пока не гарантирует сохранение ключа; см. doc/chat_audit_findings.txt, аудит приёма GRANT. */
#ifndef CHAT_ATTACHMENT_H
#define CHAT_ATTACHMENT_H
#include "../media_async/attachment.h"