На рабочем столе лежала копия моего сервиса. Только сервис давно жил в другом месте
Проблема обнаружилась, когда мы сверили его с работающим сервисом. Разработка давно ушла вперёд на сервере, а папка на рабочем столе осталась в прошлом. При этом никакой заметной таблички «это архив» на ней не было. Я оставил рядом с живым проектом убедительную декорацию рабочего места.
Самое неприятное в этой истории — отсутствие красивой аварии. Ничего не обязано падать, чтобы ты занимался бесполезной работой. Файл открывается, помощник понимает задачу, предлагает изменение. Можно внимательно проверить его ответ и всё равно пропустить главное: изменение готовится для другой версии продукта.
Ошибка началась до первой правки
Я собираю сервисы с помощью нейросетей и привык разбирать качество их решений: правильно ли поняли задачу, не придумали ли лишнюю функцию, не задели ли соседний участок. Здесь проверять следовало раньше — в момент выбора папки.
У старой копии не было связи с удалённым репозиторием, общим хранилищем истории проекта. Поэтому она не могла нормально показать, насколько отстала от него. Внутри могла быть своя история, но сравнивать её с актуальной было не с чем. Я рассчитывал на предупреждение, для которого сам не создал условий.
Для предпринимателя это похоже на таблицу с заказами, которую когда-то скачали из общей системы. Она лежит под привычным названием, формулы работают, строки можно править. Только новые заказы давно приходят в другое место. Аккуратность внутри файла никак не подтверждает его актуальность.
У меня произошло именно такое расхождение ожиданий. Наличие исходников на моём компьютере я воспринимал как признак того, что это мой текущий проект. Хотя рабочая версия сервиса уже жила отдельно.
Просто удалить папку было бы слишком удобно
Когда находишь старую копию, хочется сразу убрать её с глаз. Но в ней оказались изменённые файлы. Удаление без сравнения создало бы другую проблему: вместе с ненужным можно потерять полезное, которое так и не доехало до основной версии.
Пришлось сверять содержимое. Часть файлов уже существовала на сервере в более свежем виде. Часть оказалась разовыми проверками и старыми резервными копиями. Полезные инструкции перенесли в актуальный репозиторий, саму папку сначала сохранили в архив и только затем убрали с рабочего стола.
Отдельно насторожили файлы изменения структуры базы. В старой и новой копиях под одинаковыми номерами лежали разные вещи. По одному списку названий легко решить, что часть работы потеряна, и начать возвращать её в работающий сервис.
Но проверка самой базы показала, что нужные объекты там уже есть. Обнаружился другой пробел: описание части этих объектов отсутствовало в актуальной истории проекта. Работающий сервис и возможность собрать его заново оказались разными вопросами. Недостающее описание добавили отдельно; повторно менять живую базу ради порядка в папках не стали.
Мне этот момент запомнился сильнее самой старой копии. Даже после обнаружения ошибки очень хотелось принять следующее быстрое решение по внешним признакам. Совпадает номер файла — значит, это одно и то же изменение. Нет файла — значит, нет и результата. Оба предположения требовали проверки.
Что теперь означает «мой проект»
После разбора мы определили, где хранится общая история, где готовятся изменения и куда попадает готовая версия. На компьютере появился свежий клон, связанный с общим репозиторием. Сервер остался местом запуска сервиса. Старый каталог перестал притворяться рабочим.
Связь настроили так, чтобы можно было увидеть расхождение локальной и общей истории. Это не обещание, что копии никогда больше не разойдутся. Это возможность заметить расхождение до того, как помощник начнёт вносить правку.
В инструкции для агентов добавили физические пути и назначение каждой копии. Одного названия продукта недостаточно: помощник может найти похожую папку и вполне добросовестно работать в ней. Теперь начало задачи включает проверку того, откуда взят код и с чем он сравнивается.
Я не могу приписать этому разбору рост выручки или сэкономленные часы: такого замера у меня нет. Результат здесь гораздо приземлённее. С рабочего стола убрали ложную точку входа, ценное сохранили, а для следующей правки стало понятно, какую версию открывать.
Раньше я в основном спрашивал у ИИ-помощника, что именно он собирается изменить. После этой истории появился вопрос, который должен прозвучать раньше: покажи, что ты вообще открыл тот проект, который сейчас работает у меня.