docs(chat): describe complete JSON exports and listing failure tests

This commit is contained in:
evgeny committed 2026-10-27 06:06:55 +01:00
1 parent cb0b71aec1
commit 463041a87f
3 files changed
+58

No files matched your search

+45
View File
@@ -1388,3 +1388,48 @@ chat_member/radio,avatar,channel/admin/services/member_files network,JOIN,
attachment,feedback/poll. Desktop/APK build и JVM155/155 (31 suite) PASS;
GUI/Android audio12/12 PASS:/tmp/chat-member-final-{desktop-build,android-build,
gui-results}.log. chat_member.h отмечен[V];core/headless и весь chat/ продолжаются.
JSON-интроспекция — 27.10.2026,после774fb66b
Точный negative control:/tmp/chat-json-negative.log. Допустимое подписанное
имя канала с ASCII01 возвращалось channels_json без полного escaping:
json_valid=0,ожидаемое падение нового test_chat_json. Старый channels writer
также увеличивал указатель по неограниченному snprintf-return;нулевой/малый
буфер не проверялся. Старые listing игнорировали ряд bind/step/finalize и
могли вернуть успешный префикс при отказе вложенного чтения/последующих строк.
Channels/members теперь строят checked strbuf с общим полным JSON escaping,
копируют результат после завершения всех SELECT и проверки caller capacity.
Messages проверяет оба bind,step/finalize и арифметику оставшегося буфера;
ошибка очищает prefix. Все API сбрасывают out_len0,очищают допустимый buf,
отклоняют неверный context/канал/offset/размер и не пишут при capacity0.
Профильные TEXT читаются без сужения/потери hidden NUL;неверные key/address
типы/размеры отклоняются. Messages сериализует поля SQLite json_object.
Полные имена/8192-byte adm_tags не обрезаются;IPv6 форматирует inet_ntop,
protocol6 показывается TCP+REALITY. Deleted-member показывается offline.
После собственного commit канала runtime может быть отложен. Channels_json
проверяет наличие history-таблицы и показывает committed канал с msgs0,
не создавая таблицы во время чтения. Прочие SQL-ошибки count/peers/addresses
возвращаются как ошибки чтения,а не нулевые счётчики. Caller-транзакция не
завершается при успешном/неуспешном listing. Header/CLI контракт уточнён.
Бинарный snapshot member.h явно отделён от расширенной JSON-интроспекции.
Новый test_chat_json:36 prepare/bind/step/finalize/text/strbuf-отказов с
успешными повторами,включая SQL-ошибку после полностью сериализованной строки;
проверяются out_len0/пустой output и неизменность total_changes. Нулевые,
малые,ровно-недостаточные и ровно-достаточные capacity защищены canaries.
Проверен roundtrip каждого ASCII-control1..31,UTF-8/quotes/backslash,
255-байтового имени с расширением escaping,8192-byte tags,IPv4/IPv6/REALITY.
Hidden NUL,неверные размеры/типы ключей/адресов и неканонический stored ID
отклонены без усечения;caller txn сохраняется. Настоящий отказ u_calloc
db_sync_instance_add после commit оставляет новый канал видимым с msgs0;
ensure_channel_ready повторно активирует runtime. Allocation balance восстановлен.
PASS:/tmp/chat-json-final-unit.log. До расширения matrix native5/5 PASS:
/tmp/chat-json-first-{test,adapter,schema,poll,services}.log. Общая проверка
runtime29e15254/testcb0b71ae выполняется отдельно;весь chat_core/chat/ ещё частичен.
Чтобы повторные проверки не заполнили tmpfs,завершённые собственные fixture
utun-channel-create/utun-member-sql перенесены в
/home/user/.cache/utun-audit/completed-fixtures;прежние пути сохранены symlink.
Недоступные каталоги root не трогались;чужие артефакты не удалялись.
+10
View File
@@ -4,6 +4,16 @@
## Текущие задачи
[+] **chat_core JSON: полное escaping и атомарный результат чтения** — 27.10.2026.
Подтверждён невалидный JSON для допустимого подписанного имени с ASCII01. Channels/members используют
checked strbuf и полное escaping;все listing проверяют SQL-этапы,включая bind/finalize/вложенные запросы.
Отказ оставляет out_len=0 и пустой допустимый buffer;нулевой/точный размер не повреждает canaries.
Скрытый NUL/неверный тип/размер полей отклоняются. Committed-канал без history-таблицы виден с msgs=0;
чтение не меняет БД и не завершает транзакцию caller. Новая test_chat_json:36 отказов с повторами,
ошибка после готовой строки,все ASCII controls,UTF-8/длинные имена/8192-byte tags,IPv4/IPv6/REALITY,
повреждённые строки и настоящая deferred activation/retry PASS. Общие результаты — в отчёте.
Подробнее:[chat_audit_findings.txt](chat_audit_findings.txt),«JSON-интроспекция».
[+] **chat_member/status: полный снимок,границы формата и committed mute** — 27.10.2026.
Подтверждён ложный успех снимка после finalize error;теперь SQL/память не дают частичный список.
Список ограничен65535 записями,сортируется qsort (online,unsigned node_id);строки wire дополняются NUL.
+3
View File
@@ -35,12 +35,15 @@ status
channels
Список всех каналов с метаданными: id, имя, owner, число мемберов,
число сообщений, сколько онлайн.
Уже сохранённый канал с отложенной подготовкой истории виден с msgs=0.
Пример: chatcli channels
members <ch_id>
Список участников канала с полным состоянием:
node_id, имя, online, connected, публичные ключи (x25519/ed25519 hex),
адреса (ip, port, proto, rtt).
proto: UDP, TCP или TCP+REALITY; deleted-участник показывается offline.
Строки возвращаются целиком с JSON escaping;ошибка SQL/размера не даёт частичный успешный список.
Пример: chatcli members 12345
messages <ch_id> [count]