---
name: investpilot-e2e
description: Полная проверка бота КодИнвест (investpilot, @InvestCodoCeh_bot — советник по Мосбирже на mini) после ЛЮБОЙ доработки. Прогон на mini: pytest (49, без сети), живой смоук MOEX ISS/ЦБ (свечи, IMOEX, дивиденды, ОФЗ, ставка), досье+гейты через analyze_once (--raw и полный LLM-прогон с панелью+челленджером), KB-счётчики и RAG-выдача, процесс под launchd, тайл ops_dashboard, доставка тест-сообщения владельцу. Брать когда: меняли marketdata/analysis/signals/knowledge/bot в investpilot; просят «проверь КодИнвест», «прогони e2e инвест-бота», «работает ли бот после доработки». НЕ для других ботов (avtero→avtero-bot-e2e, VakHunter→vakhunter-e2e) и не для CryptoPilot. ВАЖНО: tg-web-e2e для этого бота бесполезен — бот owner-only и молчит чужим аккаунтам by design.
---

# investpilot-e2e

Проверка «КодИнвест» реальным исполнением. Один вход: `tools/verify.sh` (запускается С МАКБУКА, сам ходит на mini по ssh).

## Шаги

1. **Быстрый прогон** (всегда):
   ```bash
   ~/.claude/skills/investpilot-e2e/tools/verify.sh
   ```
   Он делает: rsync дев→mini (если запущен с `--sync`), pytest на mini, md_smoke
   (ISS/ЦБ живые), analyze_once --raw SBER (досье собирается), KB-счётчики,
   pgrep процесса, тайл ops_dashboard через /tmp/dash_status.py (пересоздаётся
   сам, payload подписи `user|issued`!), tail лога на ERROR.

2. **LLM-прогон** (если меняли signals/prompts/gates/llm): добавь `--llm` —
   гоняет `analyze_once.py SBER GLDRUB_TOM` с живой панелью. Смотри глазами:
   вердикт/гейты осмысленные, «почему/риски» на русском простым языком,
   для NONE-плана причина = формулировка ядра (не «нет голосов»).

3. **Доставка в TG** (если меняли scheduler/outcome/formatting): `--tg` шлёт
   владельцу (1005954706) тест-карточку через Bot API mini-прокси :2081 —
   увидишь её сам в чате с @InvestCodoCeh_bot.

4. **Критерии зелёного**: pytest 100%, смоук без ❌ (Brent None допустим),
   в analyze --raw есть technicals+plan+fundamentals+macro, KB documents>0 и
   theses>0, процесс жив, тайл `"status": "running"`, в логе нет свежих ERROR.

## Грабли

- env для ручных прогонов на mini обязателен (см. tools/verify.sh): source
  omniroute.env + .env, маппинг `INVESTPILOT_NVIDIA_API_KEY=$DELOR_IMAGE_API_KEY`.
- rsync сбрасывает +x на start.sh — verify.sh чинит сам.
- Вечерние петли (digest 19:15, outcome 19:40 MSK) по расписанию — их проверка
  = наличие слот-ключей `scan:<дата>:<час>` в kv и карточек в чате назавтра:
  `sqlite3 data/investpilot.db "SELECT * FROM kv"`.
- SHORT почти всегда режется гейтом единогласия — это фича, не бага.
