Полевые заметки

Схема API описывает намерение вендора, а не поведение его клиента

Документированный hash в кнопке VK ломал открытие мини-приложения; причину нашло сравнение трёх ссылок, а не ещё одна гипотеза из спецификации.

Динамический хвост в системном промпте отключает кеш провайдера целиком

Таймстемп и память в начале 92-тысячетокенного агентного запроса превращали каждый вызов в холодный; статичный префикс и метрика cached tokens сделали дефект проверяемым.

CUDA PTX vs SASS: toolchain и архитектура GPU решают, запустится ли модель

Почему свежий llama.cpp всё равно падал на Blackwell и как нативный SASS убрал несовместимый PTX JIT.

Тупость, ломающая контекст агента

Из-за среза не с той стороны мультимодальный агент получал самые старые картинки вместо самых свежих.

Postgres, партиции и пропавшие посты

Данные сохранялись в партиции, но cursor.rowcount возвращал ноль и не запускал пайплайн обработки.

hash() стабилен только внутри одного процесса

Один источник создавал новый post_id для того же URL при каждом запуске процесса и обходил дедупликацию.

Семантические решения: модели для смысла, код для инвариантов

В агентской системе модель должна интерпретировать запрос и выбирать действия, а код - сохранять гарантии, безопасность и необратимые инварианты.

Критичные ссылки не должны зависеть от одного внешнего домена

Когда внешний домен Telegram временно перестал работать, все ссылки на ботов, каналы и пользователей сломались одновременно.

Отложенный запуск должен быть отдельным инструментом

Когда планирование встраивают в каждый инструмент отдельно, новые каналы раздувают код; общий инструмент планирования сохраняет эту логику в одном месте.

JWT обновлялся не полностью после миграции сервиса

После переноса сервиса пользователи вылетали из системы из-за рассинхронизации access и refresh token и скрытых значений по умолчанию в конфигурации.

Оплата прошла, но тариф не применился

Платёжный путь сломался на предположении, что тариф уже существует: update-only логика должна уметь создать состояние, если конкурентный trial ещё не успел его создать.

Троекратный всплеск соединений с БД из-за цикла на клиенте

Даже успешные повторные запросы могут исчерпать пул соединений: серверу нужны rate limit, а клиенту - защита от бесконечного цикла после сбоя streaming-соединения.

Не превышайте 32 символа в идентификаторах ревизий Alembic

Alembic хранит текущую ревизию в колонке VARCHAR(32), поэтому длинные идентификаторы переполняют её и ломают миграции.

App Store review выявил незакрытые требования продукта

Отклонение iOS-приложения показало, что техническая готовность недостаточна без удаления аккаунта, корректной авторизации, безопасных скриншотов и ясной модели оплаты.

Локальные и контейнерные окружения нельзя смешивать

Ruff перестал запускаться в Zed, потому что локальный проект использовал Linux-бинарник из контейнерного virtualenv.

Неограниченная история диалога может переполнить контекст

Каркас агента ограничивал контекст из памяти, но не активную историю диалога; восстановление после перезапуска указало на вероятное переполнение, не доказав его.

Пользовательские данные нужно удалять мягко

Если пользователь случайно удалил чат, soft-delete с контролируемым восстановлением безопаснее немедленного физического удаления.

Совместимость Qwen3.5:32B и OpenCode - часть контракта

Сессия локального coding agent может оборваться из-за несовместимого формата reasoning, даже если модель загрузилась и успела изменить файлы.

CI не должна зависеть от одного package registry

Таймауты внешнего PyPI ломают сборку контейнеров; зеркала и собственный registry превращают такую зависимость в управляемый отказ.

Корпоративная сеть может заблокировать SSE

Если обычные HTTP-запросы проходят, это ещё не означает, что корпоративная сеть пропустит длительное SSE-соединение, необходимое для streaming-ответов агента.

Удаление файла не очищает память RAG

Удаление исходных документов не гарантирует удаление их векторных представлений: память агента нужно очищать на каждом слое хранения.

Почему агент не должен сам выбирать архитектуру незнакомой задачи

Попытка поручить агенту клонирование голоса без предварительного исследования превратилась в бесконечный перебор: сначала нужно определить архитектуру и критерии оценки.

Одной vision-модели недостаточно для надёжного разбора чеков

Vision-модель может распознать чек, но ошибиться в цене, названии, количестве или итоговой сумме; надёжность требует проверяемого pipeline.

Fallback для аудио должен покрывать реальные ошибки декодирования

Аудиофайлы могут воспроизводиться и при этом не определяться библиотекой: fallback через ffmpeg нельзя ограничивать одним предполагаемым типом исключения.

Не всякая хорошая идея заслуживает автоматизации

Идея, предложенная моделью и звучащая удобно, ещё не является полезным изменением: сначала нужно проверить её ценность и критерий успеха.