Заметки · октябрь 2026
Магазин, который выглядел готовым: 28 проблем вне обычного пути.
Магазин трикотажа собрали в Claude Code по 17 сообщениям обычными словами — так, как владелец описал бы, чего хочет: каталог, оплата картой или переводом, возвраты, админка с отчётами, установка на телефон. Код владелец не читал. После последнего сообщения магазин выглядел как магазин настоящего бренда и работал при обычном просмотре.
Магазин вымышленный, данные тестовые; он собран для этой проверки. Каждая находка ниже — настоящий прогон.
Что говорил ИИ, который его собирал, и что было на самом деле
- Он написал «Orders can't be placed twice». Это подтвердилось. Но ключ, который это обеспечивал и хранился на устройстве 12 часов, после обрыва связи отдавал заказ одного покупателя следующему, кто заказывал с того же устройства.
- Он написал, что заказы и адреса покупателя удаляются с устройства, когда тот выходит из аккаунта. После выхода устройство по-прежнему открывало заказ покупателя с именем, улицей, почтой и телефоном.
- Он написал, что дашборд, отчёты и склад сходятся с заказами и что он проверил каждый. Возвраты «за последние 30 дней» на дашборде дали €5 619,79, а в отчётах €5 483,80: обе цифры верны для своего периода, под одинаковым названием.
Четыре главные
- Любой новый аккаунт читал заказы гостей. Аккаунт заводился за минуту. С ним любой заказ, сделанный без аккаунта, открывался по номеру: имя, адрес, почта, телефон, что купили. Номера шли подряд, а без аккаунта делали примерно четыре заказа из десяти.
- Чужой заказ после обрыва связи. Следующий покупатель на том же устройстве нажимал «Оформить · €53,99» и видел заказ предыдущего на €29,99 с его адресом.
- Возврат на любую сумму. Владелец мог записать возврат €500 по заказу на €29,99, и покупатель получал письмо, что €500 уже в пути.
- Оплата отменённого заказа. Владелец отменил заказ, пока покупатель был на странице оплаты картой. Покупатель заплатил €27,99; магазин оплату не записал и ничего не вернул.
Ни одна из четырёх не видна, пока ходишь по магазину так, как задумано. Каждой нужен один шаг в сторону: номер, набранный в адресной строке, связь, пропавшая не в ту секунду, лишняя цифра, два человека одновременно.
Что выдержало
Цены и остатки задавала база, а не страница. Суммы всех 2 059 заказов сошлись до цента, отчёты совпали с независимым пересчётом. Без аккаунта данные покупателей прочитать было нельзя. Поддельные уведомления об оплате отклонялись.
Что я из этого выношу
«Готово» — это слово того, кто собирал, а он проверяет путь, который сам построил. Проблемы живут рядом с этим путём. Поэтому каждая найденная проблема становится тестом, который сначала падает: на этом магазине из 51 такого теста на сданной версии падало 42, после исправлений — ни одного. И каждое исправление проверяется заново перед следующим, потому что часть того, что нашлось позже, внесли сами исправления.
Четыре вещи, которые можно попробовать на своём приложении за десять минут:
- Зарегистрироваться новым пользователем и открыть чужой заказ или запись, поменяв номер в адресе.
- Оборвать связь сразу после нажатия кнопки, которая списывает деньги, а потом заказать снова как другой человек с того же устройства.
- Отменить заказ, пока в другой вкладке открыта его страница оплаты, а потом заплатить.
- Ввести слишком большую сумму и сумму в формате страны ваших покупателей (1.234,56).
Перед выходом магазина в сеть нашлась ещё одна: форма рассылки отправляла письмо магазина на любой адрес любое число раз. Она исправлена, и исправленный магазин работает: откройте его сами с демо-входом со страницы кейса.