Record verified GRANT fix before integrating upstream chat revisions
This commit is contained in:
1 parent
b8b6636644
commit
012bd650ea
3 files changed
+63
-11
No files matched your search
@@ -17,6 +17,7 @@ Chat: исправление приглашений и проверка конт
|
||||
По согласованному плану этот дефект исправлен;итоговые контракты и проверки — в разделе исправления chat_attachment ниже.
|
||||
Продолжение от030336ea:в приёме GRANT подтверждён отдельный дефект — RESULT_ACK при key=NULL;
|
||||
описание настоящего сетевого обмена,контролей и остановки аудита приведено в конце отчёта.
|
||||
По поручению пользователя приём GRANT исправлен;до Pull native/sanitizer-профили прошли,интеграция описывается ниже.
|
||||
|
||||
Реализация
|
||||
|
||||
@@ -558,3 +559,53 @@ ACK и уведомление допустимы после подтверждё
|
||||
исправление авторской подготовки сохранено. chat_attachment.h и encrypted_attachments.md
|
||||
остаются[~] в чеклисте,прочие отметки не менялись. По AGENTS.md:10 аудит остановлен на
|
||||
подтверждённой несогласованности;новая задача открыта. Коммиты локальные,push не выполнялся.
|
||||
|
||||
Исправление приёма GRANT — 26.10.2026, до Pull
|
||||
|
||||
ak_apply_result выполняет собственный BEGIN IMMEDIATE/COMMIT для четырёх ответов:
|
||||
REQUEST_ACK/GRANT/DENY/RESULT_ACK. Проверяются prepare,каждый bind,step,ожидаемые числа строк,
|
||||
finalize и commit. Исходные request.state/incoming и команда outbox читаются вместе;
|
||||
ключ и состояние требуют одну изменённую строку. DELETE требует одну строку только если
|
||||
ожидаемая команда существовала:предыдущий REQUEST_ACK или дубликат может уже удалить её.
|
||||
Это позволяет обнаружить RAISE(IGNORE) для DELETE,сохраняя штатную идемпотентность.
|
||||
Состояния и конфликты прежнего ключа/решения проверяются до записи;поздний REQUEST_ACK
|
||||
сохраняет уже применённое решение. Ответы внутри внешней транзакции отклоняются без её изменения.
|
||||
|
||||
ACK и уведомление остаются в вызывающем обработчике и выполняются только после commit.
|
||||
На отказе вся операция откатывается. Общая локальная ak_rollback используется также авторской
|
||||
подготовкой:если транзакция осталась открыта,модуль quiesce и utun_instance_stop запрашивают
|
||||
освобождение владельцем после poll. RELEASE после неудачного rollback больше не может
|
||||
зафиксировать частичное применение ответа. REQUEST/decide/delete/recovery этим не закрываются.
|
||||
Канальный wire,схема ключей и политика SQLite WAL/NORMAL не менялись.
|
||||
|
||||
Постоянный Linux test_attachment_results проверяет105 SQL-отказов и столько же повторов
|
||||
для четырёх ответов. Это обработчик после router с настоящими core/SQLite и подменой только
|
||||
доставки ACK:криптографию проверяет отдельный сетевой тест. Все read/key/state/outbox
|
||||
prepare/bind/step/finalize/changes,BEGIN и COMMIT покрыты точечными wrappers.
|
||||
В ACK и событии отдельное readonly-соединение проверяет точные committed key/state/outbox;
|
||||
на отказе нет ACK/события,прежние поля и соседняя запись сохранены. Дополнительно:
|
||||
настоящий commit hook veto,ABORT/IGNORE для key/state/outbox,внешняя транзакция,
|
||||
backpressure,повторы GRANT/DENY/ACK,поздний REQUEST_ACK,конфликт ключа/решения,
|
||||
неудачный rollback с quiesce/stop и закрытием БД владельцем. Баланс u_malloc восстановлен.
|
||||
|
||||
Штатный test_encrypted_attachment расширен одним отказом bind первого настоящего GRANT:
|
||||
снимок до записи совпадает после rollback,ACK=0,автор сохраняет GRANT для повтора.
|
||||
После реального повтора ключ виден readonly-соединению до отправки ACK,файл расшифровывается;
|
||||
restart/дубликат/очистка/отказ второму участнику проходят прежний сценарий до phase10.
|
||||
Сетевые отправки wrapper наблюдает и передаёт настоящему router без изменений.
|
||||
|
||||
До Pull native build PASS;профиль attachment_results,chat_attachment,encrypted_attachment,
|
||||
attachment_send,chat_admin,services,instance_contract,media_primitives —8/8 PASS.
|
||||
Тот же профиль ASAN/UBSan/LSan8/8 PASS,detect_leaks=1,halt_on_error=1.
|
||||
Отдельная копия /tmp/utun-grant-key-sanitizers:core/libuasync/Opus инструментированы согласованно,
|
||||
sanitizer-настройки Opus унаследованы только в копии. Логи /tmp/grant-key-fix-{build,native-results,
|
||||
asan-build,asan-tests-build,asan-results}.log;полные /tmp/grant-key-fix-{native,asan}-logs.
|
||||
Исходный диагностический стенд переведён на ожидание rollback без ACK и последующего повтора;
|
||||
неизменённая старая сетевая фикстура сохранена в /tmp/grant-key-fixture-baseline.c.
|
||||
Теперь bind-сценарий phase10/PASS,exit0,одна инъекция и два ACK с32 сохранёнными байтами.
|
||||
Лог /tmp/grant-key-fix-original.log,подробный /tmp/utun_encrypted_attachment_eiewV8/test.log.
|
||||
|
||||
Задача исправления закрыта;заголовок и encrypted_attachments.md согласованы.
|
||||
Отметки attachment/chat остаются[~],полный аудит не возобновляется. По просьбе пользователя
|
||||
после завершения этой правки выполняется Pull с сохранением входящих доработок чата.
|
||||
Последующие результаты интеграции и общего прогона будут приведены отдельным разделом.
|
||||
@@ -37,7 +37,7 @@ Desktop и Android проверяют `instance->running` вместе со св
|
||||
включая Android-цикл после restart. Запрос из callback завершает цикл после возврата
|
||||
из текущего poll; уже начатая обработка остальных callbacks этого poll не прерывается.
|
||||
Владелец затем снимает media-привязки, уничтожает ядро и освобождает uasync.
|
||||
Это используется также при отказе rollback авторской подготовки вложения, если SQL-транзакция
|
||||
Это используется также при отказе rollback авторской подготовки вложения или применения ответа о ключе, если SQL-транзакция
|
||||
осталась открыта: модуль вложений предварительно прекращает приём и снимает свой таймер/router.
|
||||
|
||||
Create уже подготавливает listeners, топологию/SQLite, router/proxy и мониторинг;
|
||||
|
||||
+11
-10
@@ -4,16 +4,17 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **chat_attachment: не подтверждать GRANT без сохранённого ключа получателя** — подтверждено26.10.2026.
|
||||
ak_receive игнорирует bind ключа в UPDATE. Один SQLITE_NOMEM оставляет key=NULL,но фиксирует state=2,
|
||||
отправляет настоящий RESULT_ACK;автор получает его,фиксирует state=4 и удаляет GRANT из outbox.
|
||||
Проверено на настоящем подписанном/зашифрованном обмене собственных A/S/B/C и readonly SQLite.
|
||||
Без отказа phase10 PASS;bind-fault ожидаемо exit1 после доказательства ложного ACK;
|
||||
UPDATE ABORT:нет ACK,state=1,GRANT остаётся у автора,штатный повтор затем phase10 PASS.
|
||||
Нужна проверенная атомарная операция key+state+outbox с commit до ACK и корректным rollback/fault/retry.
|
||||
Стенд /tmp/attachment-grant-audit.c/.mk;логи /tmp/attachment-grant-audit-{control,bind,trigger}.log
|
||||
и test.log в каталогах артефактов;точные пути/контракты — в [chat_audit_findings.txt](chat_audit_findings.txt),аудит приёма GRANT.
|
||||
По AGENTS.md аудит остановлен;runtime/wire/штатные тесты не менялись,предыдущий фикс send сохранён.
|
||||
[+] **chat_attachment: не подтверждать GRANT без сохранённого ключа получателя** — исправлено26.10.2026.
|
||||
Ответы REQUEST_ACK/GRANT/DENY/RESULT_ACK применяются собственной проверенной транзакцией key+state+outbox.
|
||||
Проверяются все SQL-этапы и ожидаемые числа строк;ACK/событие — после commit,внешняя транзакция отклоняется.
|
||||
Полный rollback сохраняет прежний ключ/запрос/очередь;оставшаяся открытой БД требует stop владельцем после poll.
|
||||
Новый test_attachment_results:105 отказов/повторов четырёх ответов,readonly-снимки в ACK/событии,
|
||||
commit veto,ABORT/IGNORE,внешняя транзакция,дубликаты/конфликты/backpressure и rollback fault.
|
||||
Штатный сетевой test_encrypted_attachment дополнен bind-fault→без ACK→повтор GRANT→расшифровка.
|
||||
До Pull native8/8 и ASAN/UBSan/LSan8/8 PASS,detect_leaks=1;исходный сетевой стенд теперь phase10 PASS.
|
||||
Итоги интеграции с доработками редактирования чата и полный прогон приводятся отдельно в
|
||||
[chat_audit_findings.txt](chat_audit_findings.txt),исправление приёма GRANT;/tmp/grant-key-fix-*.log.
|
||||
Полный аудит attachment/chat остаётся частичным;дальнейший аудит остановлен по просьбе пользователя перед Pull.
|
||||
|
||||
[+] **chat_attachment: проверять сохранение ключа до передачи source и запуска worker** — исправлено26.10.2026.
|
||||
Авторская подготовка фиксируется собственной BEGIN IMMEDIATE/COMMIT до передачи source и запуска worker.
|
||||
|
||||
Reference in new issue
Block a user