From 5bb27d1b6161b885b0e8a2cf0a0d321f7f15378c Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 27 Oct 2026 01:04:36 +0100 Subject: [PATCH] docs(dm): record completed contract audit and validation --- doc/dm_audit_findings.txt | 75 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 74 insertions(+), 1 deletion(-) diff --git a/doc/dm_audit_findings.txt b/doc/dm_audit_findings.txt index e4bb0c82..60a2385d 100644 --- a/doc/dm_audit_findings.txt +++ b/doc/dm_audit_findings.txt @@ -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 не выполнялся.