Skip to content
Public template

About

Учебное приложение с ошибками и локальными событиями Sentry SDK для агентов, создающих issue и PR.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Repository files navigation

Готовое приложение для проекта «Агент разбора инцидентов» программы «Инженерия AI-агентов для SDLC». Небольшой магазин позволяет просматривать каталог, искать товары, открывать корзину и оформлять заказ. Некоторые пользовательские операции завершаются ошибками. Агент должен исследовать реальные события, создать issue, исправить приложение и открыть PR.

Свой репозиторий из шаблона

Нажмите Use this template → Create a new repository. Выберите свой аккаунт GitHub и назовите репозиторий incident-lab. Создайте репозиторий и клонируйте его. В Settings → General → Features проверьте, что Issues включены. В Actions разрешите запуск workflows.

Issue и PR создавайте в своём репозитории приложения. В PR ветка с исправлением направляется в main этого же репозитория. Самого агента пишите с нуля в отдельном репозитории на выбранном языке. Здесь нет готового кода агента.

При использовании GitHub CLI задайте свой репозиторий по умолчанию. Выполните команды из его рабочей копии, заменив YOUR_LOGIN своим логином. В командах публикации передавайте --repo YOUR_LOGIN/incident-lab. Для HTTP API владельцем также должен быть ваш аккаунт.

gh repo set-default YOUR_LOGIN/incident-lab
gh repo edit YOUR_LOGIN/incident-lab --enable-issues

Запуск

Потребуются Docker с Compose и make. Node и pnpm на хосте для запуска контейнера не нужны.

make up

Откройте магазин. При занятом порте запустите APP_PORT=8088 make up и откройте http://localhost:8088.

make traffic
make events

Нагрузчик повторяет действия пользователя и печатает результаты, включая HTTP-статусы. Ошибки являются ожидаемым результатом исходной версии. Их наличие не останавливает нагрузчик. Он использует ту же функцию формирования поискового запроса, что и браузерный клиент.

make down останавливает приложение, сохраняя данные. make reset останавливает его и удаляет только базу и журналы этого стенда. После сброса снова выполните make up.

Локальные события

Официальный Sentry SDK работает через собственный файловый транспорт. Облачный Sentry, сервер Sentry, аккаунт и токен не нужны. Значение DSN в коде служебное, сетевой транспорт заменён файловым.

Файл в каталоге var Содержимое
events.jsonl События SDK с исключениями, стеком, breadcrumbs и метками
envelopes.jsonl Исходные envelopes SDK в формате JSON, без разбора текстового протокола
requests.jsonl Успешные и неуспешные HTTP-запросы
shop.sqlite База приложения

Каталог var/ монтируется из рабочей копии и исключён из Git. Агент может читать файлы напрямую. Строка JSONL содержит одну запись. Фильтруйте события по release и метке tags.run_id. У запроса есть requestId, а у события метка tags.request_id. Отсутствие новых ошибок не доказывает исправление без успешного контрольного трафика.

Идентификатор версии задавайте SHA кода. Значение local по умолчанию подходит только для знакомства со стендом.

RELEASE=$(git rev-parse HEAD) RUN_ID=browser-01 make up
RUN_ID=attempt-01 make traffic

Нагрузчик передаёт выбранный runId всем запросам текущего запуска. Если RUN_ID или TRAFFIC_RUN_ID не задан, он создаёт случайный идентификатор и печатает его в отчёте. Этот идентификатор записывается в события и журнал запросов. Переменная RUN_ID при запуске приложения служит меткой запросов из браузера без заголовка x-run-id. Проверки /health в журнал не записываются.

Перед контрольным запуском закоммитьте изменения приложения. При незакоммиченных изменениях git rev-parse HEAD не описывает содержимое собранного образа. Каждый PR и отчёт проверки связывайте с точным SHA.

Поведение приложения

Цены хранятся в копейках. Каталог показывает только доступные товары. Поиск должен находить товар по части названия без учёта регистра. Сохранённая корзина может содержать товар, снятый с продажи; такой товар не должен мешать работе с остальными позициями и не включается в сумму. Заказ можно оформить без промокода. Промокод WELCOME уменьшает сумму на 10%.

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

Работа агента

Агенту нужны доступ к локальным журналам, рабочая копия своего репозитория приложения и инструменты изменения файлов и запуска проверок. Доступ к GitHub выдаётся компоненту публикации отдельно. Приложение и тесты не должны получать ключ модели или GitHub token. Не добавляйте эти секреты в Compose и Actions приложения.

Агент создаёт ветку, регрессионный тест и исправление, запускает проверки и открывает связанный PR в своём репозитории приложения. Исходные тесты проверяют работоспособность базовых функций и запись SDK, но не являются полным набором проверки всех дефектов. Дополняйте их тестами исправляемого поведения.

Открытый PR ещё не означает, что исправленный код запущен. Для проверки локально запустите нужную ревизию с её SHA в RELEASE и повторите нагрузку. Автоматическое слияние и деплой не включены.

Проверки и разработка

Для разработки самого приложения установите инструменты из mise.toml.

mise install
mise run setup
mise run check

Тесты используют Vitest, oxlint включает его правила. SQLite встроен в Node 26, отдельный сервер базы не требуется. pnpm start запускает приложение без Docker. Для изолированных запусков задайте разные DATA_DIR, PORT, RELEASE и RUN_ID. Не запускайте два процесса с одним каталогом данных.

Лицензия

MIT. Это самостоятельное учебное приложение, код Sentry Workshop не используется.

About

Учебное приложение с ошибками и локальными событиями Sentry SDK для агентов, создающих issue и PR.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages