Record verified author decision fix and close its audit task
This commit is contained in:
1 parent
7649981cbc
commit
ef8e8f2cb5
2 files changed
+82
-10
No files matched your search
@@ -718,3 +718,72 @@ Outer:/tmp/attachment-decision-audit-outer.log,
|
||||
и документация;runtime,wire,схема и штатные тесты не менялись. Новые fullcheck/sanitizers/
|
||||
GUI/APK не запускались. Отметки attachment/chat остаются[~],чеклист не дополнялся отчётом.
|
||||
По AGENTS.md:10 дальнейший аудит остановлен на подтверждённой несогласованности.
|
||||
|
||||
Исправление решения автора — 27.10.2026, runtime8a7f4469
|
||||
|
||||
chat_attachment_decide проверяет аргументы/инициализацию и autocommit до обращения
|
||||
к правам;внешняя транзакция отклоняется без её commit/rollback или изменения данных.
|
||||
Собственная BEGIN IMMEDIATE включает проверку подписанного мембера,авторства/ключа,
|
||||
переход ровно одного incoming=1/state=0 и запись GRANT/DENY в outbox. Проверяются
|
||||
prepare,каждый bind,step,changes=1,finalize и COMMIT. Уже принятое решение не меняется.
|
||||
ak_queue остаётся общей операцией записи с проверкой всех SQL-этапов/одной строки;
|
||||
границей транзакции управляет вызывающий. ak_authorized также проверяет все bind/finalize.
|
||||
Сохранены повторные проверки допуска при входящем REQUEST и перед отправкой GRANT.
|
||||
|
||||
При отказе finalize закрывает statement и общий ak_rollback отменяет всю собственную
|
||||
транзакцию. Если она осталась открыта,применяется прежний порядок quiesce/stop и
|
||||
освобождения владельцем после poll. Ошибки содержат channel/peer/command/stage/rc;
|
||||
успех логирует committed state/command и короткий message_id,секреты не выводятся.
|
||||
Возврат0 и одно событие изменения следуют после commit. Trampoline при отказе
|
||||
передаёт существующее событие success=0;успешное событие из decide не дублируется.
|
||||
Формат сети/БД/API не менялся,SQLite synchronous остаётся установленным ядром.
|
||||
|
||||
Новый Linux test_attachment_decisions использует настоящие core/SQLite и подписанного
|
||||
участника:корректные join и invitation,проверка доверенного Ed25519,история создана
|
||||
через chat_core_submit_message. Строка локального вложения создаётся самой фикстурой;
|
||||
это проверка решения/транзакции,а реальная публикация и доставка покрываются сетевым тестом.
|
||||
116 SQL-отказов/повторов:approve/deny × отсутствующая/существующая outbox ×29 точек:
|
||||
BEGIN/COMMIT,member lookup prepare/bind/step/finalize,author lookup prepare/четыре bind/
|
||||
step/finalize,state и outbox prepare/четыре bind/step/finalize/changes.
|
||||
Отдельный readonly reader в событии проверяет key/error/incoming/state/command/retry_at/
|
||||
created_at и независимый соседний ключ. Отказы не дают события и сохраняют точные поля.
|
||||
Дополнительно настоящий commit hook veto,ABORT/IGNORE для состояния и INSERT/UPDATE
|
||||
outbox,внешняя транзакция с сохранением её собственных записей,прямой вызов и trampoline,
|
||||
ровно одно успешное GUI-событие,удалённый мембер,неверное направление,повтор того же
|
||||
и противоположного решения,неверные аргументы. Отказ rollback оставляет прежние данные
|
||||
видимыми reader,снимает router callback и останавливает ядро;закрытие БД владельцем
|
||||
отменяет незавершённое решение. Баланс u_malloc восстановлен.
|
||||
|
||||
Штатный test_encrypted_attachment дополнен двумя исходными сценариями автора:
|
||||
RAISE(IGNORE) вставки GRANT и внешняя транзакция теперь дают-1,pending2,outbox0,event0.
|
||||
После настоящего restart автора повтор решения успешен;readonly reader в событии
|
||||
видит state2/GRANT1. Далее тот же тест проверяет отказ первого bind GRANT у B,полный
|
||||
rollback без ACK,настоящий повтор,расшифровку,перезапуск B,дубликат,cache restore и
|
||||
удаление канала до phase10 PASS. Новых подмен маршрутов/подписей/доставки не добавлено.
|
||||
Первый подробный лог:/tmp/utun_encrypted_attachment_QkrW0q/test.log,строки135–176.
|
||||
|
||||
Native build PASS;первичный профиль decisions/results/encrypted_attachment3/3 PASS.
|
||||
Полный ./check.sh211/211 PASS,0 failed/0 skipped,proxy9/9,burst1/1,load8/8,
|
||||
134217728байт,exit0,177с. Отдельный netns имеет IPv4/IPv6 loopback,сеть хоста не менялась.
|
||||
Итог:/tmp/attachment-decision-fix-full-check.log,полные /tmp/attachment-decision-fix-full-logs.
|
||||
|
||||
ASAN/UBSan/LSan15/15 PASS,detect_leaks=1,halt_on_error=1:decisions/results/chat_attachment/
|
||||
encrypted_attachment/attachment_send/chat_admin/services/instance_contract/media_primitives/
|
||||
db_sync/db_sync_integrity/db_sync_schema/chat_feedback/dm_history/android_replies.
|
||||
Копия /tmp/utun-grant-key-sanitizers содержит тот же runtime и тесты;core/libuasync/Opus
|
||||
собраны согласованно с address,undefined. Настройка Opus изменена только в копии.
|
||||
Первый configure был заблокирован sandbox при запуске проверочного бинарника;
|
||||
повтор вне sandbox и обе сборки завершились успешно. Итоги и полные логи:
|
||||
/tmp/attachment-decision-fix-asan-results.log,/tmp/attachment-decision-fix-asan-logs;
|
||||
сборки:/tmp/attachment-decision-fix-asan-{build,tests-build}.log.
|
||||
|
||||
Desktop vibechat и Android APK assembleDebug PASS. GUI/Android host11/11 PASS:
|
||||
group_edits,dm_deletion,message_events,channel_replies,utun_node и6 сценариев
|
||||
android_audio_lifecycle,включая core_stop/restart_core_stop. Логи:
|
||||
/tmp/attachment-decision-fix-{build,core-build,tests-build,desktop-build,android-build,
|
||||
gui-results,native-initial}.log;новая одиночная регрессия:/tmp/attachment-decision-fix-decisions.log.
|
||||
|
||||
Задача закрыта;контракт .h,encrypted_attachments.md и service_lifecycle.md согласованы.
|
||||
Полный аудит attachment/chat остаётся частичным:REQUEST,создание исходящего запроса,
|
||||
файловые completion/delete/recovery требуют отдельной дальнейшей сверки. Отметки[~]
|
||||
внешнего чеклиста сохранены,отчёт туда не добавлялся. Windows/FreeBSD не проверялись.
|
||||
+13
-10
@@ -4,16 +4,19 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[ ] **chat_attachment: фиксировать решение автора вместе с исходящим ответом до успеха/UI** — подтверждено26.10.2026.
|
||||
chat_attachment_decide использует SAVEPOINT и ak_queue без проверки числа записанных строк outbox.
|
||||
Пропуск INSERT GRANT через временный RAISE(IGNORE) даёт0/событие,state2 без очереди;получатель ждёт ключ бессрочно.
|
||||
Во внешней транзакции0/событие приходят до commit;последующий rollback отменяет решение и очередь.
|
||||
Оба сценария подтверждены на текущей A–S–B/C-фикстуре,readonly-снимками и restart автора;allocations0->0.
|
||||
Требуется собственная проверенная транзакция state+outbox,отказ внутри внешней транзакции,
|
||||
prepare/bind/step/changes/finalize/commit и полный rollback;успех/событие только после commit.
|
||||
Нужны постоянные регрессии обоих отказов и настоящего повтора решения с доставкой.
|
||||
Отчёт:[chat_audit_findings.txt](chat_audit_findings.txt),«Аудит решения автора»;/tmp/attachment-decision-audit-*.
|
||||
Runtime не изменён;аудит остановлен по AGENTS.md:10,chat_attachment и encrypted_attachments остаются[~].
|
||||
[+] **chat_attachment: фиксировать решение автора вместе с исходящим ответом до успеха/UI** — исправлено27.10.2026.
|
||||
Собственная BEGIN IMMEDIATE/COMMIT включает проверку прав,state и outbox;внешняя транзакция остаётся нетронутой.
|
||||
ak_queue проверяет все SQL-этапы и одну строку,транзакцией владеет вызывающий;допуск автора проверяет finalize.
|
||||
Успех/одно событие — после commit,ошибка сохраняет прежние строки;открытая после rollback БД требует stop владельцем.
|
||||
Trampoline сообщает только ошибку команды,не дублируя успешное обновление. Новых API/форматов нет.
|
||||
test_attachment_decisions:116 отказов/повторов выдачи/отказа с пустой/существующей очередью,
|
||||
настоящий commit veto,ABORT/IGNORE,внешняя транзакция,мембер/направление/повтор,GUI и rollback fault.
|
||||
Readonly-снимки в событии проверяют точные committed key/state/outbox/retry/created и соседний ключ;allocations0->0.
|
||||
Сетевой тест:оба отказа автора→pending без события/очереди→restart→повтор→commit→GRANT→расшифровка phase10 PASS.
|
||||
Build/check.sh211/211 PASS,0 skipped,proxy9/9,burst1/1,load8/8 (134217728байт),177с.
|
||||
ASAN/UBSan/LSan15/15 PASS,detect_leaks=1;desktop/APK build PASS,GUI/Android host11/11 PASS.
|
||||
Отчёт:[chat_audit_findings.txt](chat_audit_findings.txt),«Исправление решения автора»;/tmp/attachment-decision-fix-*.
|
||||
Полный аудит attachment/chat остаётся частичным;отметки chat_attachment и encrypted_attachments остаются[~].
|
||||
|
||||
[+] **chat_attachment: не подтверждать GRANT без сохранённого ключа получателя** — исправлено26.10.2026.
|
||||
Ответы REQUEST_ACK/GRANT/DENY/RESULT_ACK применяются собственной проверенной транзакцией key+state+outbox.
|
||||
|
||||
Reference in new issue
Block a user