Пример 2: /interview-me — новый поставщик в систему закупок
Реальный кейс: добавление поставщика ResmedDirect в существующую систему авто-закупок CPAP-оборудования. Показывает как /interview-me читает код, задаёт архитекторские вопросы и выдаёт security hard-block.
Контекст
Система уже умеет закупать у DHM и CPAPX через Playwright-чекауты. Нужно добавить ResmedDirect. У нас есть requirements-документ из /project-manager:
requirements-resmed.md:
- FR-01: Авто-закупка у ResmedDirect (CPAP-маски, фильтры, headgear)
- FR-02: Без ручной верификации перед заказом
- FR-03: При out-of-stock — skip + notify в Telegram
- FR-04: Изолировать от аккаунтов DHM/CPAPX
Запуск
/interview-me requirements-resmed.md
Pre-Analysis (молча, без вопросов)
Скилл запускает Explore-агента и читает кодовую базу:
[interview-me] Читаю requirements-resmed.md...
[interview-me] Запускаю Explore agent для анализа кодовой базы...
Что находит:
scripts/dhm_checkout_playwright.py— Playwright чекаут DHM (Shopify)scripts/cpapx_checkout_playwright.py— Playwright чекаут CPAPX (Shopify)scripts/auto_purchase_bot.py— главный цикл, вызывает checkout черезsubprocessscripts/lib/stock_lib.py— схема БД,SUPPLIERSdictscripts/purchase_email_sync.py— парсер писем подтверждений
Паттерн обнаружен: per-supplier checkout script. DHM и CPAPX — отдельные файлы с одинаковой структурой, не generic.
Coverage Map
Coverage Map:
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
▣ Architecture [████████████████░░░░] 80% covered
▣ Integration [████████████░░░░░░░░] 60% covered
▣ Security [████░░░░░░░░░░░░░░░░] 20% — CRITICAL
▣ Error Recovery [██████████░░░░░░░░░░] 50% covered
▣ Data Flow [██████████████░░░░░░] 70% covered
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
Security 20% — hard-block на вопрос перед продолжением.
Интервью
Вопрос 1 — Architecture
Существующий паттерн: DHM и CPAPX — отдельные
*_checkout_playwright.pyфайлы. Для ResmedDirect:
- ○ Форкнуть cpapx_checkout_playwright.py (ближайший Shopify-паттерн)
- ○ Создать generic checkout с конфиг-файлом
- ○ Добавить ResmedDirect как режим в существующий скрипт
- ○ Other: ________
Ответ: Форкнуть cpapx — оно тоже Shopify.
Вопрос 2 — Integration point
Как auto_purchase_bot.py будет вызывать новый скрипт?
- ○ Через subprocess как DHM/CPAPX (уже работает)
- ○ Через import как модуль
- ○ Через очередь задач (новый механизм)
- ○ Other: ________
Ответ: Через subprocess — не надо ничего менять в боте.
⚠️ SECURITY HARD-BLOCK — Вопрос 3
СТОП. Обнаружена security-уязвимость категории «Payment data».
Скрипты DHM/CPAPX получают CVV через subprocess env-переменную
CARD_CVV. ResmedDirect будет использовать ту же карту?Обнаружил: в
auto_purchase_bot.pyCVV передаётся как часть окружения subprocess. Это означает что ResmedDirect-скрипт получит доступ к CVV напрямую.Вопрос: Подтверди политику доступа к CVV для нового поставщика:
- ○ Принимаем: ResmedDirect использует ту же карту и тот же CVV-flow (env-переменная CARD_CVV_
) - ○ Отдельная карта для ResmedDirect — новая env-переменная
- ○ Нужен additional approval step перед передачей CVV новому поставщику
- ○ Other: ________
Ответ: Принимаем — та же карта, тот же flow. Подтверждаем риск.
[interview-me]Записываю в Decisions Log: CVV-доступ для ResmedDirect принят явно, 2026-04-26. Продолжаю.
Вопрос 4 — Out-of-stock handling
FR-03 говорит «skip + notify». Как именно?
- ○ Завершить subprocess с exit code 2, бот смотрит exit code
- ○ Бросить специфичное исключение / вернуть JSON статус в stdout
- ○ Напрямую писать в Telegram из checkout-скрипта
- ○ Other: ________
Ответ: JSON в stdout — бот уже это умеет читать у DHM.
Вопрос 5 — Supplier registry
Новый supplier нужно добавить в
purchase_email_sync.pySUPPLIERS dict для парсинга писем. Какой email-домен у ResmedDirect для подтверждений?
- ○ orders@resmed.com
- ○ noreply@resmed.com
- ○ Other: fantroms+resmed@… (SimpleLogin alias)
- ○ Не знаю — уточнить после регистрации
Ответ: Не знаю пока. Заносим в Open Questions.
Вопрос 6 — Idempotency
Если checkout упал на шаге “Place Order” — что делать при повторном запуске?
- ○ Всегда пробовать заново (риск двойного заказа)
- ○ Проверять БД: если order_id уже есть — пропускать
- ○ Требовать ручного подтверждения при повторе
- ○ Other: ________
Ответ: Проверять БД — как у DHM.
Выходной документ
# ResmedDirect Checkout — Implementation Spec
## Architecture Decision
Форкнуть `cpapx_checkout_playwright.py` → `resmed_checkout_playwright.py`.
**Причина:** ResmedDirect использует Shopify (как CPAPX). Generic-скрипт отклонён —
разные селекторы, разные anti-bot меры, риск сломать CPAPX.
## Decisions Log
| # | Вопрос | Решение | Обоснование |
|---|--------|---------|-------------|
| D-1 | Архитектура | Форкнуть cpapx | Shopify-паттерн совпадает |
| D-2 | Integration | subprocess (как DHM) | Нет изменений в bot |
| D-3 | CVV access | Принят явно, 2026-04-26 | Та же карта/CVV-flow |
| D-4 | OOS handling | JSON stdout | Bot уже умеет |
| D-5 | Idempotency | Проверка в БД | Как у DHM |
## Security Notes
- ⚠️ CVV передаётся через env subprocess — принятый риск (записан явно)
- ResmedDirect получит CARD_CVV_<last4> через env, как DHM/CPAPX
- Изолировать credentials ResmedDirect от DHM/CPAPX (отдельный аккаунт)
## Implementation Tasks
- [ ] Форкнуть cpapx_checkout_playwright.py → resmed_checkout_playwright.py
- [ ] Заменить селекторы под ResmedDirect (тестировать вручную)
- [ ] Добавить в auto_purchase_bot.py case для RESMED
- [ ] Добавить в SUPPLIERS dict в purchase_email_sync.py (после получения email-домена)
- [ ] Dry-run тест на sandbox-заказе
- [ ] Обновить .env.example с RESMED_* переменными
## Open Questions
- OQ-1: Email-домен ResmedDirect для парсинга подтверждений
- OQ-2: Структура страницы checkout ResmedDirect (нужна запись браузера)
## Dependency Graph
auto_purchase_bot.py
└── resmed_checkout_playwright.py (NEW, fork of cpapx)
└── lib/stock_lib.py (SHARED, read-only)
purchase_email_sync.py
└── SUPPLIERS dict (ADD entry for resmed)
Что дальше
После этого документа — опционально superpowers:brainstorming для нетривиальных деталей чекаута:
[Plan Mode]
Посмотри spec-resmed.md. Разберём архитектуру resmed_checkout_playwright.py:
нужно обойти Cloudflare bot protection.
Или сразу к плану:
На основе spec-resmed.md напиши план реализации resmed-checkout.
| ← Пример 1: /project-manager | Пример 3: brainstorming → | ← Примеры |