docs(dm): record completed contract audit and validation

This commit is contained in:
evgeny committed 2026-10-27 01:06:45 +01:00
1 parent 9480f8029b
commit 5bb27d1b61
1 file changed
+74 -1
+74 -1
View File
@@ -1,8 +1,11 @@
DM — аудит документации и контрактов, 26.10.2026
DM — аудит документации и контрактов, 26–27.10.2026
База: /home/user/utun2, HEAD 03b050949cf36cc4868324be94a54eaddfdd494c.
Задание: /home/user/utun-doc-audit-checklist.txt, раздел src/dm/ и связанные документы.
Текущий статус на 27.10.2026: аудит контрактов DM завершён, 10/10 файлов [V].
Итог — раздел12; разделы1–11 сохраняют историю промежуточных проверок и исправлений.
1. Объём и статус
Полностью прочитаны dm_core.c/.h, dm_crypto.c/.h и dm_history.c/.h, doc/dm_arch.md,
@@ -506,3 +509,73 @@ __real_sqlite3_bind_blob. После окончания правок повто
/tmp/dm-expiry-fix-{sanitizers-build,sanitizers-results,sanitizers-test_dm*,full-check,netns}.log.
Задача завершения TTL закрыта. Общий аудит DM частичный;прежние отметки сохраняются.
GUI/Android/Windows/FreeBSD не проверялись;DELETE_ACK fault matrix отдельно не добавлялась.
12. Завершение аудита контрактов DM — 27.10.2026
База заключительного этапа: /home/user/utun4, master, исходный HEAD07f63c3047b4a9bef6c568ca590d3fefde95816f.
Полностью сверены все семь заголовков src/dm/ с реализациями core, crypto, history,
mailbox, mailbox_media и media; doc/dm_arch.md, doc/pm.txt и doc/pm_invites.md.
Это завершение проверки описаний/API, не утверждение об отсутствии всех возможных
ошибок программы. Новых подтверждённых дефектов выполнения в этом этапе нет.
В заголовках уточнены:
- Заимствование аргументов, один освобождаемый блок запросов UI, жизнь instance,
поток uasync и запрет доступа workers к SQLite/сети.
- Проверка тела/подписи отдельно от области router/ролей, точные повторы и конфликты,
границы транзакций при send/accept, подпись квитанции после commit входящего сообщения.
- Независимые квитанции сообщения и файла; STORED не удаляет исходящий outbox.
- Форматы DM/mailbox/media control, native-endian чисел и big-endian attachment_info,
лимиты send data с descriptor и размеры выходных буферов квитанций.
- Поколения/hidden, сохранение ключей и seq, отпечатки удалённых тел, отмена старых
invite/transfer и отбрасывание завершения worker старого поколения.
- Роли S/M, выбор нового storage без прежних назначений, фиксация назначения до STORE,
local S/M control и отличие передачи пакета от durable приёма.
- File holds, манифест путей, busy=-1 уборщика, повтор удаления и fsync каталога;
пользовательский исходник не передаётся уборке без явного remove_source.
- Запуск mailbox/core/media и остановка quiesce -> media_async drain -> destroy
с живыми SQLite/группами, сохранение данных между stop/restart.
dm_arch согласован с порциями таймеров32/8, обычным retry5с и отдельными retry3600с/30с,
сохранённым retry_at текстовых очередей и сбросом медиа при restart. Добавлены wire
таблица, порядок владельцев и восстановление оригинала после EXPIRED: срок копии M
не запрещает B получить исходный файл A; поздний EXPIRED не портит готовый файл.
pm.txt дополнен привязкой требований к текущим owners/ролям/настройкам, dm_arch
больше не называет этот аудит частичным. Исторические результаты сборок помечены датой.
Сверены относящиеся к контрактам callers: chat_service_start/stop, attachment_send,
file_transfer lookup/cancel, Qt DmInviteDialog/MainWindow/MessageList и bridge,
Android JNI/ViewModel/PmInviteDialog, headless DM handlers, регистрация JOIN-ключей
и планирование member_sync после JOIN_READY/принятия участника.
Клиентский код просмотрен для описанных DM-событий/выбора адресата/подготовки файла;
полный аудит Qt/Android и остальных общих модулей этим не заявляется.
pm_invites описывает владение запросом, поколение до регистрации и отсутствие
отката открытой беседы при последующей ошибке; отмена PM не отзывает JOIN-ключ.
Проверки текущего этапа:
- make -C src -j4 и сборка всех девяти существующих DM-целей: PASS.
- Native test_dm/history/names/load/e2e/invite/media/worker/media_cleanup:9/9 PASS.
test_dm_load:79 проверок; names:68 случаев и273 снимка, независимый Python JSON
parser прочитал каждый полный снимок. Worker:25 запусков,50 heartbeat,max_gap11.3мс.
Media:phase12,6266 heartbeat,allocations0->0; проверены11 retirement SQL faults,
18 release faults, потерянные control/restart и возврат точного оригинала после TTL.
- Linux cleanup component:13 SQL faults для scan/ACK/body, повтор после restart,
несколько M, потерянный/повторный/чужой ACK и поздний STORED; exit0.
Сеть перехвачена, receipt задан фикстурой; криптографию и физическое удаление M
проверяет отдельный test_dm_media. Одношаговый autocommit может уже завершиться
до искусственного finalize failure; тест проверяет это состояние и идемпотентный повтор.
- Каждый из семи заголовков: C99 и C++20 с -Wall -Wextra -Werror,14/14 PASS.
Для private/media C API C++ использует extern "C", как существующие клиенты;
include path lib/ соответствует проекту и предоставляет sqlite3.h.
- Все C-файлы DM побайтно совпадают с начальным снимком; C-токены всех заголовков
совпадают после исключения комментариев/пробелов. Алгоритмы, API/ABI, wire и SQL
этим этапом не менялись. git diff --check PASS; новые тесты не добавлялись.
Логи и снимки: /tmp/dm-contract-finish-before/sha256.json,
/tmp/dm-contract-finish-{build,final-core-build,final-tests-build,headers,validation}.log,
/tmp/dm-contract-finish-native-{results,test_dm*}.log; исходные тела/JSON — в test artifacts.
Сетевой профиль выполнен вне sandbox. Первый sandbox-запуск cleanup вернул exit0,
но uasync сообщил Operation not permitted при создании служебного fd; окончательный
повтор вне sandbox прошёл без этих сообщений. Сетевые настройки хоста не менялись.
Новые full check.sh, ASAN/UBSan/LSan, сборки/интерактив Qt/Android/Windows/FreeBSD
не выполнялись; прежние результаты не приписываются заключительному прогону.
Изменения radio и doc/tasks.md сохранены отдельно от DM-коммитов; push не выполнялся.