Skip to content

v0.3.17

Choose a tag to compare

@smixs smixs released this 11 Aug 10:36
· 459 commits to main since this release
  • 🛡️ Gate стоит на каждом выходе в Telegram - служебные уведомления с живым текстом (ошибка провайдера, вывод iva doctor, лог сборки) уходили в чат мимо фильтра, и ключ из такого сообщения доезжал до вас целиком. Теперь гейт живёт на самом вызове Bot API, поэтому Outbox, мост, апдейтер, доктор и любой экран, который напишут завтра, закрыты одной точкой. Заодно переписаны шаблоны ключей: из 13 реальных форм 8 не матчились вовсе (среди них sk-ant-…, sk-or-v1-… и sk-proj-…), теперь у каждого провайдера свой шаблон и своё имя в логе. Логин с паролем внутри адреса (https://user:pass@host) вырезается по позиции, а не по форме ключа. Секрет на стыке чанков больше не проскочит - гейт срабатывает до нарезки сообщения.
  • 🧠 Атомарная запись и локи собраны в один модуль - идиома «пиши во временный файл, потом переименуй» была скопирована семь раз, локов набралось четыре разных вида: три схемы имён для временного файла (одна общая, так что два писателя могли затереть друг друга), четыре паузы перед повтором, два способа доказать, что лок твой. Теперь это agent/lib/fs-atomic.ts, механизм в модуле, а таймауты и режимы файлов остались у вызывающего кода. Тесты бьют по больному: процесс убит между записью и переименованием, две записи в один файл, протухший лок; каждый прогнан против мутантов и печатает свой seed. Обещание ADR-0002 «данные не теряются» опирается наконец на один проверенный кусок кода.
  • 📦 Обновление не падает из-за занятого порта - health-проба находила свободный порт, отпускала его, и через сотни миллисекунд версия занимала его по-настоящему. Второй апдейтер на той же машине умирал с EADDRINUSE, хотя с обновлением всё было в порядке, а на macOS такая проверка слепа в принципе. Теперь проба отличает занятый порт от невзлетевшей версии и перебирает до четырёх кандидатов.
  • 🧹 Граница ядра закрыта - telegram.ts ужался с 1470 строк до 427, наружу ведёт только Outbox. Тест-сторож держит ноль побегов из agent/ в scripts/ и ловит импорты ради побочного эффекта и запуск чужих точек входа. Frontmatter разбирает один парсер, расписания живут в одной таблице.