Record attachment index recovery and immutable settings verification
This commit is contained in:
1 parent
55328e18af
commit
795f930dd6
2 files changed
+99
No files matched your search
@@ -1032,3 +1032,86 @@ Desktop vibechat и Android assembleDebug PASS;GUI/Android host11/11 PASS,вкл
|
||||
Три задачи закрыты. Полный аудит chat/attachment остаётся частичным:привязка
|
||||
message_id/hash,наблюдение manifest,запрос загрузки,очередь отправки и восстановление
|
||||
требуют оставшейся сверки. Внешний checklist сохраняет[~],отчёты туда не добавляются.
|
||||
|
||||
Идентичность и восстановление локального индекса — 27.10.2026,продолжение от6803369a
|
||||
|
||||
Авторская привязка message_id/hash теперь неизменяема:собственная транзакция,
|
||||
проверенные7bind/step/changes/finalize/commit,точный повтор разрешён. Подтверждённый
|
||||
старый bind NOMEM возвращал ложный0:/tmp/attachment-binding-negative.log.
|
||||
UUID-префикс принимает только канонический base64url;15 aliases завершающих битов,
|
||||
ошибки padding и NULL отвергаются с сохранением выходного массива.
|
||||
|
||||
Observe собственной транзакцией сверяет полную идентичность channel/UUID/message/
|
||||
author/hash. Точный дубликат не перезаписывает ключ,метаданные и состояние. Отказы
|
||||
SQL/OOM возвращают-1 для повтора,неверный manifest/коллизия — -2 без повтора.
|
||||
Wanted атомарно сохраняет намерение/сброс ошибки и ready отсутствующего cache;
|
||||
downloaded сохраняет наличие и policy wanted. Новая проверенная передача очищает
|
||||
ошибку,обнаружение прежнего cache сохраняет её;неизменный повтор не посылает событие.
|
||||
Все эти операции отклоняют внешнюю транзакцию и уведомляют только после commit.
|
||||
|
||||
Отказ производного индекса не отменяет MSG_RECEIVED уже сохранённой истории.
|
||||
Backfill перечитывает подписанные сообщения,отделяет текущий batch перед работой,
|
||||
повторяет SQL-ошибки через2с. Лимит16 каналов и полный scan при переполнении проверены
|
||||
17 настоящими каналами. Startup включён до первичного backfill;manual download
|
||||
восстанавливает индекс перед wanted. История не содержит и не восстанавливает ключ.
|
||||
Настоящий сетевой A/S/B/C сценарий проверяет отказ первого observe наB,событие при
|
||||
reader_history1/index0 и восстановленную точную запись перед первым REQUEST.
|
||||
|
||||
Предположение об усечении достижимого manual manifest на4096байтах было неверным:
|
||||
db_sync ограничивает весь подписанный JSON4000байтами. Лишнее динамическое выделение
|
||||
убрано;обработчики используют DB_SYNC_MESSAGE_MAX. Постоянный тест передаёт3845байт
|
||||
тела с23 настоящими подписанными блоками до порта загрузки;превышение общего лимита
|
||||
отклоняется до публикации с точным сообщением. Диагностика повторной активной
|
||||
передачи относится к media и явно сохраняет существующую задачу.
|
||||
|
||||
Outbox отдельно фиксирует retry_at=now+5 до сети,проверяя чтение,команду и одну
|
||||
обновлённую строку. Tick10с,до16 команд.12 инъекций,ABORT/IGNORE/veto и rollback
|
||||
проверяют отсутствие отправки до commit,точную прежнюю дату и успешный повтор.
|
||||
Idle scan освобождает транзакцию через ROLLBACK,не вызывает commit hook.
|
||||
Первый профиль6/7 выявил лишний idle commit при настоящем veto;исправлен runtime,
|
||||
исходное ожидание теста сохранено. Итог7/7:/tmp/attachment-pump-idle-profile.log.
|
||||
|
||||
Recovery при открытой транзакции теперь откладывается до её завершения:непроверенное
|
||||
удаление истории не даёт права удалять опубликованные файлы. Init также отклоняет
|
||||
внешнюю транзакцию до изменения таблиц/таймера/router. Постоянная регрессия удаляет
|
||||
историю внутри BEGIN,проверяет прежние файлы/readonly record и открытую транзакцию
|
||||
после destroy,затем rollback/restart сохраняют тот же снимок.
|
||||
Первые два запуска этой новой фикстуры остановились ДО операции из-за моей ошибки
|
||||
sizeof(content)-1 вместо фактически записанных sizeof(content);это не отрицательные
|
||||
доказательства runtime-дефекта. Фикстура исправлена,итог PASS:
|
||||
/tmp/attachment-recovery-fixed.log. Подтверждение исходного риска здесь основано на
|
||||
чтении recovery,а не на этих падениях фикстуры.
|
||||
|
||||
Дополнены test_chat_attachment:13 SQL-отказов binding,25 observe,60 wanted/downloaded,
|
||||
полные readonly-снимки до событий,ABORT/IGNORE/veto/rollback/foreign transaction,
|
||||
recovery/startup/17-channel overflow/manual manifest. test_attachment_requests
|
||||
сохраняет прежние247 входящих и52 исходящих инъекции,добавляет12 outbox.
|
||||
|
||||
Настройки и локальные события — 27.10.2026
|
||||
|
||||
chat_setting_get_state писал в const state через общий int_buf и затирал предыдущее
|
||||
числовое представление при следующем getter. Теперь int_text хранится по индексу,
|
||||
обновляется только setter;чтение не меняет ни байта и не выделяет память. NULL-имя
|
||||
безопасно,integer getter для строкового типа возвращает def. Валидация выполняется
|
||||
до lazy init,ошибка не меняет нулевое/заполненное состояние. Пустой путь разрешён.
|
||||
Сохранение state отделено от runtime apply;пустой общий apply удалён. LAN failure
|
||||
возвращает-3,желание сохранено,идентичный повтор повторяет apply. Контракт уточнён
|
||||
в chat_setting.h;существующие потребители читают настройки при обращении/старте.
|
||||
test_chat_setting:const snapshot,ссылки двух чисел,копирование состояния,NULL/type
|
||||
defaults,ошибки/переполнение,255байт/очистка пути,отказ LAN и повтор. Native PASS,
|
||||
ASAN/UBSan/LSan PASS. Это дополнительная штатная цель,общее число стало213.
|
||||
|
||||
chat_local.c полностью сверен с header:доставка ссылки не запускает JOIN,permissions
|
||||
проверяются в callback,nonce/подпись обновляют адреса только offline-узла во всех
|
||||
группах,desktop/mobile lifecycle uasync. Уточнены lifetime/события/apply в header.
|
||||
chat_event дополнил отсутствовавшие диагностические имена48–54/58/60/65–67 и fallback
|
||||
для незанятого ID;preparation отвергает NULL target/UUID,header уточняет dm: prefix
|
||||
и запрет дампа LOCAL_INVITE. Полная сверка всех event payload ещё продолжается.
|
||||
|
||||
Проверки этого блока до общей проверки:
|
||||
Native7/7:/tmp/attachment-pump-idle-profile.log;settings/attachment2/2:
|
||||
/tmp/chat-settings-profile.log. ASAN/UBSan/LSan17/17,detect_leaks=1,halt_on_error=1:
|
||||
/tmp/chat-index-recovery-asan-results.log,/tmp/chat-index-recovery-asan-logs;
|
||||
изолированная согласованная копия на40ae7827. Последующая правка имён событий0995a1ea
|
||||
в этот sanitizer-профиль не входит. Полный check/desktop/Android запущены отдельно,
|
||||
их результат не подразумевается этим промежуточным отчётом. Аудит остальных chat/ продолжается.
|
||||
@@ -4,6 +4,22 @@
|
||||
|
||||
## Текущие задачи
|
||||
|
||||
[+] **chat_attachment: неизменяемая привязка, атомарный локальный индекс и восстановление из подписанной истории** — 27.10.2026.
|
||||
bind проверяет собственный commit и запрещает замену message_id/hash; observe сохраняет прежний ключ/флаги точного дубликата.
|
||||
wanted/downloaded обновляются своей транзакцией, события идут после commit; повторное обнаружение cache не сбрасывает error.
|
||||
Отказ производного индекса не скрывает сохранённое сообщение: backfill восстанавливает запись, включая startup/manual download;
|
||||
очередь16 каналов имеет полный scan при переполнении. Ключ из истории не восстанавливается.
|
||||
Outbox фиксирует retry_at до сети; idle scan не вызывает commit hook. Recovery при открытой транзакции сохраняет файлы.
|
||||
Native профиль7/7 и последующие settings/attachment2/2 PASS;ASAN/UBSan/LSan17/17 PASS,detect_leaks=1.
|
||||
Подробности:[chat_audit_findings.txt](chat_audit_findings.txt),«Идентичность и восстановление локального индекса».
|
||||
|
||||
[+] **chat_setting: чтение const без изменения буфера, атомарный отказ валидации и повтор применения LAN** — 27.10.2026.
|
||||
Числовые строки хранятся отдельно по настройке и обновляются setter; NULL/строковый тип дают default.
|
||||
Неудачный set не инициализирует/не меняет state;пути можно очистить. Ошибка apply LAN возвращает -3,
|
||||
сохраняя желаемое значение;идентичный повтор повторяет применение. Удалён пустой общий apply.
|
||||
Новый test_chat_setting проверяет неизменность всех байтов,независимые копии,границы/ошибки и apply retry;
|
||||
native и ASAN/UBSan/LSan PASS. Общая проверка новых изменений записывается отдельным итогом аудита.
|
||||
|
||||
[+] **chat_attachment: исходящий REQUEST и outbox фиксируются вместе до уведомления/отправки** — 27.10.2026.
|
||||
Собственная транзакция повторно проверяет состояние файла,создаёт ровно один запрос и очередь.
|
||||
Внешняя транзакция откладывает весь tick;неудачный rollback не перезапускает таймер после quiesce/stop.
|
||||
|
||||
Reference in new issue
Block a user