almdev Разработка с ИИ

Агент сделал не то: как исправить результат
Воспроизводим потерю задачи и проверяем причину по коду

На намеренно сломанной версии проходим воспроизведение, сообщение об ошибке, проверку гипотезы и минимальное исправление.

Подкатегория: Проверить и продолжить

Чтение
3 мин
Технологии / версии
AI-разработка · JavaScript · Начало работы
Серия
Цикл «С чего начать» · часть 7 из 8
28 сен 2026 · 3 мин · 24 просмотра · С чего начать
Разработчик ищет причину исчезновения задачи и отмечает ошибку в схеме.
Проверить и продолжить 09/2026

После включения фильтра выполненная задача исчезла. После выключения — не вернулась. Здесь не поможет запрос «сделай правильно»: нужно отделить наблюдаемую ошибку от догадки о её причине.

Для упражнения возьмите broken из скачанного архива. Это намеренно сломанная версия, а не доказательство, что конкретный агент допускал такую ошибку. Скопируйте её в отдельную рабочую папку для отладки. Своё принятое решение из предыдущей статьи сохраните.

Получите короткое воспроизведение

Откройте index.html новой копии. На странице есть предупреждение об учебном дефекте. Перезагрузите её, чтобы вернуться к исходным трём задачам. Затем включите и выключите «Только незавершённые». Останутся две строки; выполненная «Открыть проект» потеряна до следующей перезагрузки.

Не добавляйте к этому сценарию лишние действия: сортировку, другую вкладку, изменение всех статусов. Чем короче путь от исходного состояния к ошибке, тем легче проверить гипотезу. Если у вас получилось другое поведение, сначала уточните, открыта ли копия broken, а не эталон.

Передайте факты вместо оценки

В рабочей копии воспроизводится потеря задачи.
Исходно после перезагрузки три задачи, «Открыть проект» выполнена.
Включаю «Только незавершённые», затем выключаю.
Ожидаю все три задачи с прежними статусами.
Фактически остаются «Составить план» и «Проверить результат».
После перезагрузки три задачи возвращаются.

Сначала найди причину в app.js и объясни её по коду, без правки.
Проверь, сохраняется ли полный массив при включении фильтра.
Не добавляй хранилище и не восстанавливай исходные данные при каждом клике.

Последняя граница нужна потому, что восстановление начального массива замаскирует исчезновение, но уничтожит пользовательские изменения статусов. Нам нужно сохранить текущие данные, а не просто снова увидеть три строки.

Проверьте причинную связь

В подготовленном broken/app.js внутри render() есть эти строки:

if (filter.checked) tasks = tasks.filter(task => !task.done);
const visibleTasks = tasks;

filter() создаёт новый массив подходящих элементов; это поведение описано в справке MDN. Ошибка здесь в присваивании: новый, сокращённый массив заменяет tasks. Снятие checkbox не возвращает прежние элементы.

Правка меняет выборку для отображения, сохраняя исходную коллекцию:

const visibleTasks = filter.checked
    ? tasks.filter(task => !task.done)
    : tasks;

В учебной версии можно также заменить верхнее let tasks на const tasks: переназначать сам массив больше не требуется. Это не запрещает изменять done у его объектов. Фильтрация создаёт новый массив ссылок на те же объекты, поэтому отметка задачи меняет её состояние и в полном списке.

Этого объяснения достаточно, чтобы связать правку с дефектом. Если вместо него агент предлагает таймер, принудительную перезагрузку страницы или новый способ хранения, спросите, как именно это устраняет потерю ссылки на полный набор задач.

Исправьте и повторите тот же сценарий

Разрешите заменить вычисление видимого списка, затем откройте diff. В этой учебной ошибке не требуется менять CSS или структуру страницы. После сохранения перезагрузите страницу: данные, уже потерянные в памяти старым кодом, сами не восстановятся от новой формулы.

Повторите прежние действия: включение и выключение должны вернуть все три задачи. Теперь проверьте более сильный сценарий: отметьте «Составить план», включите фильтр, выключите его. Обе выполненные задачи должны вернуться выполненными. Так мы отличаем сохранение текущего состояния от сброса к исходному.

Завершите проверками пустого списка и клавиатуры из предыдущей статьи. Исправление одной причины не освобождает от проверки соседнего поведения, которое использует ту же отрисовку.

Когда остановить повторные попытки

Если агент снова меняет код без объяснения, попросите остановиться и перечислить подтверждённые факты: исходное состояние, действие, результат и участок, где расходится ожидание. Следующая попытка должна проверять новую гипотезу. Простая замена одного варианта кода другим не создаёт понимания причины.

Не обязательно бесконечно добиваться исправления от инструмента. Вы можете самостоятельно сделать понятную правку, попросить другого разработчика проверить гипотезу или вернуться к исходной копии. Решение зависит от сложности и цены ошибки. В нашем стенде полезнее разобрать две строки присваивания, чем усложнять процесс ещё одним агентом.

После исправления остаётся конкретное знание: фильтр меняет представление, полный набор данных сохраняется. Его стоит передать следующей сессии вместе со способом проверки. В последней статье соберём небольшой контекст проекта, который поможет продолжить работу.

Серия

Цикл «С чего начать»

#ai-development #javascript #beginner