Document file and DM isolation and the custody reassignment boundary
This commit is contained in:
1 parent
47e0c99f64
commit
9f11dcae0e
2 files changed
+54
No files matched your search
@@ -3,6 +3,7 @@
|
||||
Статус: этап 1 реализован; доработаны CONN_MGR, MEMBER_FILES, GROUP_AVATAR,
|
||||
ADMIN_KEY, RADIO_CALL, routed JOIN, CHAT NAT_DETECTION, MULTICAST_REPORT и ATTACHMENT_KEYS из этапа 2,
|
||||
RADIO/BROADCAST/MULTICAST из этапа 3.
|
||||
Из этапа 4 добавлены FILE_TRANSFER и прямой DM; mailbox/custody ещё требуют отдельного перехода состояния.
|
||||
Полная матрица ещё не закрыта.
|
||||
Граница отмены дисковых операций согласована с пользователем и реализована (раздел 5).
|
||||
Уточнение объёма: по указанию пользователя UTUN пока не дорабатывать.
|
||||
@@ -359,3 +360,49 @@ test_gui_language: 22 PASS/1 FAIL на прежнем пользовательс
|
||||
эта отдельная задача уже есть в doc/tasks.md, строка не менялась текущей доработкой.
|
||||
Лог /tmp/attachment-gui-language.log; общий результат GUI-теста не считается успешным.
|
||||
STREAM, синхронизация, личные сервисы и полная матрица остаются открытыми.
|
||||
|
||||
Продолжение в feature/chat-group-isolation (ветка от a3600c8a4, включает все предыдущие коммиты).
|
||||
FILE_TRANSFER теперь требует SIGNED для DATA/controls и текущий допуск self/peer в CHAT.
|
||||
Локальный pull проверяет право до fopen: запрещённая операция не усекает destination.
|
||||
Отзыв отменяет операции, CM handles, таймеры и waiters своей группы до done(-2).
|
||||
Отложенные sender/timer/CM callbacks сами проверяют допуск до продолжения I/O.
|
||||
Предметный lookup по-прежнему проверяет право на конкретный неизменяемый объект.
|
||||
Сетевой стенд проверил A/B на одном ETCP, удержанные DATA в reorder, поздний подписанный
|
||||
пакет, отсутствие lookup запрещённого запроса, unsigned CLOSE и отзыв self перед sender callback.
|
||||
Тот же объект после отказа в B полностью скачивается через A с новым transfer ID.
|
||||
До исправления локальный pull портил destination, активная B не отменялась; исходный
|
||||
стенд57/3 FAIL, /tmp/chat-file-transfer-before.log. Проверка записи затем отделена от
|
||||
проверки callback и дополнена явным resume_receive/fflush. FILE_TRANSFER-стенд62/62,
|
||||
/tmp/chat-file-transfer-controls.log. test_dm_media:17 фаз PASS, allocations0->0,
|
||||
/tmp/chat-file-transfer-dm-media.log; это регрессия доставки, не полный аудит DM_MEDIA.
|
||||
|
||||
Прямой DM получил обязательную подпись controls и авторизацию router. Подбор общей группы
|
||||
и маршрута использует свежий допуск, не любое наличие строки участника. Личная история
|
||||
и durable outbox сохраняются; повтор через другую разрешённую группу использует прежнее
|
||||
подписанное тело и адресата. Вход через B после отзыва проверен до proactive teardown:
|
||||
прежний код записывал сообщение и выбирал отозванную B; стенд63/2 FAIL,
|
||||
/tmp/chat-dm-isolation-live-before.log. Первоначальный тест с teardown скрывал этот обход,
|
||||
поэтому проверка входа перенесена до очистки сессии. После исправления65/65,
|
||||
tests/logs/test_chat_group_isolation.log. Общий ./check.sh выполняется.
|
||||
|
||||
Следующая архитектурная граница: mailbox и custody (по чтению кода, сетевого воспроизведения ещё нет).
|
||||
- dm_mailbox_media_register сохраняет job по UUID и при повторе проверяет только body_hash;
|
||||
group_id заказа остаётся прежним, даже если повтор пришёл через другую разрешённую группу.
|
||||
- dm_custody_store при точном повторе отвечает через новую группу/source, но сохранённые
|
||||
group_id/supernode не меняются. Фоновая обработка использует старые поля.
|
||||
- dm_media_holders имеет ключ (id,node_id), без группы. Повторное назначение того же M
|
||||
через B нельзя считать новым только заменой проверки допуска: оно пересекается с прежним A.
|
||||
- mb_scope/dm_media_scope пока недостаточно проверяют admitted/source/self и третьего участника;
|
||||
простое усиление этих условий остановит старые задания, но не даст корректного пересогласования.
|
||||
|
||||
Предлагаемый следующий этап:
|
||||
1. Разделить идентичность неизменяемого файла (UUID/body hash) и контекст задания хранения.
|
||||
Явно определить атомарную замену group/supernode при новом допустимом PUT/STORE.
|
||||
Сохранить первоначальные TTL/политику удаления; смена маршрута не продлевает хранение.
|
||||
2. Связать holder и его ACK/DELETE/EXPIRED с конкретным назначением и группой, чтобы поздний
|
||||
ответ A не изменял действующее назначение B; согласовать это с одной физической копией M.
|
||||
3. Добавить общий свежий допуск, проверки всех ролей/участников и отмену заданий/проб;
|
||||
завершение custody worker проверяет актуальное назначение перед публикацией результата.
|
||||
4. Проверить реальными A–S–B/M: отзыв только одной группы, новый заказ через другую,
|
||||
тот же UUID/M, поздние ответы, перезапуск, прежний TTL и сохранность локальной истории.
|
||||
Изменения mailbox/custody остановлены на этой границе по правилу AGENTS о логических несоответствиях.
|
||||
@@ -39,6 +39,13 @@
|
||||
/tmp/attachment-group-isolation.log, /tmp/attachment-delete-network.log. Общий ./check.sh:240/240,
|
||||
proxy9/9, burst/load PASS (203с), /tmp/attachment-isolation-full-check.log. Qt собран;
|
||||
test_gui_language повторил известный FAIL Deleted accounts → Deleted, отдельная задача ниже.
|
||||
Продолжение в feature/chat-group-isolation; ветка включает прежние коммиты от a3600c8a4.
|
||||
FILE_TRANSFER: допуск до fopen/lookup, подписанные controls, отмена операций/очередей и проверка callbacks.
|
||||
Прямой DM: свежий допуск входа и выбора маршрута; сохранённое тело повторяется через другую общую группу.
|
||||
Воспроизведены усечение файла до отказа, незакрытая операция и запись DM через отозванную живую сессию.
|
||||
Сетевой стенд65/65; test_dm_media17 фаз PASS, allocations0->0. Общий прогон выполняется.
|
||||
Следующая граница mailbox/custody: повтор через B отвечает в B, но сохраняет старое назначение A;
|
||||
усиление допуска требует атомарного пересогласования и защиты от поздних ответов A. Схема — в конце плана.
|
||||
Подмена источника, raw JOIN/invite, личные DM и
|
||||
оставшиеся сервисы ещё не закрыты общей гарантией; точная граница проверок — раздел 5 плана.
|
||||
План исправления и критерии по четырём этапам: [group_isolation_plan.txt](group_isolation_plan.txt).
|
||||
|
||||
Reference in new issue
Block a user