MAM
append использует один sync вместо четырёх, SM checkpoint — один
вместо двух.
Checksummed redo journals сохраняют commit-before-ACK и
восстанавливают
native archive/SM JSON exports после аварии.
- Ограничены рост журналов, ротация и tombstone GC. Старый `.rappend` и
legacy
JSON импортируются. Retain/save/purge не возвращают удалённые записи.
- Recovery синхронизирует валидный journal перед публикацией состояния;
проверка
checksum не заменяет durability barrier. EIO при adoption блокирует
startup
или offline handoff. Новые fault fixtures проверяют сохранность
журнала и retry.
- Replay SM проверяет checksum/JSON всех frames, но создаёт и валидирует
полный
Record только для последнего snapshot, сокращая работу с superseded
queues.
- `message-processing-slow` содержит времена MAM отправителя/получателя,
доставки, carbons, offline/push и handled, а также число
ресурсов/копий.
Payload и секреты не добавляются в логи.
- Добавлена offline команда `storage-checkpoint CONFIG`: durable экспорт
и
передача archive writer/подготовка отката на legacy Rust. Не
запускайте другого
writer и не удаляйте journals до успешного завершения команды.
- Новые crash, partial-write, corruption, EIO, recovery, handoff и
latency
регрессии включены в GitHub Actions через verify-local.sh; отчёты
сохраняются.
Измерения, ограничения и эксплуатация:
[docs/DURABLE-MESSAGE-IO.md](docs/DURABLE-MESSAGE-IO.md),
[docs/VALIDATION-0.8.3.md](docs/VALIDATION-0.8.3.md).
ролей,
членства и ограниченной истории без MAM. Изменение фиксируется до
публикации
ответа; при ошибке записи состояние комнаты откатывается.
- Crash recovery использует последнее сохранённое поколение после
SIGKILL,
включая временные комнаты. Heartbeat обновляет живое членство;
ожидающие записи сохраняют исходный deadline через повторные
перезапуски.
`muc_recovery_grace_period`: по умолчанию 300 секунд, пределы
1..604800.
- Подтверждённые выходы, смена nick, ролей и политик комнаты не
заменяются
старой записью восстановления. Native config/state остаются экспортом
для
Prosody; согласованное восстановление Rust использует собственный
sidecar.
- Исправлены MUC probe, неизвестные типы presence, вход без MUC `<x/>`,
ошибки
доставки и статус 333. Обычные presence extensions сохраняются в живом
обмене; поддельная MUC identity фильтруется. `subject` вместе с `body`
либо
`thread` не изменяет тему комнаты.
- Подключены `muc_max_rooms`, `restrict_room_creation`, политики
регистрации
и зарегистрированного nick, `muc_tombstone_expiry`; добавлены
встроенные
административные ad-hoc команды уничтожения комнат и изменения
affiliation.
- Hub сохраняет resumable XEP-0198 сессии, счётчики и очередь. Resume
после
перезапуска доступен на новом TLS/SASL-транспорте через legacy SASL и
SASL2.
Действующие приватные SM-записи восстанавливают логические сессии и
MUC
до открытия listeners: offline-доставка попадает в очередь,
синтетический
join и история повторно не отправляются. SM resume не требует
дополнительной
available presence; без SM восстановление MUC требует новой
аутентификации
точного полного JID и available presence либо явного MUC-входа.
Входящий handled-счётчик обновляется после обработки. Сокеты TCP/TLS
не сохраняются; неопределённая сетевая отправка допускает повторную
доставку.
- Известные встроенные MUC-возможности Prosody отображаются на
Rust-реализацию.
Произвольные Lua/community-модули не исполняются; неизвестные явно
включённые
MUC-модули отклоняются при запуске. Общие и host `modules_disabled`
учитываются
для vCard и occupant-id.
Порядок восстановления, ограничения хранения и отката на Prosody:
[docs/MUC-RECOVERY.md](docs/MUC-RECOVERY.md).
Проверка: 293 Rust tests, Clippy/fmt/release, полный сетевой прогон, 500
TLS
MUC+SM ресурсов с SIGKILL/resume и native reference — успешно.
Подробности: [docs/VALIDATION-0.8.0.md](docs/VALIDATION-0.8.0.md).