Record attachment isolation checks and resolved deletion conflict

This commit is contained in:
evgeny committed 2026-11-03 21:19:02 +01:00
1 parent 614ed165e1
commit ce840f56b3
2 files changed
+38 -23

No files matched your search

+25 -16
View File
@@ -1,7 +1,7 @@
Межгрупповой доступ: план изоляции CHAT-групп
Дата: 03.11.2026
Статус: этап 1 реализован; доработаны CONN_MGR, MEMBER_FILES, GROUP_AVATAR,
ADMIN_KEY, RADIO_CALL, routed JOIN, CHAT NAT_DETECTION и MULTICAST_REPORT из этапа 2,
ADMIN_KEY, RADIO_CALL, routed JOIN, CHAT NAT_DETECTION, MULTICAST_REPORT и ATTACHMENT_KEYS из этапа 2,
RADIO/BROADCAST/MULTICAST из этапа 3.
Полная матрица ещё не закрыта.
Граница отмены дисковых операций согласована с пользователем и реализована (раздел 5).
@@ -330,19 +330,28 @@ test_multicast: PASS, /tmp/chat-group-multicast-unrestricted.log. Сетевой
со старой эпохой, raw-инъекция и сохранение A на общем ETCP. Полный прогон после NAT/MULTICAST:
240/240, proxy9/9, burst/load PASS, /tmp/chat-group-nat-multicast-check.log (197с).
ATTACHMENT_KEYS — в работе, не считать завершённым. Добавлены обязательная crypto/admission
router, проверки local send/request/publication и атомарная отмена durable запросов/outbox.
State5 обозначает отмену; новый запрос после readmission требует нового решения автора.
Полученные ключи и локальная расшифровка сохраняются. Qt показывает отменённое состояние.
Ядро собирается, test_attachment_decisions PASS. test_chat_attachment обнаружил конфликт:
chat_core_delete_channel уничтожает группу до SQL-транзакции удаления канала. Новый teardown
отзывает attachment requests отдельным commit; последующий отказ удаления SQLite уже не может
сохранить прежний outbox. Лог: /tmp/chat-group-attachment-core.log, channel_state column3.
Нужна согласованная граница: сначала commit удаления метаданных, затем teardown и файлы,
с проверкой всех cleanup callbacks на работу после удаления таблиц. При SQL-отказе должны
сохраниться канал, его запросы и работающая группа. По правилу AGENTS о логических несоответствиях
работа остановлена на этой границе; новая часть не проверена полностью и не отправлена.
Оставшиеся тесты ATTACHMENT_KEYS ещё не запускались; fixtures с искусственными peer/state
потребуют актуализации (test_attachment_results peer123 без допуска, test_attachment_requests
считает state5 недопустимым). Новые тесты отмены/повторного допуска также ещё нужны.
ATTACHMENT_KEYS: обязательная crypto/admission router, проверки local send/request/publication
и атомарная отмена durable запросов/outbox. State5 обозначает отмену; повторный допуск сам
не запускает работу, новый явный запрос требует нового решения автора. Backfill и новая
загрузка контейнера не возобновляют отменённый запрос. Поздние ACK/GRANT/DENY не меняют state5.
Полученные ключи и локальная расшифровка сохраняются. Qt показывает причину отмены.
Проверены rollback всей отмены при ABORT/IGNORE/commit veto, внешняя транзакция, отзыв peer/self,
повтор без события, новый запрос/согласие. test_attachment_requests и test_attachment_results PASS;
логи /tmp/attachment-final-requests.log и /tmp/attachment-revoke-results.log.
Сетевой test_chat_group_isolation: 54/54, /tmp/attachment-group-isolation.log. Настоящие
SIGNED/ENCRYPTED запросы A/B создают авторские записи; отзыв B только на получателе
отменяет ожидающий GRANT, подписанный пакет со старой эпохой не возобновляет B;
ключ A и его RESULT_ACK доходят по тому же живому ETCP.
Обнаруженный конфликт удаления канала исправлен: chat_core_delete_channel сначала
фиксирует удаление метаданных, затем помечает группу stopping и отменяет runtime/файлы.
При SQL-отказе сохраняются канал, ключи, запросы/outbox и работающие группа/DB_SYNC.
Поздний callback загрузки не трогает удалённое сообщение. test_chat_attachment PASS:
14 SQL-отказов удаления и дополнительные каскад/Merkle/commit/rollback сценарии,
сохранённый ключ расшифровывает локальный файл после отзыва self, подготовленное
исходящее вложение после отзыва не публикуется. Лог /tmp/attachment-worker-revoke.log.
Тестовые peer/state приведены к новому контракту. Исправлен отдельный дефект restart-fixture:
перезапуск теперь сохраняет прежнюю личность, а не создаёт узел без допуска в канал.
Реальный test_encrypted_attachment A–S–B/C PASS, /tmp/attachment-delete-network.log.
Полный повтор check.sh и сборка Qt выполняются; итог будет зафиксирован после завершения.
STREAM, синхронизация, личные сервисы и полная матрица остаются открытыми.
+13 -7
View File
@@ -30,9 +30,13 @@
NAT unit/faults PASS; сетевой стенд 40/40. MULTICAST: отмена подписок/доставок и фильтрация общей FIFO,
scoped-политика MULTICAST_REPORT; unit PASS, сетевой стенд 50/50. UTUN wire/допуск сохранены.
Полный прогон после NAT/MULTICAST: 240/240, proxy9/9, burst/load PASS, /tmp/chat-group-nat-multicast-check.log.
ATTACHMENT_KEYS в работе: crypto/admission, durable отмена state5, новый запрос после readmission, Qt-статус.
Ядро собрано; test_attachment_decisions PASS. test_chat_attachment FAIL на атомарности удаления канала (задача ниже).
По правилу AGENTS работа остановлена до согласованного исправления границы SQL/teardown; эта часть не завершена.
ATTACHMENT_KEYS: crypto/admission, атомарная отмена state5, новый явный запрос после readmission, Qt-статус.
Отмена не возобновляется от backfill; поздние ответы отвергаются, полученные ключи/локальная расшифровка сохраняются.
requests/results/decisions/chat_attachment/encrypted_attachment PASS; rollback отмены, peer/self, новые запросы
и completion worker после отзыва проверены. Сетевой стенд54/54: ключ B не выдаётся, A работает по тому же ETCP.
Атомарность удаления канала исправлена (задача ниже); restart-fixture сохраняет прежнюю личность узла.
Логи: /tmp/attachment-final-requests.log, /tmp/attachment-revoke-results.log, /tmp/attachment-worker-revoke.log,
/tmp/attachment-group-isolation.log, /tmp/attachment-delete-network.log. Общий прогон и сборка Qt выполняются.
Подмена источника, raw JOIN/invite, личные DM и
оставшиеся сервисы ещё не закрыты общей гарантией; точная граница проверок — раздел 5 плана.
План исправления и критерии по четырём этапам: [group_isolation_plan.txt](group_isolation_plan.txt).
@@ -40,13 +44,15 @@
MEMBERS recovery и первичный JOIN требуют отдельных правил. Общие service ID должны сохранить поведение
и crypto-требования UTUN. Этапы 2–4 остаются открытыми; выполненная часть и результаты — раздел 5 плана.
[ ] **Удаление CHAT-канала: commit должен предшествовать отзыву durable работы** — 03.11.2026.
[+] **Удаление CHAT-канала: commit предшествует отзыву durable работы** — 03.11.2026.
test_chat_attachment воспроизвёл: chat_core_delete_channel сначала уничтожает TOPO_GROUP,
teardown отменяет attachment outbox отдельной транзакцией, затем DELETE channels получает ABORT/IGNORE.
Канал сохраняется, но outbox уже потерян; /tmp/chat-group-attachment-core.log, channel_state column3.
Предлагаемая граница: сначала успешный commit удаления метаданных, затем cleanup runtime/файлов;
проверить cleanup callbacks после удаления таблиц. При SQL-отказе сохранить также живую группу.
Не ослаблять тест атомарности и не обходить проверку допуска. ATTACHMENT_KEYS пока не считать готовым.
Исправлено: сначала успешный commit удаления метаданных, затем stopping и cleanup runtime/файлов.
Cleanup callbacks проверены; поздний callback медиа-загрузки не пишет в удалённую историю и не даёт событие.
При SQL-отказе сохранены точные записи/outbox/файлы и работающие группа/DB_SYNC. Проверки допуска сохранены.
test_chat_attachment PASS, /tmp/attachment-worker-revoke.log; SQL faults/ABORT/IGNORE/commit veto/внешняя
транзакция и неудачный rollback. Дополнены проверки runtime и callback после удаления.
[ ] **Отложено: отдельный допуск UTUN и его API** — 03.11.2026. Не выполнять в текущей задаче по указанию пользователя.
По чтению кода: TCP/UDP/ICMP proxy и routing DATA не проверяют входящий router group;