Практикум: исправление ошибки на Windows

Этот практикум адаптирует Engineering Playground. Он не подключается к рабочему сервису. Исходник намеренно содержит ошибки; использовать его как готовый модуль управления складом нельзя.

1. Получите зафиксированную версию исходника

Это команды для самостоятельного выполнения. Они требуют Git и доступ к GitHub. Папка с уникальным именем создаётся в системной временной папке, чтобы не затронуть существующую рабочую копию.

$trainingRoot = Join-Path ([IO.Path]::GetTempPath()) ('codex-training-' + [guid]::NewGuid().ToString('N'))
$sourceRoot = Join-Path $trainingRoot 'source'
New-Item -ItemType Directory -Path $trainingRoot -ErrorAction Stop | Out-Null
git clone 'https://github.com/Phelan164/codex-howto.git' $sourceRoot
if ($LASTEXITCODE -ne 0) { throw 'Не удалось клонировать учебный репозиторий' }
git -C $sourceRoot checkout --detach '65e9712af333bea85f20030ed2b33b51308a228e'
if ($LASTEXITCODE -ne 0) { throw 'Не удалось выбрать зафиксированную версию' }

Склонированный репозиторий служит источником. Код меняется в отдельной учебной копии:

$playground = Join-Path $trainingRoot 'playground'
$fixtureSource = Join-Path $sourceRoot 'labs/engineering-playground'
Copy-Item -LiteralPath $fixtureSource -Destination $playground -Recurse -ErrorAction Stop
Set-Location -LiteralPath $playground -ErrorAction Stop
if ((Get-Location).Path -ne (Resolve-Path -LiteralPath $playground -ErrorAction Stop).Path) { throw 'Открыта не учебная папка' }
git init
if ($LASTEXITCODE -ne 0) { throw 'Не удалось создать учебный Git-репозиторий' }
git switch -c 'training/backend-boundary'
if ($LASTEXITCODE -ne 0) { throw 'Не удалось создать учебную ветку' }
git add .
git commit -m 'Baseline: intentionally flawed teaching fixture'
if ($LASTEXITCODE -ne 0) { throw 'Для baseline-коммита нужны настроенные имя и email Git. Не меняйте глобальную конфигурацию автоматически.' }

Исходный AGENTS.md использует python3. Сначала выберите работающий интерпретатор. Вариант ниже — для установленной команды python:

$pythonCommand = (Get-Command python -ErrorAction Stop).Source
& $pythonCommand --version
if ($LASTEXITCODE -ne 0) { throw 'Python не запустился' }
& $pythonCommand -m unittest discover -s backend -p 'test_*.py' -v
if ($LASTEXITCODE -ne 0) { throw 'Базовые тесты не прошли. Сначала разберите окружение.' }

Если python открывает Microsoft Store или не найден, остановитесь и проверьте Get-Command py -ErrorAction Stop, затем py -3 --version. Если проверка успешна, используйте py -3 -m unittest .... Это выбор установленного интерпретатора, а не требование устанавливать новый. В учебной копии вручную замените в AGENTS.md только исходную команду проверки на фактически проверенный вариант: python -m unittest ... либо py -3 -m unittest .... Сохраните исправление отдельным коммитом до задания агенту. Не переносите правила учебного проекта в основной продукт.

2. Поставьте задачу без установки skills

Цель: исправить один дефект проверки входных данных в backend/inventory.py.
Контекст: контракт reserve описан в docstring; начни с backend и его тестов.
Ограничения: меняй только backend; без новых зависимостей, сети и развёртывания.
Не открывай rubric.md; не исправляй frontend и infra.
Результат:
1. Запусти исходные тесты.
2. Найди нарушенный входной контракт и воспроизведи его.
3. Добавь регрессионный тест и покажи, что до исправления он падает.
4. Исправь причину минимальным изменением.
5. Запусти тот же тест и весь backend-набор.
6. Проверь diff и отчитайся: команды, результаты, изменённые файлы, ограничения.

Для этого задания skill необязателен. Если вы хотите отдельно изучить upstream engineering-loop, сначала прочитайте его SKILL.md и вспомогательные инструкции. Затем скопируйте только выбранный skill в .agents/skills учебной копии и повторите сравнение на новой исходной копии. Не устанавливайте весь каталог глобально ради одного упражнения.

3. Проверьте результат

  • Есть исходный baseline: два теста проходят до изменения.
  • Есть новый тест, который падает на исходном коде.
  • После исправления проходят новый тест и весь backend-набор.
  • Контракт не ослаблен под реализацию.
  • Diff затрагивает только разрешённую область; новые файлы видны в git status.
  • В отчёте нет выдуманных браузерных, облачных или CI-проверок.

Перед продолжением зафиксируйте своё решение. Только затем откройте rubric.md и сравните наблюдения. Не принимайте список из rubric за исчерпывающий аудит.

4. Дополнительные упражнения

Frontend. Попросите проверить frontend/checkout.html: подписи полей, клавиатурный ввод, сообщение об ошибке и обработку недоверенного текста. Проверяйте взаимодействие в браузере; чтения HTML недостаточно для отчёта «всё работает». Если меняется внешний вид, проверьте узкий и широкий экран.

Инфраструктура. Попросите только разобрать infra/deployment.yaml: образ, привилегии, ресурсы, readiness/liveness, условия остановки и отката. У этого стенда нет рабочего кластера. Результат — план и локальные замечания; команд apply не выполняйте.

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

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

← Оглавление