История изменений

Все значимые релизы trip2g. Самый свежий — сверху. Для каждого изменения указано
Что / Зачем / Как использовать, чтобы оператор или администратор мог решить,
стоит ли обновляться и как начать пользоваться функцией.

Теги старее v0.2.0 доступны только в истории git.


v0.5.1 — 2026-05-27

Секреты вебхуков: зашифрованные данные в теле доставки (0b72acf2)

  • Что. У каждого change-вебхука и cron-вебхука в админке появился раздел Секреты. Добавляйте именованные пары ключ-значение (например auth_token, api_key) — они хранятся зашифрованными и отправляются в каждом запросе доставки в поле payload.secrets. Получатель вебхука читает их без дополнительных вызовов API.
  • Зачем. Cron-вебхуки — основа системы плагинов. Плагин — это веб-сервер (или serverless-функция), который получает payload с временным API-токеном и обрабатывает его, как правило в фоне, а затем патчит хранилище, когда готов. Плагины чаще всего stateless: им некуда безопасно хранить собственные учётные данные. Секреты решают эту проблему — trip2g хранит их зашифрованными и доставляет при каждом вызове, так что плагин остаётся credential-free на своей стороне. Если плагину нужно больше времени, он использует API-токен для асинхронных обновлений; секреты дают ему всё остальное для работы с внешними сервисами.
  • Как. Откройте Admin → Change Webhooks (или Cron Webhooks) → выберите вебхук → прокрутите до раздела Секреты. Введите название и значение, нажмите Add Secret. Чтобы обновить значение — введите его в поле строки и нажмите Save. Чтобы удалить — нажмите иконку корзины (подтверждение на второй клик). Секреты появляются в теле доставки в виде { "secrets": { "auth_token": "...", "api_key": "..." } }.

v0.5.0 — 2026-05-26

Редактор файлов в браузере (для администраторов)

  • Что. Администратор теперь может отредактировать любую страницу прямо на сайте. Иконка редактора появилась в правом верхнем углу админки и рядом с поиском на каждой странице. Откройте редактор, чтобы просмотреть все загруженные файлы деревом папок, открыть и отредактировать любой и сохранить. Файл можно откатить к прошлой версии.
  • Зачем. Поправить опечатку или обновить страницу за секунды — без Obsidian и повторной синхронизации.
  • Как. Нажмите иконку редактора (только админы). Заметка текущей страницы открывается сразу; любой другой файл — в дереве слева. Правки хранятся в браузере, пока не нажмёте «Сохранить»; панель версий позволяет загрузить и восстановить старую версию.

Публичный хаб курируемых баз

  • Что. Раздел hub/ с двуязычным индексом баз знаний, доступных через хаб (первая запись — «Журнал Ника Сенина», отфильтрованные кейсы Code with Claude 2026).
  • Зачем. Просматриваемая публичная точка входа к федеративным базам.
  • Как. См. docs/ru/hub/_index.md; добавьте свою через docs/ru/hub/_create.md.

v0.4.1 — 2026-05-25

MCP Federation — один хаб поверх многих баз знаний

  • Что. Ваш инстанс может работать как федеративный хаб. KB-заметка (заметка с mcp_federation_kb_url во frontmatter) регистрирует другую MCP-совместимую базу, а federated_search / federated_similar / federated_note_html обращаются ко всем сразу через ваш единственный MCP-эндпоинт. Публичным базам аутентификация не нужна; приватные пиры используют общий HMAC-секрет.
  • Зачем. Один эндпоинт, одна точка авторизации — агент ищет по вашим заметкам, инстансам партнёров и внешним адаптерам (GitHub, Telegram) одновременно, без правки .mcp.json.
  • Как.
    • Документация: docs/en/user/federation.md, docs/ru/user/federation.md
    • Публичная база: создайте заметку с mcp_federation_kb_url (+ опционально mcp_federation_kb_id) и free: true.
    • Приватный пир: обменяйтесь федеративным секретом в Админка → Federation, затем добавьте KB-заметку.

Файлы Canvas (Base и Excalidraw — позже)

  • Что. Файлы .canvas синхронизируются и рендерятся. .base и .excalidraw тоже принимаются синхронизацией, но их рендеринг появится позже — пока вместо сломанной страницы показывается понятная заглушка.
  • Зачем. Vault-ы с Canvas работают уже сейчас; Base и Excalidraw синхронизируются без ошибок, пока готовится полная поддержка.
  • Как. Просто синхронизируйте — плагин и CLI принимают все три расширения; Canvas рендерится уже сейчас.

Telegram-боты навигации и canvas

  • Что. Бот-браузер по wikilink-ам и навигация на основе canvas поверх Telegram business connection.
  • Зачем. Читатели могут ходить по графу вашего vault прямо из Telegram.
  • Как. См. документацию по Telegram; включите на business connection.

Админка и конфиг

  • Что. GraphQL API для истории версий заметки; фильтр отправок форм в админке (статус / дата / обработано); переменные окружения принимают префикс TRIP2G_ (неизвестные — с предупреждением).
  • Зачем. Смотреть и откатывать контекст, разбирать отправки и безопаснее настраивать self-hosted инстансы.
  • Как. Панели админки; добавьте префикс TRIP2G_ к любой переменной окружения.

Плагин синхронизации Obsidian + CLI

  • Что.
    • Принимает файлы .canvas, .base, .excalidraw.
    • Показывает детали GraphQL-ошибки при неудачном push (больше нет «тихих» сбоев).
    • Новый флаг --exclude <glob> (можно повторять). Исключённые пути никогда не пушатся; если они уже есть на сервере — скрываются. Простое имя вроде dev совпадает с этой папкой и всем внутри неё. По умолчанию ничего не исключается — грузится всё.
  • Зачем. Держать тестовые/демо или внутренние папки (например, dev/, demo/) в репозитории, но вне опубликованного сайта — и обратимо скрывать их на сервере.
  • Как. trip2g-sync ./docs --exclude dev --exclude demo. Если вернуть путь обратно — он снова публикуется и автоматически перестаёт быть скрытым.

v0.4.0 — 2026-05-21

Мутация updateNotes — атомарный find/replace по заметкам

  • Что. Новая GraphQL-мутация патчит несколько заметок одной транзакцией через PathMap вида {path → [{find, replace}]}.
  • Зачем. Позволяет внешним инструментам, агентам и скриптам согласованно править весь vault без отдельных запросов на каждую заметку. Никаких частичных состояний, если одна замена не прошла.
  • Как.
    • Документация: docs/en/user/update_notes.md, docs/ru/user/update_notes.md
    • Пример: updateNotes(input: { pathMap: { "notes/post.md": [{ find: "old", replace: "new" }] } }).
    • End-to-end спецификация: e2e/updatenotes/* (см. коммит test(e2e): add updateNotes e2e spec and demo fixture).

Forms admin — обработка отправок формы

  • Что. Новая мутация markFormSubmitProcessed и поля processed у submit-ов; админ помечает отправку как обработанную, UI по умолчанию скрывает обработанные.
  • Зачем. Замыкает работу с формами внутри админки — не нужно дёргать внешние сервисы.
  • Как.

Smoke-render шаблонов — runtime-ошибки Jet видны сразу при загрузке

  • Что. При загрузке заметок каждый успешно распарсенный Jet-шаблон выполняется на первых 10 заметках, которые ссылаются на него через frontmatter layout:. Ошибки и паники рендера превращаются в NoteWarning на шаблоне.
  • Зачем. Раньше шаблон, который парсится, но падает на рендере (например, {{ note.NoSuchField }}), ломался только при открытии страницы в браузере. Агент, делающий push-notes, об этом не знал. Smoke-render переносит ошибку на этап загрузки — варнинги попадают в тот же канал, что и parse-ошибки, и видны через pushNotes / админский список шаблонов без браузера.
  • Как. Автоматически, без флагов. После синхронизации ищите в варнингах шаблона smoke render error / smoke render panic. Шаблоны без View (parse-ошибка) и без ссылающихся на них заметок пропускаются.

Отладка шаблонов — Meta.Debug() и глобальный debug()

  • Что. В Jet-шаблонах: {{ Meta.Debug() }} выводит метаданные заметки; глобальный {{ debug(<expr>) }} через reflection печатает тип, значение и набор методов любого выражения.
  • Зачем. Убирает цикл «угадай, что видит шаблон» при работе с layout-ами и компонентами.
  • Как.

CLI renderlayout.py — рендер шаблона на заметке из терминала

Исправления

  • layoutloader: nil-guard для YieldNode.Parameters; ID шаблона в preview нормализуется как в продакшене.
  • Preview renderlayout: autoimport, проводка yield_blocks и htmlInjections совпадают с продакшеном.
  • renderpreview парсит YAML-frontmatter из note.src как реальный загрузчик.
  • templateviews.GetStrings возвращает пустой слайс вместо nil (нет сюрпризов при итерации в шаблоне).

Документация и chore

  • Dev-справка по Forms + roadmap, BEM rendering skill, секция про debug() в Jet.
  • Lint чист в updatenotes, layoutloader, noteloader.

v0.3.1 — исторический (backfill)

Формы в заметках (первая версия)

  • Что. Формы встраиваются в vault-заметки через frontmatter и рендерятся стандартным шаблоном. Поддержка нескольких форм в одной заметке; submit хранит note_version_id и form_id.
  • Зачем. Опубликованный сайт собирает ввод (регистрации, контакты, опросы) без внешних сервисов.
  • Как. См. docs/dev/forms.md и docs/{en,ru}/user/forms.md.

HTML-инъекции в layout-ах

  • Что. Кастомные HTML-инъекции (placement head / body_end) теперь применяются и внутри Jet-layout-ов, не только в стандартном шаблоне.
  • Зачем. Аналитика, кастомные скрипты и SEO-теги работают и на страницах с кастомными layout-ами.
  • Как. Админка → HTML injections, placement head или body_end.

Переработанный переключатель языка

  • Что. Dropdown с полными нативными названиями языков и нормализацией; флаг US для английского; многоязычные документы.
  • Зачем. Мультиязычные сайты выглядят корректно и правильно выбирают альтернативу по языку.
  • Как. Frontmatter lang: / lang_redirect:; переключатель рендерится автоматически.

Preview-эндпоинт renderlayout (/_system/renderlayout)

  • Что. Админский эндпоинт для рендера произвольного layout-а на заметке.
  • Зачем. Редактор / IDE-интеграции могут показывать живой preview изменений в _layouts/*.
  • Как. Спецификация: docs/superpowers/specs/2026-05-10-renderlayout-endpoint-design.md.

Админка: включение/отключение API-ключей

  • Что. GraphQL-мутация и кнопка в админке для переключения состояния API-ключа; автоматическая чистка логов API-ключей через 90 дней.
  • Зачем. Можно приостановить ключ без его ротации; логи не разрастаются.
  • Как. Админка → панель API keys.

Onboarding vault: конфиги для агентов

  • Что. Скачиваемый онбординг-vault теперь содержит .mcp.json, codex.json, antigravity-конфиг и AGENTS.md.
  • Зачем. Drop-in настройка AI-агентов над Obsidian-vault без ручной проводки.
  • Как. Скачайте онбординг-vault, конфиги уже внутри.

Cronjob-ы заблокированы для редактирования по умолчанию

  • Что. Редактирование cronjob-ов выключено, пока не передан --cronjobs-allow-edit.
  • Зачем. Снижает риск ошибок в общих / production-развёртываниях.
  • Как. Добавьте флаг в стартовый скрипт, если правда нужно редактировать cron через админку.

Заметные исправления

  • Backlinks / similar notes исключают системные заметки (пути с _).
  • TOC-якоря снова работают (id у заголовков попадает в HTML).
  • Mesh template: yield_blocks перенесён в <head> с документированными ограничениями.

v0.3.0 — исторический (backfill)

Документированный self-hosted деплой

  • Что. End-to-end гайд по запуску trip2g на своей инфраструктуре.
  • Зачем. Воспроизводимая установка вне хостинга.
  • Как. docs/{en,ru}/user/hosting.md и связанные документы.

Sign-in wall + капча (Auth phase 1A)

  • Что. Требование входа на конкретные заметки, капча на auth-флоу, усиленные сессии.
  • Зачем. Закрывает приватный контент; снижает абьюз публичных auth-эндпоинтов.
  • Как. Frontmatter / subgraph require_signin; стандартный шаблон рендерит стену.

Vault-секции layout-а

  • Что. Header / footer / sidebar могут браться из vault-заметок.
  • Зачем. Авторы правят «обвязку» так же, как контент — без хаков в шаблонах.
  • Как. Размещайте заметки по конвенциональным путям (см. docs/dev/default_template.md).

Vault-патчи frontmatter

  • Что. Markdown-файлы в vault могут декларировать патчи, которые применяются к frontmatter других заметок при загрузке.
  • Зачем. Массово тегировать, ставить layout или нормализовать метаданные без правки каждой заметки.
  • Как. docs/dev/frontmatter_patches.md.

Поиск: эмбеддинги bge-m3 + микросервис эмбеддингов

  • Что. Переход на модель bge-m3; отдельный сервис embedding-server; топ-K векторного поиска с matchOrigin.
  • Зачем. Лучше семантический поиск и развязка embedding-нагрузки.
  • Как. Настройте эндпоинт эмбеддингов; векторный поиск доступен через существующие search-API.

Улучшения MCP

  • Что. Результаты MCP-поиска адресуемы и самоописываемы, открываются как сфокусированный chunk-read; текстовые хиты маппятся в ближайшие чанки.
  • Зачем. RAG-клиенты получают богаче и проще навигируемые результаты.
  • Как. Подключайтесь по MCP; для проводки клиента см. docs/user/ai-agent-docs-setup.md (если есть в вашем vault).

«Читать в Telegram» + Telegram UX

  • Что. Кнопка на странице заметки; для опубликованных постов используются публичные TG-ссылки; UTM-теги на трафике из Telegram.
  • Зачем. Замыкает связь между публикациями на сайте и аудиторией Telegram.
  • Как. Автоматически для постов, опубликованных через TG; схема UTM описана в docs/superpowers/specs/.

CLI exporttgchannel

  • Что. Новая CLI-команда для экспорта Telegram-канала в Obsidian-markdown.
  • Зачем. Один шаг от существующего канала к vault-у.
  • Как. go run ./cmd/exporttgchannel --help.

Заметные исправления

  • Настраиваемая нормализация URL с 301-редиректами для альтернативных вариантов.
  • Аудио рендерится как <audio>, документы — как ссылки.
  • Очередь: устранена утечка горутин при двойном старте и deadlock при остановке.
  • Wikilink [[slug#anchor]]: якорь отрезается до lookup-а заметки.
  • Все варнинги golangci-lint исправлены, добавлен pre-push хук.