{
  "schemaVersion": 1,
  "updatedAt": "2026-08-10",
  "events": [
    {
      "id": "2026-08-10-vmechtu-1-0-3-66",
      "date": "2026-08-10",
      "type": "release",
      "status": "live",
      "statusLabel": "В production",
      "version": "ВМечту 1.0.3+66",
      "title": "История стала устойчивее, управление — понятнее",
      "summary": "Версия «ВМечту» 1.0.3+66 вышла в браузере и на Android. Сборка для macOS прошла проверку Apple и опубликована на той же линии AYS.",
      "highlights": [
        "История загружается страницами и не путает порядок сообщений.",
        "Непрочитанное начинается с момента, когда человек действительно вступил в сообщество.",
        "При удалении группы или канала сервер проверяет размер сообщества и обязательные подписки.",
        "Сборка 66 принята App Store Connect и ожидает рассмотрения Apple."
      ]
    },
    {
      "id": "2026-08-10-consent-lifecycle-64",
      "date": "2026-08-10",
      "type": "release",
      "status": "live",
      "statusLabel": "В production",
      "version": "ВМечту 1.0.3+64",
      "title": "Согласия, выход и удаление теперь доведены до конца",
      "summary": "В версии 1.0.3+64 мы развели базовые правила AYS и дополнительные согласия конкретной дистрибуции. Заодно собрали полный порядок выхода и удаления сообществ.",
      "highlights": [
        "Старые клиенты входят по прежней схеме — новый шаг им не навязывается.",
        "Участник выходит сам. Удалить сообщество может только его создатель.",
        "Обязательный канал нельзя снести случайным нажатием.",
        "Удалённый аккаунт пропадает из поиска, контактов и списка участников."
      ]
    },
    {
      "id": "2026-08-10-short-public-aliases",
      "date": "2026-08-10",
      "type": "feature",
      "status": "live",
      "statusLabel": "В production",
      "version": "AYS Backend",
      "title": "Короткие адреса оставили под ручным контролем",
      "summary": "Иногда нужен публичный адрес из двух символов. Самостоятельно забрать такой адрес нельзя: его назначает оператор, а обычное правило начинается с трёх символов.",
      "highlights": [
        "Каждое назначение короткого адреса остаётся в операторском журнале.",
        "Уникальность и зарезервированные слова проверяет сервер.",
        "Занятый адрес нельзя перехватить через обычную регистрацию.",
        "Кириллический адрес «хо» проверен на рабочем профиле."
      ]
    },
    {
      "id": "2026-08-10-album-notification",
      "date": "2026-08-10",
      "type": "feature",
      "status": "live",
      "statusLabel": "В production",
      "version": "AYS Backend",
      "title": "Один альбом больше не звенит несколько раз",
      "summary": "Фотографии и видео по-прежнему лежат в истории отдельными сообщениями. Но уведомление на весь альбом теперь приходит одно.",
      "highlights": [
        "Уведомление запускает первый элемент, остальные сохраняют порядок.",
        "История, непрочитанное и доставка продолжают учитывать каждый файл.",
        "Исправление сделано на сервере. Переустанавливать приложение не нужно.",
        "Схема проверена в личных диалогах, каналах и Guest Inbox."
      ]
    },
    {
      "id": "2026-08-08-rich-text-stickers",
      "date": "2026-08-08",
      "type": "feature",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "AYS 1.0.3 line",
      "title": "Форматирование, звуки и стикеры собраны в одну линию",
      "summary": "Текст форматируется нативно и не исполняет чужой HTML. Наборы стикеров теперь можно посмотреть до установки.",
      "highlights": [
        "Жирный текст, курсив, подчёркивание, зачёркивание, код и ссылки рисует само приложение.",
        "Резервный звук включается только при пропущенном push и не дублирует его.",
        "Облачный набор сначала виден в каталоге, потом его можно установить.",
        "Старый формат текста и зашифрованные сообщения продолжают работать."
      ]
    },
    {
      "id": "2026-08-08-extension-recipient-services",
      "date": "2026-08-08",
      "type": "integration",
      "status": "verified",
      "statusLabel": "Проверено",
      "version": "ВМечту build 58",
      "title": "Обращение из сервиса продолжается обычным диалогом",
      "summary": "Человек принимает обращение из локального сервиса и дальше общается в обычном чате. Второй запрос и отдельный транспорт для сообщений не нужны.",
      "highlights": [
        "Состав формы приходит с сервера и не зашивается в приложение.",
        "Поломка соседнего сервиса больше не закрывает рабочую форму.",
        "После проверки адресата открывается уже существующий диалог.",
        "Сценарий пройден на двух физических Pixel с реальной отправкой сообщения."
      ]
    },
    {
      "id": "2026-08-07-guest-inbox-0-8-0",
      "date": "2026-08-07",
      "type": "integration",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "Guest Inbox SDK 0.8.0",
      "title": "Форматированный текст заработал во внешнем приложении",
      "summary": "Guest Inbox показывает форматированный текст, подписи и ссылки. Выпущенные раньше приложения при этом продолжают получать старое поле текста.",
      "highlights": [
        "Поддержаны Markdown, очищенный HTML и структурированные диапазоны UTF-16.",
        "Скрипты, стили, битые диапазоны и опасные адреса не исполняются.",
        "Личные сообщения, каналы и общая лента используют один механизм показа.",
        "Старые декодеры по-прежнему получают поле text."
      ]
    },
    {
      "id": "2026-08-07-ays-case-site",
      "date": "2026-08-07",
      "type": "platform",
      "status": "live",
      "statusLabel": "В production",
      "version": "ays.su",
      "title": "«ВМечту» показан как работающий пример AYS",
      "summary": "Мы перестроили сайт AYS вокруг понятной схемы для локальных сообществ. «ВМечту» здесь нужен как доказательство: отдельный продукт на общем ядре уже работает.",
      "highlights": [
        "Сайт раскладывает AYS на ядро, локальную идентичность и сервисы.",
        "Мы не используем юридически неверные слова про сертификацию или аттестацию.",
        "Версии для компьютера и телефона проверены в реальном браузере.",
        "Опубликованные файлы сверены с исходниками по SHA-256."
      ]
    },
    {
      "id": "2026-08-07-media-sound-runtime",
      "date": "2026-08-07",
      "type": "feature",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "AYS media runtime",
      "title": "Звук настраивается, видео открывается раньше",
      "summary": "Звук можно настроить для всего приложения или отдельного диалога. Видео получает лёгкую обложку и начинает открываться до полной загрузки.",
      "highlights": [
        "Одна настройка управляет системным push и звуком открытого приложения.",
        "Для видео создаётся отдельная лёгкая обложка.",
        "HTTP Range и ETag позволяют перематывать и продолжать загрузку.",
        "Длинная подпись в галерее больше не закрывает изображение."
      ]
    },
    {
      "id": "2026-08-06-lazy-history",
      "date": "2026-08-06",
      "type": "feature",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "Guest Inbox SDK 0.7.6",
      "title": "Чат больше не тащит всю историю сразу",
      "summary": "При открытии диалога AYS загружает последнее окно сообщений. Старые страницы подтягиваются только тогда, когда человек до них долистал.",
      "highlights": [
        "Основной клиент начинает с последних 30 сообщений.",
        "Guest Inbox — с 20 личных событий и пяти публикаций каналов.",
        "Старая страница приходит у видимой границы и не запрашивается повторно.",
        "Уже просмотренная история остаётся в кэше."
      ]
    },
    {
      "id": "2026-08-03-channel-service-rich-production",
      "date": "2026-08-03",
      "type": "integration",
      "status": "live",
      "statusLabel": "В production",
      "version": "Channel Service API",
      "title": "Сервисные каналы научились публиковать нормальные медиасообщения",
      "summary": "Интеграция может отправить в канал текст, фотографию, видео или альбом. У каждого канала свои ключи, а каждый файл проходит отдельную проверку.",
      "highlights": [
        "Поддержаны подписи, форматирование UTF-16 и альбомы из 2–10 файлов.",
        "Сервер проверяет тип, размер и SHA-256 каждого вложения.",
        "Повтор одного события не создаёт вторую публикацию.",
        "Рабочая проверка доставила фотографию и форматированный текст из Telegram во «ВМечту»."
      ]
    },
    {
      "id": "2026-08-01-unified-inbox",
      "date": "2026-08-01",
      "type": "feature",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "Guest Inbox SDK 0.5.x",
      "title": "Сообщения и новости собрались в одной входящей ленте",
      "summary": "Guest Inbox показывает непрочитанные личные сообщения и публикации подключённых каналов вместе. Источник данных остаётся на сервере AYS.",
      "highlights": [
        "Внешнее приложение получает безопасное представление без внутренних идентификаторов AYS.",
        "Новости доступны только для чтения и загружаются серверными страницами.",
        "Один порядок регистрации push работает с APNs и FCM.",
        "Полный мессенджер и встроенный Guest Inbox используют один сервер."
      ]
    },
    {
      "id": "2026-07-26-external-identity-guest-sdk",
      "date": "2026-07-26",
      "type": "platform",
      "status": "available",
      "statusLabel": "В основной линии",
      "version": "Guest Inbox SDK 0.1",
      "title": "Аккаунт AYS отделён от локального подтверждения",
      "summary": "Универсальный аккаунт живёт в AYS, а принадлежность к конкретному сообществу подтверждает внешний источник. Тогда же появился первый Guest Inbox SDK.",
      "highlights": [
        "Внешняя система подтверждает принадлежность и не получает внутреннюю модель AYS.",
        "Временный пользователь безопасно объединяется с подтверждённым аккаунтом.",
        "Guest Inbox получает ограниченную сессию для чтения и отдельные отметки просмотра.",
        "Каждая дистрибуция сама задаёт проверку участника и свою сборку."
      ]
    },
    {
      "id": "2026-07-25-distribution-split",
      "date": "2026-07-25",
      "type": "platform",
      "status": "live",
      "statusLabel": "Действует",
      "version": "AYS + ВМечту",
      "title": "AYS и «ВМечту» работают как два изолированных сервиса",
      "summary": "Общей остаётся кодовая база. Серверы, пользователи, сообщения, домены и deep-link’и у AYS и «ВМечту» разные. Связь между ними возможна в будущем через федерацию, но сейчас её нет.",
      "highlights": [
        "AYS использует ays.su, а «ВМечту» — мечта.москва.",
        "У каждого сервиса собственная база пользователей и история сообщений.",
        "Android-пакеты и deep-link’и разделены, поэтому приложения живут рядом на одном телефоне.",
        "Федерация остаётся будущим отдельным механизмом и сейчас не включена."
      ]
    },
    {
      "id": "2026-05-25-production-contour",
      "date": "2026-05-25",
      "type": "release",
      "status": "live",
      "statusLabel": "В production",
      "version": "AYS Backend",
      "title": "Сервер, контракты и клиент вышли одной согласованной линией",
      "summary": "Мы выровняли версии сервера, общих контрактов и клиента. Входящий трафик и push-шлюз после выпуска проверили отдельно.",
      "highlights": [
        "Миграции можно повторить без двойного изменения данных.",
        "Сервер собирается только с зафиксированными общими пакетами.",
        "Входящий трафик ws.ays.su снова проходит через безопасную схему nginx.",
        "Проверки live, ready и well-known отвечают HTTP 200."
      ]
    }
  ]
}
