Agno выпустила v3.0.3 30 августа в 20:45:21 UTC, представив набор инструментов для управления знаниями. Затем она выпустила v3.0.4 в 22:40:41 UTCна час и пятьдесят пять минут позже — и использовала этот патч-релиз, чтобы переписать публичный интерфейс набора инструментов.

Что изменилось в патче

Три вещи, которым не место в патче. Путь модуля был перенесён, и за ним не осталось никакой совместимой прослойки. Четыре флага конструктора были переименованы. А обработка неизвестных именованных аргументов в конструкторе означает, что старые имена не отвергаются — они молча игнорируются.

Почему молчание хуже громкого сбоя

Именно эта последняя деталь наиболее опасна. Если переименование флага вызывает ошибку, все затронутые развёртывания громко падают при запуске, и кто-то исправляет это за минуты. Если же старое имя тихо отбрасывается, конструктор подставляет собственное значение по умолчанию — и оператор, который специально указал флаг, чтобы отключить возможность, после обновления получает эту возможность включённой, без ошибки, без предупреждения и без строки в журнале. Обновление выглядит успешным. Конфигурация, которую оно несёт, не переживает его.

Пункт об ошибке, который на деле является исправлением безопасности

В этом же релизе исправлена ошибка значения по умолчанию, из-за которой снималась подтверждающая блокировка с единственного инструмента в наборе, способного уничтожать хранимое содержимое. Это исправление имеет значение для безопасности. В заметках оно оформлено как обычный пункт об ошибке, рядом с косметическими изменениями, без каких-либо указаний на то, что именно из-за него оператору может понадобиться срочно обновиться.

Что неверно в привычной трактовке

Семантическое версионирование широко воспринимается как контракт: увеличение патча означает, что обновление безопасно. Здесь же патч-цифра прикрывает перенос модуля без прослойки, переименование четырёх флагов и изменение фактического значения по умолчанию — то есть определение breaking change. И проект знал этот принцип: ранее в тот же день в одном из релизов утверждалось, что нужно отвергать именованные аргументы, которые молча игнорируются, а не проглатывать их. Эту позицию сформулировали — и спустя несколько часов не применили к собственному переименованию.

Как устанавливать обновление

Не воспринимайте переход с 3.0.3 на 3.0.4 как обычное обновление. Перед апгрейдом проверьте старые имена флагов и старый путь модуля, потому что ни установщик, ни среда выполнения не сообщат вам, что они перестали что-либо значить.