Рой v0.14.202
Код + прежние BGE-M3 Q4 и Android arm64 llama.cpp в одном ZIP · опубликовано 7 ноября 2026
- Полный ZIP
- 495.5 МиБ
- Состав полного ZIP
- Код, модель и Android-движок
- Передача по Pages
- 50 авточастей
- Обновление существующей установки
- Только полный ZIP
- Хранилище
- SQLite · схема 15
cf211e7a93fb3cd8b86977c0975fd90ebf6bf919fbf7ad674bf2c068b832dd52
SHA-256 · переходный ZIP для старого updater4889390ec971a41915633cb50531bbeac16d05625094e701604d16d4dd44e9e2
Скачать переходный ZIP · 400 КБУже установлен Рой? Запустите прежний ярлык Termux:Widget или sh "$HOME/roy-personal-termux/start.sh". Текущий выпуск распространяется полным ZIP, чтобы установки со старым helper получили актуальную проверку резервной копии до замены кода. Перед обновлением создаётся проверенная копия SQLite схемы 15; при отказе проверки старый код и данные не меняются. Малый пакет вернётся после завершения перехода со старых установок.
Что нового в v0.14.202: Исправлен отказ RP при нехватке места для технического запаса: Рой подбирает проверенный непрерывный хвост отправляемой истории, не удаляя сообщения и сохраняя запас ответа. Если даже минимальный контекст не помещается, запрос не отправляется.
История .111 и более ранних выпусков
Из v0.14.119 сохранено: Кнопка внешности теперь работает без отдельной настройки Vision: сохранённый аватар по подтверждению отправляется на бесплатную подпись AI Horde Alchemy. Используется публичный анонимный доступ без дополнительных ключей; приоритет ниже, очередь волонтёров может ждать. Фото получают внешние волонтёрские узлы; чаты и другие поля не отправляются. Результат может быть английским и добавляется только в черновик; карточка не сохраняется автоматически. SQLite-схема 13 не меняется; тесты — синтетические, Android не проверялся.
Из v0.14.110 сохранено: В анкете появилась явная кнопка «Описать внешность по аватару». Она использует сохранённый аватар и только ваш заранее настроенный Vision-провайдер. Перед передачей изображения и до 2 000 символов поля внешности показывается подтверждение; чаты и остальные поля не отправляются. Описание добавляется в редактируемый черновик без автосохранения карточки. Новую/заменённую аватарку сначала сохраните и откройте снова. SQLite-схема 13 и личные данные не меняются; тесты — только синтетические, физический Android не проверялся.
Из v0.14.109 сохранено: Исправлен пропущенный локальный маршрут `/card-translation-retry.js`: без него браузер отклонял импорт card-ui.js и не запускал интерфейсные обработчики. Добавлен регрессионный тест, который проверяет все относительные JavaScript-imports против статической карты сервера. База SQLite и её схема 13 не менялись; исправление предназначено вернуть работу кнопок и загрузку чатов из существующей локальной базы. Функции retrieval и ограниченного перевода из .108 сохранены. Физический Android-тест не проводился.
Из v0.14.108 сохранено: Добавлен локальный BGE-M3 top-3 поиск старых исходных реплик для соло- и группового RP; последние 300 уже переданных сообщений исключаются. Второй embedding, keyword triggers и отдельный UI выдачи не добавлены. Перевод карточки ограниченно повторяет только подтверждённый terminal-отказ или завершённый пустой ответ; неопределённый POST не повторяется. Предыдущий live A/B baseline был «сводка + последние 8», не фактические продуктовые последние 300; это не прямое измерение прироста для окна 300. SQLite schema 13 сохранена.
Из v0.14.107 сохранено: У книг появились необязательные локальные сведения об источнике и ручная метка normal / primary / alternate. Метка не назначает книгу чату и только мягко помогает разрешать близкие по релевантности конфликты; она не подтверждает истинность источника. URL остаётся инертным HTTPS-текстом и автоматически не загружается. SQLite-схема 13 и правила пустых новых чатов сохранены.
Из v0.14.106 сохранено: Семантические фрагменты подключённых Лорбуков теперь корректно попадают в контекст; новый отбор эффективнее заполняет общий бюджет без повторов. На публичном искусственном A/B все gold-факты вошли в 19/20 составных контекстов против 9/20 у .105; на 70 одиночных запросах целевые записи найдены в 67/70 против 64/70. Это не гарантия для других корпусов и не Android-замер. Чатовая область видимости книг и SQLite-схема 13 сохранены.
Из v0.14.105 сохранено: Улучшен подбор контекста для составных вопросов к Лорбукам. Подключение книг к чатам, пустой список в новых чатах и общий список группы сохранены; SQLite-схема остаётся 13.
Из v0.14.104 сохранено: Лорбуки подключаются к конкретному личному или групповому чату, а не к персонажу. Старые книги остаются в библиотеке без автопривязки, новые чаты пустые, у группы один общий набор. Лексический fallback и семантический поиск ограничены подключёнными к текущей сцене книгами; сервер повторно проверяет ID. Удаление подключённой книги блокируется до отсоединения. SQLite-схема остаётся 13. Регрессия: три synthetic-теста Лорбуков, Python compile, JS syntax и integrity checks PASS. Horde и личная SQLite не использовались; физический Android/Vivaldi именно для .104 не проверялся. Личные данные не входят в ZIP.
Из v0.14.103 сохранено: закрыт P3 тотального аудита и исправлены два дефекта, найденные непрерывным живым сквозным сценарием. P3-1 отмечен CLOSED / WON’T FIX по решению владельца: подпись издателя релизов не внедрялась. В P3-2 статус обновления теперь читается из фактического data_dir текущего сервера, поэтому неканонический каталог данных больше не даёт ложный отказ только из-за домашнего пути; канонический updater и ограничение restart не ослаблены. В P3-3 из поставляемых card-ai-pair.js и card-ai-fill.js удалены мёртвые помощники третьего модельного судьи. Действующий путь сохранён: два независимых полных ответа разных моделей без третьего судьи, владелец сам выбирает, редактирует или отклоняет и отдельно сохраняет. Живой E2E нашёл ещё два серверных дефекта. Автоанализ больше не отклоняет текстовую ячейку мира только из-за русской словоформы: значение «открыты» теперь может подтверждаться дословной цитатой «дверь открыта». Точная цитата по-прежнему обязательна; антоним и несвязанная цитата отклоняются, а числа и другие точные типы не ослаблены. После перезапуска сервера завершённые обычные Horde ID больше не занимают три слота новых заданий: первый poll обновляет их безопасным GET, а действительно незавершённые задачи слоты сохраняют. BGE-M3 проверена на точном поставляемом GGUF через нативный x86_64 llama.cpp и продуктовые LocalEmbeddings, а полный semantic rank нашёл сохранённую хронику в E2E; дефект BGE не найден и её код не менялся. Сквозная цепочка на одноразовых синтетических взрослых данных и настоящем Horde прошла целиком: импорт CCv2 → живой RP → всегда включённый автоанализ → парная хроника с выбором владельца → semantic retrieval → CARD90-правка и перегенерация → backup/import в чистую среду. Регрессии P3 13/13, grounding 7/7, Horde restore slots 3/3, P1 37/37, выбранные P2 20/20, P2-5 16/16, CARD102-FIX 16/16, CARD74, BGE-M3 7/7, прямой установщик и фактический ярлык .102 → .103 PASS. Физический Android/Vivaldi именно для .103 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.102 сохранено: исправлен оставшийся выбранный владельцем P2-5 — сценовые листы других участников группы. Сценовые листы по-прежнему укладываются в общий бюджет 4 000 символов и прежний приоритет, но сборщик теперь различает лист полностью показанный, показанный частично и совсем не поместившийся. Ни один пропуск больше не молчит. Если лист отсутствует или обрезан, модель сразу после листов получает служебный блок с именами этих участников и прямым запретом придумывать их текущие шкалы, эмоции, статусы, вещи, навыки или известный социальный слой. Она должна опираться только на видимую переписку, публичные функции и отношения и не упоминать служебное ограничение в художественном ответе. Предупреждение входит в те же 4 000 символов; история, сохранённые листы и RP-контекст не расширяются и не сокращаются молча. Владелец в диагностике промпта видит отдельные числа непоместившихся и частично показанных чужих листов. Если все листы поместились полностью, предупреждения нет. Регрессия P2-5 16/16, выбранных P2 из .101 20/20, P1 37/37, CARD74, CARD102-FIX 16/16, прямой установщик и фактический ярлык .101 → .102 PASS. Новая живая генерация Horde для .102 не вызывалась. Физический Android/Vivaldi именно для .102 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.101 сохранено: исправлены три выбранных владельцем P2 тотального аудита. Gemma больше не имеет отдельного RP-потолка 48 000 символов: Gemma и Qwen используют общий wire-предел 90 000, а фактическую допустимость по-прежнему проверяют символьная оценка Horde, консервативный токенный потолок, контекст 31 000/подтверждённый резерв 25 000, запас и свежий online-воркер. Если полный промпт не помещается, он отклоняется до отправки; история автоматически не сокращается и модель не подменяется. Дословная цитата «Имя Фамилия — профессия» теперь правильно связывается с героем анкеты, как и обращение только по его фамилии. Проверка читает полное имя из одного–трёх слов: другое имя перед той же фамилией или чужая фамилия по-прежнему отклоняются как другой персонаж. Horde Images показывает подходящих по площади online-воркеров, крупнейший max_pixels и предпочитаемый масштаб baseline. Непосредственно перед POST локальный сервер свежо перепроверяет workers GET; если ни один online-воркер выбранной модели не может выполнить размер, запрос отклоняется до отправки без смены модели или размера. Недоступный preflight честно называется неизвестностью, а в очереди показываются eligible_workers, потоки и might_stall, когда Horde их возвращает. Регрессия выбранных P2 20/20, P1 37/37, CARD74, CARD102-FIX 16/16, прямой установщик и фактический ярлык .100 → .101 PASS. Новая живая генерация Horde для .101 не вызывалась. Физический Android/Vivaldi именно для .101 и личная SQLite НЕ проверялись. Пункт о тихом пропуске одного–двух чужих сценовых листов в этом выпуске по решению владельца не менялся и только поясняется отдельно. Схема базы и личные данные не меняются. Из v0.14.100 сохранено: исправлены пять главных P1 тотального аудита. Рой больше не принимает служебный английский план модели как готовую RP-реплику, а Рассказчик, Мастер квестов, Арбитр и черновик сюжета отклоняют оборванный финал. Неприменимый текст отклоняется целиком: программа не вырезает умолчательно хвост рассуждений. Структурированные Horde-задачи получили точные purpose-specific схемы RP-состояния, автоанализа, снаряжения, полей мира, карточек и целей; цели используют голый ID без #, а строгие parser-ы не ослаблены. Обычные Horde-задачи получили durable inbox на 24 часа: приватный журнал 0600 хранит только ID, модели, назначение и состояние без ключа, промпта и текста ответа, поэтому повторный GET завершённой задачи и отмена известного ID работают после перезапуска сервера. Автоанализ теперь видит полные выбранные тексты последних шести реплик явными фрагментами, с общим потолком 24 000 символов и честным отказом вместо прежней молчаливой обрезки 6×400. Для автоматических отношений сохраняются точная цитата, ID реплик-источников и предыдущий текст; ручные отношения игрока не меняются. Сохранённые реальные raw Horde T01–T05/T08/T09/T10/T12–T14/T17/T18 и D01–D03 теперь безопасно отклоняются, живые допустимые T07/T26 принимаются; regression P1 37/37, CARD74, CARD102-FIX 16/16, прямой установщик и фактический ярлык .99 → .100 PASS. Новая живая генерация Horde для .100 не вызывалась. Физический Android/Vivaldi именно для .100 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.99 сохранено: по прямому поручению владельца сохранённый сюжет теперь может нести до 12 упорядоченных медиафайлов: изображения и GIF до 12 МиБ и музыку MP3/WAV/OGG/FLAC/AAC/M4A до 20 МиБ. Новые файлы загружаются с телефона, уже сохранённые выбираются из локальной галереи; сервер проверяет фактическую структуру медиа, а не доверяет расширению. Для сообщения доступны вариант без рамки и 24 атмосферные анимированные рамки разных стилей. Музыка открывается только ручным плеером без автозвука, а декоративная анимация останавливается при уменьшенном движении. Сюжет по-прежнему создаётся и сохраняется отдельно и может запускать новый чат, а теперь также вставляется из уже открытого личного или группового чата следующим оформленным сообщением Рассказчика. В чате раздел «Сюжеты этого чата» показывает добавленные постановки: владелец меняет их главенство и включает или исключает каждую из промпта. Полные видимые тексты включённых опор каждый ход идут главным блоком в начале и кратким якорем в конце промпта соло, группы, Рассказчика и Мастера квестов; отключённый сюжет не попадает и в обычную историю промпта. Общий предел активных опор — 24 000 символов без молчаливой обрезки. Проверены disposable synthetic 10/10 и браузерный fake-Horde сценарий расширения: загрузка PNG/GIF/WAV и выбор из галереи, запуск и вставка следующих сюжетов, порядок и отключение одной опоры, точный промпт без отключённого текста и media ID, reduced-motion и ручной аудиоплеер. Также пройдены CARD105 12/12, CARD104 и порог 1–4, выбранные no-live регрессии CARD70/CARD73/CARD74/CARD84/CARD86/CARD90/CARD92–CARD103 и import-species, Python/JS compile, прямой установщик и фактический ярлык .98 → .99; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .99 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.98 сохранено: по прямому поручению владельца добавлен отдельный раздел «Мир → Сюжеты» с локальной библиотекой постановок. Вводные пишутся одним свободным текстовым полем; кнопка генерации отправляет Horde только это поле и просит русскую связную сцену с местом и временем, наблюдаемым запускающим событием и открытым крючком, не решая за игрока и персонажей и не задавая финал. Ответ модели — только редактируемый черновик: открытие раздела или генерация ничего не сохраняет, а сюжет попадает в локальную SQLite после проверки, правки и отдельной кнопки сохранения. Ручные сюжеты создаются без Horde; происхождение manual или фактически ответившая модель подписано. Сохранённый сюжет можно изменять, удалять и выбирать при создании личного, группового или пустого чата без участников. Одна локальная атомарная транзакция без Horde ставит точный текст первым сообщением Рассказчика с подписью «сюжетная постановка»; повтор запуска не создаёт дубль, устаревшая версия отменяет создание целиком, а последующая правка или удаление сюжета не меняет уже начатые чаты. Проверены disposable CARD105 synthetic 12/12 и браузерный fake-Horde сценарий: ручной CRUD без POST, черновик не сохранён до отдельной правки и сохранения, личный и групповой чаты получают точный текст первым и без дублей при переоткрытии. Также пройдены CARD104 10/10, порог 1–4 5/5, выбранные no-live регрессии CARD70/CARD73/CARD74/CARD84/CARD86/CARD90/CARD92–CARD103 и import-species, Python/JS compile, прямой установщик и фактический ярлык .97 → .98; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .98 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.97 сохранено: по прямому уточнению владельца кнопка «Улучшить по оценке · Horde» теперь появляется у самого свежего AI-ответа при оценке показываемого варианта 1–4, а не только при 1–2. При оценке 5 кнопка не появляется. Оценка по-прежнему относится только к этому варианту и не усредняется на сообщение. Полный исходный текст по-прежнему показывается модели как отрицательный пример вне истории вместе с баллом и комментарием; самостоятельный результат добавляется новым вариантом с подписью «улучшено по оценке», прежний вариант и его оценка остаются, а косметический пересказ не сохраняется. Обычный «Новый вариант · Horde» отклонённый текст и оценку не получает. Проверены disposable пороговый gate 1–4 5/5, CARD104 10/10 и браузерный fake-Horde сценарий: оценка 4 в соло и 3 в группе открывают улучшение и сохраняют provenance, оценка 5 кнопку не показывает, обычный новый вариант обратной связи не получил. Также пройдены CARD84, CARD70 Python/Node, CARD73 Node, CARD74, CARD86, CARD90 Python+Node, CARD92 Python/Node, CARD93–CARD95, CARD99–CARD103, CARD103-DYN/DYN2/DYN3/DYN4, import-species, Python/JS compile, прямой установщик и фактический ярлык .96 → .97; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .97 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.96 сохранено: показываемый вариант ответа персонажа, Рассказчика или Мастера квестов теперь можно оценить от 1 до 5 и снабдить свободным комментарием. Оценка относится только к этому варианту, не усредняется на сообщение и не меняет текст или выбранный вариант. Если самый свежий AI-ответ получил 1–2, отдельная кнопка «Улучшить по оценке · Horde» показывает модели полный плохой текст как отрицательный пример вне истории вместе с баллом и комментарием; она должна написать самостоятельный вариант с нуля. Результат добавляется новым вариантом с подписью «улучшено по оценке», прежний вариант и его оценка остаются, а косметический пересказ плохого текста не сохраняется. Обычный «Новый вариант · Horde» отклонённый текст и оценку не получает. Проверены disposable CARD104 10/10 и браузерный fake-Horde сценарий: точный второй вариант оценён в соло, плохой групповой ответ улучшен именно его ботом, старый вариант сохранён, обычный новый вариант обратной связи не получил. Также пройдены CARD84, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99–CARD103, CARD103-DYN/DYN2/DYN3/DYN4, import-species, Python/JS compile, прямой установщик и фактический ярлык .95 → .96; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .96 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.95 сохранено: каждое направленное отношение теперь записывается одним свободным текстом, без фиксированных полей и шкал. У игрока отдельное текстовое поле к каждому персонажу: он сам пишет только «Игрок → персонаж», а пустое поле после сохранения убирает это собственное отношение. Отношения персонажей друг к другу и к игроку пишет нейросеть: всегда включённый автоанализ при наблюдаемом событии и точной цитате полностью переписывает актуальное описание пары, сохраняя всё ещё верное из прежнего текста; ручные слова игрока анализ никогда не пишет и не меняет. Активная эмоция персонажа может быть названа только качественной временной окраской текущего хода и не превращается программой в число. Прежние фиксированные поля и числовая динамика не переносятся автоматически: новая текстовая карта начинается чистой. Проверены disposable CARD103-DYN4 11/11 (свободный текст игрока, создание и полное переписывание персонажного текста только по цитате, чистый старт старых шкал), обновлённые CARD103 14/14, CARD103-DYN 15/15, CARD103-DYN3 7/7, CARD103-DYN2 3/3, CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, Python/JS compile, прямой установщик и фактический ярлык .94 → .95; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .95 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.94 сохранено: в карте отношений теперь вручную редактируется только ваше собственное отношение «Игрок → персонаж»: источник фиксирован как вы, выбирается только персонаж-адресат, а нейросетевой автоанализ и ситуационные эмоции это направление никогда не сдвигают. Отношения персонажей друг к другу и к игроку показываются отдельным автоматическим списком: они накапливаются по событиям ролевой игры только с точными цитатами и основаниями в прежних пределах, а общего ручного сброса этой автоматики больше нет. Сервер и клиент одинаково отбрасывают старые ручные отношения персонажей и динамику с источником-игроком. Проверены disposable CARD103-DYN3 7/7 (свои значения остаются точными и вручную управляемыми, персонажная динамика не движет игрока), CARD103 14/14, CARD103-DYN 15/15, CARD103-DYN2 3/3, CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, Python/JS compile, прямой установщик и фактический ярлык .93 → .94; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .94 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.93 сохранено: анализ каждого хода теперь работает всегда автоматически: больше нет флажка «Автоанализ мира и памяти» и ручной кнопки повторного анализа. После реплик Рой сам обновляет незапертые ячейки мира, предлагает AI-факты памяти на подтверждение и сдвигает карту отношений по наблюдаемым событиям с цитатными основаниями — ничего включать отдельно для чата не нужно, а сцены со старым сохранённым «выключено» при чтении считаются включёнными. Остались строка статуса и кнопка отмены уже идущего запроса; отдельный флажок автосводки хроники и ручной анализатор шкал выбранного листа не изменились. Проверены disposable CARD103-DYN2 3/3 (анализ применяется без всякого флага, включая сцену с сохранённым «выключено»), CARD103-DYN 15/15, CARD103 14/14, CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .92 → .93; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .93 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.92 сохранено: карта отношений из .91 теперь меняется от событий ролевой игры автоматически. Поверх владелецкой базы действует хранимый динамический слой: включённый в чате автоанализ хода после реплик может сдвинуть доверие, симпатию и конфликт конкретной направленной пары только по явному событию между ними и с точной цитатой из сохранённых реплик; сервер ограничивает один ход шагом ±30 и суммарный сдвиг ±80 и хранит краткое основание. Отдельный ситуационный слой ничего не записывает: активные эмоции актёра с целью-участником (гнев, обида, симпатия, благодарность и другие) временно сдвигают показываемые шкалы на этот ход. Боты получают эффективные значения «база + события + ситуация» с явной пометкой динамической части; владелецкая основа нейросетями не перезаписывается, динамику видно в панели карты и можно сбросить одной кнопкой. Без включённого автоанализа карта ведёт себя как в .91. Проверены disposable CARD103-DYN 15/15 (включая серверный анализ end-to-end: база не переписана, повтор и выдуманная цитата отклонены), CARD103 14/14, CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .91 → .92; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .92 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.91 сохранено: в групповых чатах появилась постоянная направленная карта отношений. Владелец задаёт для каждой пары участников — включая игрока — тип/статус, доверие и симпатию от −100 до 100, конфликт от 0 до 100, обязательства, границы и краткое основание; «А → Б» и «Б → А» хранятся и действуют раздельно и не считаются взаимными. Одна и та же карта целиком входит в промпт каждого бота группы как факты сцены; правка владельца видна уже следующему ходу. Отношения к выведенным из состава участникам сохраняются, но ботам не показываются, пока участник не вернётся. Пустая шкала значит «не задано», а не ноль; полностью пустое отношение не сохраняется. Карта стоит ниже сценовой роли, текущие слова, согласие или отказ участника выше неё; автоматических изменений карты из событий нет — её ведёт только владелец. Проверены disposable CARD103 14/14, CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .90 → .91; живой Horde в этой проверке не вызывался. Физический Android/Vivaldi именно для .91 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.90 сохранено: сценовая роль из .89 теперь закреплена в трёх позициях: до карточки, сразу после её полей и полным контрольным якорем после истории. Первое действие ответа должно выполнять действующую роль, а не примирять её со старой профессией, видом или способностью через прошлое, совместительство, метафору, костюм или оборудование; совместимые факты карточки остаются способом выполнить назначение. Другие боты теперь получают короткую публичную функцию партнёра как чужую обязанность, чтобы правильно обращаться к нему; секретная формулировка не раскрывается дословно. Короткая роль остаётся полным назначением, а интерфейс предупреждает, что обязанности и явная замена повышают надёжность. Gemma и Qwen получают эту иерархию также в native system-ходе. Qwen3.5-122B переведён на native ChatML с пустым закрытым блоком think и модельными stop-последовательностями. RP-валидатор не сохраняет видимые служебные рассуждения и очевидно оборванные реплики; завершённая проза перед поздним незакрытым reasoning может быть сохранена, а существующий механизм продолжения не изменён. Проверены disposable CARD102-FIX 16/16, CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD70, CARD73, CARD74, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .89 → .90. Отдельный живой Horde-ретест на синтетических взрослых дал 9 принятых валидатором ответов с удержанной ролью и одну оборванную генерацию, которую валидатор отклонил и не сохранил; это проверка воспроизведённых кейсов, а не абсолютная гарантия стохастической модели. Физический Android/Vivaldi именно для .90 и личная SQLite НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.89 сохранено: в групповом чате владелец может свободно текстом назначить отдельную сценовую роль каждому ИИ-персонажу. Роль хранится в листе именно этого чата, ставится в промпт до полей карточки и выше противоречащих фрагментов карточки; непротиворечащие факты внешности, биографии, знаний, навыков и речи сохраняются. Интерфейс показывает роли активных участников, позволяет изменить или снять роль выбранного листа и предупреждает о явном конфликте с карточкой. Системная безопасность и текущее согласие или отказ остаются выше роли; ниже неё — социальный профиль и состояние, сюжет/отношения и карточка, а история остаётся фактом. Роль не меняет карточку, не действует в одиночном чате и не передаётся другим ботам как их собственная: каждый бот получает своё назначение только на собственной генерации. Если роль прямо называет персонажа несовершеннолетним, для интимного слоя применяется более строгий статус из карточки и роли. Проверены disposable CARD102 14/14, CARD101 15/15, CARD101-DYN 10/10, CARD73, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .88 → .89; физический Android/Vivaldi именно для .89, личная SQLite и живой Horde POST НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.88 сохранено: у каждого ИИ-персонажа в конкретном чате появился сценовый социальный профиль: социальное поведение, долгосрочные цели, текущая мотивация, страхи и избегания, интимные границы/согласие и типичная реакция на интимное внимание. Базовые параметры задаёт владелец для выбранного листа; они не меняют карточку, другие чаты или схему SQLite, а в группе чужие внутренние цели, текущая мотивация, страхи и интимные реакции другому боту не раскрываются. Поверх базового слоя интерфейс и RP-промпт показывают одинаковую динамику на этот ход: время, место, присутствующие, срочные шкалы, эмоции/статусы, совместная история и последние реплики пересчитывают действующий фокус персонажа. Базовый текст ИИ сам не перезаписывает. Возраст не ограничивает неинтимный социальный слой; возраст и границы взрослого персонажа задаёт владелец, интимные поля включаются только при явно взрослом возрасте. Профиль, прежняя близость и шкалы не считаются согласием: оно конкретно для действия, может быть отозвано, а молчание согласием не является. Проверены disposable CARD101 15/15 и CARD101-DYN 10/10, CARD73, CARD86, CARD90 Python+JS, CARD92–CARD95, CARD99, CARD100, import-species, compileall/JS, прямой установщик и фактический ярлык .87 → .88; физический Android/Vivaldi именно для .88, личная SQLite и живой Horde POST НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.87 сохранено: поиск текстовой RP-модели Horde теперь учитывает точную задачу. Сначала один и тот же онлайн-воркер обязан одновременно покрывать нужный контекст и длину ответа; максимальный контекст одного волонтёра больше не склеивается с максимальной длиной другого. Сервер нормализует только ограниченные технические числа уже полученного публичного списка — скорость, потоки и незавершённые задания — и не передаёт браузеру идентификатор, имя или владельца воркера. Среди уже допустимых одобренных моделей браузер ранжирует кандидатов по числу совместимых воркеров, медианной скорости, суммарным потокам и запасу контекста/ответа. Тот же поиск выбирает резерв 25 000. Совместимая выбранная владельцем модель не заменяется молча: альтернатива и резерв подтверждаются до POST, а подтверждение и экран Horde объясняют статистику. Это оценка доступности и скорости, не гарантия конкретного воркера, реальных весов или качества; RP 31000/25000 и одобренные пулы не меняются. Проверены disposable CARD100 12/12 с mock Horde и нулём POST, CARD99 15/15, CARD90 Python+JS, CARD86, CARD92–CARD95, import-species, compileall/JS, прямой установщик и фактический ярлык .86 → .87; физический Android/Vivaldi именно для .87, личная SQLite и живой Horde НЕ проверялись. Схема базы и личные данные не меняются. Из v0.14.86 сохранено: локальная база теперь различает временную занятость и повреждение. После прежнего восьмисекундного busy_timeout SQLite BUSY/LOCKED даёт HTTP 503 с Retry-After: 2 и советом подождать или закрыть вторую копию Роя; мутации вслепую не повторяются, а прочие ошибки SQLite не маскируются под занятость. Формальный user_version=13 больше сам по себе не объявляет базу здоровой: проверяются все 14 таблиц, типы/NOT NULL/default/PK колонок, семантика PK/UNIQUE и явных индексов и FOREIGN KEY. Недостающий явный индекс пересоздаётся, неполная схема останавливает старт до DDL без выдумывания значений; тот же контракт проверяется перед импортом SQLite и перед финальной установкой схемы 13. Одинаковая неудачная миграция теперь переиспользует один проверенный снимок по потоковому логическому SHA-256, а изменившаяся база получает отдельный снимок; старые копии автоматически не удаляются. Повреждённая JSON-запись, мусорный файл, чужой application_id и более новая схема объясняются отдельно и не оставляют приложение полуинициализированным с новым токеном. F-17 по решению владельца не реализовывался. Проверены disposable CARD99 15/15, настоящая публичная синтетическая миграция .69 schema12 → schema13, CARD86/CARD90/CARD92–CARD98, compileall/JS, фактический ярлык .85 → .86 и прямой установщик; физический Android/Vivaldi именно для .86, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.85 сохранено: локальный HTTP-сервер больше не держит потоки на бессрочно медленных или незавершённых połączeniaх. Заголовки ограничены 30 секундами; чтение тела и запись ответа получают щедрые бюджеты не ниже 120 секунд и 256 КиБ/с, с общим потолком один час. Одновременно обрабатываются не более 32 запросов, а время вычислений после полностью принятого запроса этими socket-сроками не обрывается. Слишком глубокий JSON — глубже 100 уровней — теперь получает понятный 400 вместо общего 500; та же проверка защищает импорт JSON-архива личного превью до рекурсивной проверки checksum. Обычные запросы интерфейса значительно мельче предела. Проверены синтетические CARD98 raw-socket/JSON, CARD76/CARD86/CARD90/CARD92–CARD97, compileall/JS, фактический ярлык .84 → .85 и прямой установщик; физический Android/Vivaldi именно для .85, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.84 сохранено: лимит Horde Images — не более четырёх ожидающих задач — теперь резервируется атомарно до сетевой отправки, поэтому параллельные запросы не могут проскочить пятым. Готовые байты картинок хранятся в оперативной памяти не дольше двух часов, а завершённые и ошибочные записи задач — 15 минут; ожидающие и выполняющиеся задачи очисткой не трогаются. Service Worker теперь кэширует весь граф статической оболочки, включая horde-pool.js и context-semantic.js; личные ответы /api/v1/ по-прежнему не кэшируются. Если Termux-сервер остановлен, оболочка честно сообщает, что сервер не запущен, объясняет сохранность SQLite и показывает прочерки вместо ложных нулей. Публичный HTML-импорт ограничен глубиной дерева 512, итеративным чтением значений после подписей и бюджетом кандидатов; счётчики заголовков для выбора единственного профиля строятся одним проходом. Слишком сложный недоверенный HTML получает контролируемый отказ без выдуманных полей вместо RecursionError или долгого общего 500. Проверены синтетические CARD97, CARD76/CARD86/CARD90/CARD92–CARD96, compileall/JS, фактический ярлык .83 → .84 и прямой установщик; физический Android/Vivaldi именно для .84, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.83 сохранено: новые изображения больше не принимаются только по сигнатуре и размеру файла. До распаковки сервер отклоняет сторону свыше 16 384 px и кадр свыше 40 000 000 пикселей, затем проходит реальные потоки PNG/APNG, GIF LZW и Huffman JPEG; для WebP проверяются RIFF-чанки, заголовки и размеры кадров VP8/VP8L/VP8X. Общая точка add_media закрывает локальные загрузки, импорт из общей папки, Pollinations и сохранение Horde, а провайдеры и публичные портреты отсекаются ещё раньше. В Android-браузере центральная загрузка, портреты карточек и персон и результат Horde после проверки заголовка дополнительно проходят нативное createImageBitmap; кнопка сохранения Horde остаётся недоступной, пока preview не декодирован. Первый кадр GIF теперь сверяет прежний предел canvas 16 000 000 пикселей по заголовку до создания изображения и canvas натурального размера. Уже сохранённые медиа и содержимое резервных SQLite не переписываются: защита действует на новый приём файлов. Проверены синтетические CARD96 на Python и Chromium, CARD76/CARD86/CARD90/CARD92–CARD95, compileall/JS, фактический ярлык .82 → .83 и прямой установщик; физический Android/Vivaldi именно для .83, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.82 сохранено: ручная правка и переподтверждение уже сохранённой части хроники теперь проходят серверную проверку качества с метриками именно этой части. Точные служебные метки ChatML/Gemma/INST/think/turn/channel и буквальный <turn|>, слишком короткий или оборванный текст отклоняются до записи, поэтому прежние тело и версия остаются; обычные знаки < и > по-прежнему разрешены. Тот же точный <turn|> больше не пропускается из исходника в промпт парных рассказчиков. Если к реплике прикреплено фото и для него уже было получено и применено текстовое описание scene-Vision, пересказ хроники копирует тот же готовый текст до 2800 знаков из локального кэша. Внешний Vision повторно не вызывается, байты изображения и подпись файла в Horde не отправляются. Описание помечается как не слова автора, присоединяется один раз к завершающему фрагменту и связывается с частью через chronicle-source-v3; старые текстовые части не выдаются задним числом за описывающие фото. Порядок хроники не меняется: два независимых варианта по-прежнему просматривает и отдельно сохраняет владелец. Проверены синтетические CARD95/CARD94, CARD76/CARD86/CARD90/CARD92/CARD93, compileall/JS, фактический ярлык .81 → .82 и прямой установщик; физический Android/Vivaldi именно для .82, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.81 сохранено: смысловой поиск по хронике больше не подставляет безусловные top-3 просто потому, что какие-то части оказались ближе остальных. Запрос строится из явного вопроса и отдельных фасетов последних реплик; длинные части индексируются родительскими кусками и короткими окнами, локальный BGE-M3 объединяется с русским BM25 через RRF, а часть проходит только при измеренном пороге/отрыве или узком лексическом rescue. Если подтверждённого совпадения нет, хроника не вставляется и ответ получает подпись no_selection. Фрагмент теперь берётся вокруг релевантного места, а не слепо с начала части. Если в одном ходе подтверждено несколько старых фактов, поиск сохраняет отдельный якорь каждого фасета и может включить до пяти частей или несколько непересекающихся окон одной длинной части. Только такой многофактный случай получает бюджет 3000 символов — около 3,2% RP-контекста 31 000; обычный предел остаётся 1650 символов и до трёх частей, посторонний текст ради бюджета не добирается. Автоматическая замена затронутой хроники из .80 сохранена, а при её удалении чистятся и родительские, и оконные векторы ровно удалённых частей. Проверены синтетические CARD92/CARD93, поставляемый BGE-M3 Q4, CARD90/CARD86 и Chromium, фактический ярлык .80 → .81 и прямой установщик; физический Android/Vivaldi именно для .81, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.80 сохранено: если сообщение пользователя или бота, уже покрытое хроникой, релевантно изменилось, затронутая часть и весь хвост сразу удаляются из активной хроники, семантического поиска и векторного кэша. Старый пересказ не остаётся рядом как stale-часть для ручного выбора. Рой сразу запускает обычную парную перегенерацию двумя моделями и при готовности показывает кусок с полным исходником владельцу для выбора, собственной правки и отдельного подтверждения; после сохранения следующий кусок готовится автоматически до прежней границы, но автосохранения нет. Пока замена не подтверждена, поиск использует только оставшийся действительный префикс, а ответы персонажей, Рассказчика, Мастера квестов и Арбитра получают сохранённую подпись replacement_pending: подбор по хронике для них был неполным. Подпись по выбранному тексту и просторные лимиты обновлений из .79 сохранены. Проверены синтетические CARD90/CARD86/CARD87, Chromium, фактический ярлык .79 → .80 и прямой установщик; физический Android/Vivaldi именно для .80, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.79 сохранено: хроника больше не помечается устаревшей из-за служебных правок вне выбранного текста. Подпись части теперь зависит от фактически покрытых выбранных фрагментов, их порядка, роли и релевантного автора: смена дат, невыбранных вариантов, модели, медиа или чужих для роли полей не даёт ложного stale. Реальная правка выбранного текста, смена автора/роли, вставка, удаление или перестановка покрытых реплик по-прежнему честно дают stale; уже расходящаяся старая подпись автоматически не исцеляется. Одновременно тесные лимиты обновлений заменены просторными аварийными границами: 64 MiB исходников, 80 MiB source ZIP, 1000 файлов, 16 MiB на файл, манифест 256 KiB; полный ZIP — 1100 файлов и 64 MiB кода. SHA-проверки, pinned модель и 43 файла движка сохранены, а распаковка считает фактические байты. Проверены синтетические хроника и лимиты, фактический ярлык .78 → .79 и прямой установщик; физический Android/Vivaldi именно для .79, личная SQLite и живой Horde НЕ проверялись. Схема базы, личные данные, RP и Horde не меняются. Из v0.14.78 сохранено: это технический bridge на базе .77, а не новый пользовательский функционал. Поведение приложения, схема SQLite 13, личные данные, RP, Horde, модель и движок не меняются. Изменены только версия и три суммарных потолка обновления 5 MiB → 64 MiB: в приёме малого пакета, его распаковке и проверке кода полного ZIP. Благодаря этому следующий выпуск с исправлениями сможет установиться прежним ярлыком, хотя старый .77 такой пакет отклонил бы по размеру. Проверены фактический ярлык .77 → .78 на синтетической SQLite, прямой установщик и приём будущего пакета >5 MiB bridge-кодом; физический Android/Vivaldi, личная SQLite и живой Horde НЕ проверялись. После установки запустите .78 как обычно: следующий выпуск придёт тем же путём после подтверждения. Из v0.14.77 сохранено: «Новый вариант · Horde» теперь доступен только у самого свежего ответа ИИ в чате. Раньше старый ответ можно было перегенерировать после многих новых ответов, и хроника могла подсказать более поздний сюжет. Ваша следующая реплика кнопку не убирает, а более новый ответ персонажа, Рассказчика или Мастера квестов переносит её дальше. В группе это один глобальный последний ответ, а не кнопка у каждого бота; одиночная и групповая генерации повторно отклоняют старый target до обращения к Horde. Стрелки уже сохранённых вариантов и отдельное «Продолжить · Horde», альбомный фикс .76, прежний ярлык, схема базы, личные данные, RP и Horde не меняются. Проверены синтетические Chromium/SQLite и fake Horde в соло и группе, регрессии продолжения и альбомного чата и прежний ярлык .76 → .77; физический Android/Vivaldi именно для .77, личная SQLite и живой Horde НЕ проверялись. Из v0.14.76 сохранено: Исправлен открытый групповой чат в короткой альбомной ориентации: раньше верх и низ занимали всю высоту, лента получала 0 px, а вкладки «Цели», «Группа» и «Хроника» не нажимались. Теперь при 568×320 лента имеет 173 px, при 844×390 — 243 px, и все три вкладки открываются обычным нажатием. Это CSS-only режим landscape при высоте viewport до 520 px вне отдельной визуальной клавиатуры: открытый чат получает почти весь динамический экран, а ввод, персона и действия стоят одной широкой строкой. Вертикальная геометрия, прежний ярлык, схема базы, личные данные, RP и Horde не меняются. Проверены синтетические Chromium/SQLite, реальные pointer-клики по трём вкладкам, поворот туда-обратно и прежний ярлык .75 → .76; физический Android/Vivaldi именно для .76, личная SQLite и живой Horde НЕ проверялись. Из v0.14.75 сохранено: Исправлен прямой установщик полного ZIP: его собственный install.py теперь объявляет ту же SQLite-схему 13, что и сервер, вместо устаревшей 12. Правильный полный архив с верной внешней SHA-256 больше не отклоняется ручным двухаргументным режимом только из-за этой цифры. Полная и source-only проверки теперь точным разбором требуют одинаковых версии и схемы в server.py и вложенном install.py; несовпадающий пакет останавливается до замены кода. Прежний ярлык, схема базы, личные данные, RP и Horde не меняются. Проверены только синтетические архивы, disposable SQLite и прежний ярлык .74 → .75; физический Android/Vivaldi именно для .75, личная SQLite и живой Horde НЕ проверялись. Из v0.14.74 сохранено: По решению владельца запрета повторять POST для хроники нет: сервер и интерфейс больше не отклоняют тот же model+prompt из-за прежней попытки. Известный ID удобно продолжать GET, а явный новый запуск после отмены или потери ID создаст отдельное Horde-задание; автоматической повторной отправки нет. Локальный сервер 24 часа хранит в частном файле 0600 только ID, модель, точное окно и состояние submitted/completed/terminal — без промпта и текста. После перезагрузки вкладки или рестарта «Продолжить» находит ID и GET-ом пересоздаёт receipt/review, а terminal позволяет явную замену третьей моделью. Для stale-частей есть переподтверждение первой части при совпавших границах и первой/последней репликах либо удаление только stale-хвоста с дословным сохранением действительного префикса. Полный исходник, две разные модели, проверка, выбор и отдельное сохранение владельца обязательны. Десять PNG перепакованы lossless с теми же пикселями только из-за предела исходников установленного updater .73. Проверены только вымышленные данные, фейковый Horde и headless Chromium; физический Android/Vivaldi именно для .74, личная SQLite и живой Horde НЕ проверялись. Из v0.14.73 сохранено: В хронике задание, просмотр владельца и сохранение теперь привязаны к точному замороженному окну внутри снимка, сделанного при старте: реплики после снимка не отменяют уже известное задание и не дают обойти журнал того же model+prompt, а после сохранения снимка остаются непокрытыми для следующего явного запуска. Правка внутри снимка по-прежнему инвалидирует черновик. Если один рассказ механически повреждён или известное задание завершилось terminal, отдельная кнопка заменяет только этого рассказчика третьей моделью на том же окне; хороший завершённый ответ повторно не отправляется. Механически пригодный рассказ заменой не обходится, а повтор того же model+prompt не добавлен. Два независимых полных рассказа по-прежнему сравнивает с полным исходником только владелец: выбор A/B/edited и отдельное сохранение обязательны, третьего судьи и автосохранения нет. Восемь PNG перепакованы lossless с теми же пикселями только из-за предела исходников установленного updater .72. Проверены только вымышленные данные, фейковый Horde и headless Chromium; физический Android/Vivaldi именно для .73, личная SQLite и живой Horde НЕ проверялись. Из v0.14.72 сохранено: В окне проверки продолжения теперь есть действие «Слово уже полное — сохранить и дописать»: оно программно использует точное последнее слово сохранённого ответа, поэтому владельцу больше не нужно набирать то же слово поверх уже подставленного поля. Поле повторно проверяется при обычном вводе, завершении композиции мобильной клавиатуры, change, потере фокуса, Enter и самом нажатии; устаревшее состояние кнопки больше не должно блокировать допустимую сшивку без объяснения. Статус различает неподходящее последнее слово и случай, когда слово подходит, но полученный фрагмент отклоняется другой проверкой, включая дословное повторение пары слов. Удаление ровно показанного последнего слова остаётся отдельным подтвержденным действием. Серверные CAS, завершённая фраза, лимит объединённого ответа и запрет повторов пар по исходному ответу и предыдущим 100 сообщениям не ослаблены. Лимит вывода обычного чата не уменьшен: синтетическое измерение показало лишь небольшой служебный прирост промпта продолжения, а внешняя очередь Horde не управляется локально. Проверены только вымышленные данные, фейковый Horde и headless Chromium; физический Android/Vivaldi именно для .72, личная SQLite и живой Horde НЕ проверялись. Из v0.14.71 сохранено: Мобильный чат больше не растягивает страницу на коротком экране из-за принудительной высоты: переписка прокручивается внутри себя, инструменты — отдельным блоком, а при клавиатуре, уменьшающей только visual viewport, чат временно занимает видимую область. Поле и кнопки не должны уходить под нижнюю навигацию; на экстремально низкой видимой высоте инструменты прокручиваются. Для продолжения Horde однозначная сшивка остаётся автоматической. Если первое слово не доказывает, оборвано ли последнее слово, повторного Horde POST нет: локальное окно показывает уже полученную законченную часть и позволяет сохранить старое слово, указав его полностью, либо отдельной кнопкой подтвердить удаление ровно показанного последнего слова после предпросмотра. Серверная SQLite-транзакция повторно проверяет выбранный вариант, завершённую фразу и повторы пар слов по исходному ответу и предыдущим 100 сообщениям; отмена или отказ ничего не меняет. Удаление старого слова необратимо и помечается в метаданных без публикации текста. Проверены только вымышленные данные, фейковый Horde и headless Chromium 320/353/390 px; физический Android/Vivaldi, личная SQLite и живой Horde НЕ проверялись. Из v0.14.70 сохранено: В новых и существующих групповых чатах нет ведущего: все участники равноправны, любого можно исключить и вернуть, а его индивидуальный RP-лист и место останутся в этом чате. Группа из двух превращается в одиночный чат после исключения одного, последний оставляет пустой чат с сохранённым листом; выбор листа для просмотра делается явно. При переходе SQLite 12 → 13 проверенная копия создаётся до миграции; старый корневой лист переносится к ID прежнего персонажа одной транзакцией с обновлением версии сцены. Карточки, фото, реплики и варианты не переписываются. Из .69 требуется один полный ZIP прежним ярлыком, около 518 МБ; малый пакет не совместим со сменой схемы. Старый код нельзя запускать после успешного перехода 13 без восстановления резервной копии базы схемы 12. Ответы по упоминанию и кнопке «Ответы всех», RP31k/резерв25k, способы удаления и автоматический стык продолжения не менялись. Проверены только вымышленные SQLite, локальный updater и Chromium 320/390 px; физический Android, личная база и живой Horde НЕ проверялись. Из v0.14.69 сохранено: В ленте и поиске текущего чата появилась отдельная кнопка «Удалить диапазон»: укажите нажатием на две конкретные реплики его начало и конец. Можно взять одну границу в ленте, вторую на старой странице поиска; порядок выбора не важен. Локальный сервер подсчитает ВСЕ сообщения между границами включительно, даже никогда не загруженные на экран. Перед удалением показываются точное число, обе границы и список по 50 кратких записей на страницу с возможностью просмотреть все страницы; «Отмена» ничего не удаляет. Одно отдельное подтверждение удаляет весь непрерывный промежуток, даже если в нём больше 500 сообщений, вместе со всеми вариантами ИИ. Прежний ручной режим флажков остаётся прежним: 2–500 и без автоматического выбора скрытых реплик. Сервер сверяет версии всех сообщений, в том числе невидимых, снова в BEGIN IMMEDIATE; при конфликте удаление ВСЕГО диапазона отменяется. Производная хроника/AI-факты и ссылки согласованно обновляются; тексты вне диапазона, другие чаты, служебные заметки и фото галереи сохраняются. Это необратимо — заранее создайте независимую SQLite-копию. Horde при удалении не вызывается. Проверены только вымышленная SQLite, локальный HTTP и Chromium 320/390 px; физический Android и личная база НЕ проверялись. RP31k/25k, длина ответов и автоматический стык продолжения из .67 (включая неоднозначное слово-префикс) не менялись; основной ярлык тот же. Из v0.14.68 сохранено: В чате над лентой вернулась кнопка «Выбрать сообщения». Отмечайте флажками реплики текущего чата и более ранние сообщения на просмотренных страницах его поиска; скрытые реплики и другие чаты не выделяются. При переходе в другой чат выбор очищается. После выбора 2–500 реплик «Проверить и удалить» показывает отдельный локальный список авторов, дат и коротких фрагментов, а «Отмена» ничего не удаляет. Только явное «Удалить выбранные сообщения (N) без восстановления» удаляет целые отмеченные сообщения со ВСЕМИ вариантами ИИ — не одиночный вариант. Сервер в одной транзакции проверяет ID, актуальность каждого сообщения и текущего чата; при любой ошибке весь набор сохраняется. Сбрасываются производная хроника и зависящие AI-факты/ожидающие предложения мира, очищаются ссылки на удалённые сообщения. Тексты других реплик, чаты и фото в галерее сохраняются; внешняя SQLite-копия перед необратимым удалением рекомендована. Horde при этом не вызывается. Вымышленная SQLite, Chromium 320/390 px и прямой локальный API проверены; физический Android и личная SQLite НЕ проверялись. RP31k/25k, длина ответа и автоматическая стыковка продолжения из .67 (включая риск неоднозначного слова-префикса) не менялись. Тот же основной ярлык. Из v0.14.67 сохранено: Для «Продолжить · Horde» добавлен строгий локальный блокировщик дословного повтора двух соседних слов в выбранном варианте и 100 ближайших предыдущих сообщениях этого чата (включая текст игрока), а также внутри нового сохраняемого фрагмента. Сравниваются полные слова без различия регистра/пробелов/пунктуации, не переписывая старые сообщения. Даже распространённые пары могут отклоняться, как просил владелец. Если сохранённый ответ оборван внутри слова, модель начинает с одного полного последнего слова, а локальная стыковка дописывает недостающие буквы без пробела и без изменения старого текста. При обрыве новой генерации сохраняются только завершённые предложения, об отсечённом несохранённом хвосте сообщается; если завершённой части нет, сообщение неизменно. Реальный finish reason воркера Horde не предоставляется: локальный знак конца — не гарантия смысла. Повтор неизменённого POST не делается автоматически: только отдельно подтверждённое владельцем новое задание после предупреждения о прежней удалённой попытке, с частным fsync-журналом без текста и ключа. Известный ID — GET. RP31k/резерв25k, длина16–512, чужие листы, ручное решение владельца по хронике, другие purpose и SQLite12 не менялись. Проверены вымышленная SQLite, Chromium 320/390 px и fake Horde; физический Android, личная SQLite и живой Horde для этой правки НЕ проверены. Тот же основной ярлык. Из v0.14.66 сохранено: Исправлены две независимые причины ложного переполнения RP: сервер считал UTF-8-байты токенами, а браузер оставлял только последние 20 реплик. В одном ответе теперь используются все доступные реплики (до 300 через прежний локальный API) и полные сохранённые строки, включая выбранный вариант при продолжении. Оценка токенов согласована между JS/Python на публичных словоформах и проверялась на четырёх токенизаторах, но не равна точному счёту конкретного волонтёра Horde. Если локальный словарь недоступен, включается более строгая посимвольная проверка. Дополнительно сверяется символьная оценка Horde и устанавливается context_fit=reject. Превышение теперь вызывает явный отказ до внешнего POST без сокращения истории и без правки SQLite. RP31k/резерв25k, вывод/запас и состав чужих листов не менялись; резерв25k может отклонить более длинный запрос, даже когда основная31k его принимает. Хроника, анкета, цели, мир, снаряжение и анализ RP-состояния сохраняют прежнюю строгую байтовую проверку; ручное решение для хроники и анкеты не менялось. Вкладка «Промпт» показывает только локальные числа: байты, оценку токенов и число реплик N из N. Десять взрослых вымышленных ботов и 100 средних ходов проверены в Chromium 320/390 px с подставным Horde. Ни физический Android, ни личная SQLite, ни фактический воркер для этой правки не проверялись. Прежний основной ярлык и все старые адреса остаются. Из v0.14.65 сохранено: Под последним ответом персонажа появилась отдельная кнопка «Продолжить · Horde». Один явный запрос дописывает новый фрагмент к видимому выбранному варианту того же сообщения и сохраняет его в локальной SQLite: новый пузырь и новый вариант не создаются, старые варианты сохраняются. Модель исходного ответа не подменяется; отдельно подписаны модель продолжения и измеренная причина отсутствия смыслового поиска по хронике, если она была. После новой реплики кнопка исчезает. Рассказчика, Мастера квестов и Арбитра действие не меняет. Перед внешним POST и после очереди проверяются последний ID, версия чата/реплики и выбранный индекс; отдельный частный fsync-журнал не повторит попытку того же текста при неизвестном ID. При известном ID статус опрашивается только GET. Переполнение контекста по-прежнему отклоняется локально до внешнего POST; RP31k/25k, длина ответа, другие сообщения/листы, SQLite12 и ручная хроника не сокращались. Вымышленная SQLite, Chromium 320/390 px и fake Horde проверены; физический Android, личная SQLite и живой Horde не проверялись. Из v0.14.64 сохранено: Только из групповых правил удалена вторая идентичная памятка оформления художественного ответа. Основная копия осталась; прежний готовый промпт при тех же данных стал на 1205 байт UTF-8 короче (включая один разделитель). Для переданных владельцем только чисел: 30619 байт минус 1205 = 29414 байт при прежнем пределе 30232, запас 818 байт, если остальной контекст не изменился. Это не точный счёт токенов удалённого воркера и не гарантия следующих ответов. Реплики, чужие листы, десять ботов, SQLite12, RP31k/резерв25k, серверная проверка и хроника не сокращались. Вымышленная SQLite, Chromium 320/390 px и fake Horde проверены; физический Android, личная SQLite и живой Horde не проверялись. Из v0.14.63 сохранено: Во вкладке «Промпт» выбранного чата появились только локальные размеры UTF-8: итоговый запрос, доступный предел с учётом ответа, размеры анкеты отвечающего, лора, листов группы, локаций, хроники и реплик. Не все девять чужих анкет попадают в запрос: чужие листы ограничены общим бюджетом, а число вошедших листов показано. Для безопасной проверки включите прежний флажок «Проверять перед каждым следующим текстовым POST», запросите ответ и нажмите «Отменить без отправки», передав только строки с числами, не личный текст панели. Контекст 31k/25k, сохранённая SQLite, состав группы и серверная защита НЕ изменены; сама диагностика размеров не сокращает промпт. Проверены вымышленная SQLite, Chromium 320/390 px и синтетическая Horde; личный Android и его чаты не проверены. Из v0.14.62 сохранено: Отдельная правая боковая вкладка «Хроника» под «Группой» со всеми частями, локальной правкой, полным исходником, двумя независимыми ответами A/Б, личным выбором и отдельным сохранением. Из v0.14.61 сохранено: Под каждым новым сохранённым RP-ответом, для которого не удалось смыслово выбрать старые части хроники, видна конкретная причина (нет пригодных частей, источник изменён, BGE-M3 не готова/занята/индексируется, тайм-аут, ошибка или пустой результат). Причина хранится вместе с конкретным вариантом и не приписывается старым ответам. Это касается персонажа, группы, Рассказчика, Мастера квестов и вердикта Арбитра; лор может ранжироваться даже при отсутствии подобранной хроники. Вымышленные SQLite и Chromium 320/390 px проверены; живой Horde и физический телефон для этой функции не проверялись. Из v0.14.60 сохранено: Для остальных пустых полей вымышленной взрослой анкеты запрос требует generated без ложной цитаты source; полный разрешённый источник, проверка безопасности, две независимые модели, ручной выбор/правка/отклонение и отдельное сохранение остаются. Живые synthetic проверки получили полные пары для 13 полей на двух вымышленных источниках, не доказательство для всех полей/воркеров на вашем телефоне. Для «Ориентации» и «Биологического вида» модели ответили одинаково по смыслу: есть два независимых полных ответа, но не два разных выбора, предупреждение показано владельцу. «Раса» — лишняя графа старой формы, не обязательное поле Card V2 или Horde: убрана из формы, AI-списка и RP-текста. Старое значение карточки и импортное дополнение не удаляются; импортные дополнительные параметры включатся в полный источник Horde только по отдельной галочке. Известный ID — только GET, неизвестный POST нельзя автоматически повторять; ручный новый запрос требует нового подтверждения. После остановки старой очереди кнопка «Повторить оставшиеся пустые поля · подготовить заново» лишь готовит источник и не шлёт POST без новой галочки. «Осталось ≈…» — только для текущего ID, Обработано X/N полей — не прогноз времени. RP31k/резерв25k, SQLite12, хроника, движок и обычный ярлык прежние. Проверены локальный Chromium 320/390 px и синтетическая Horde, физический Android и личная SQLite не проверены.