---
name: tbr-cli
description: >
  Быстрая read-only диагностика «Торги без риска» (tbr — сайт lots.zbrcheck.ru +
  бот @TorgiBezRiska_bot на mac mini) через единый CLI `tbr_cli.py` — вместо
  ad-hoc `python -c`/грепов по SSH. Брать когда: «проверь Торги / лоты», «живы ли
  сервисы tbr», «какие районы в области / работает ли фильтр по районам», «сколько
  лотов в ленте региона», «покрытие district / счётчики лотов-оценок-броней»,
  «жив ли torgi.gov.ru», «грепни лог бота Торгов». НЕ для мутаций (бронь, оплата,
  прогон пайплайна), не для других проектов (недвижка→zemlya-cli, avtero→avtero-tecdoc),
  не для реального e2e бота в Telegram (→ tg-web-e2e против @TorgiBezRiska_bot).
---

# tbr-cli — read-only диагностика «Торги без риска»

CLI-обёртка над существующим кодом/БД/логами tbr (метод «CLI вместо MCP», как
[[zemlya_cli_skill]] / [[avtero_tecdoc_skill]]). Ничего не дублирует и **ничего не мутирует**.

## Где живёт
- Скрипт на mini: `~/Services/tbr/tools/tbr_cli.py`.
- Копия для редеплоя: `tools/tbr_cli.py` рядом с этим SKILL.md.
- Доступ: `ssh -i ~/.ssh/id_ed25519 -p 2222 cebers_mini@100.84.177.25`.

## Запуск (одной строкой по SSH)
```bash
ssh -i ~/.ssh/id_ed25519 -p 2222 cebers_mini@100.84.177.25 \
  'cd ~/Services/tbr && TBR_DB_PATH=/Users/cebers_mini/Services/tbr/data/db/tbr.db \
   PYTHONPATH=/Users/cebers_mini/Services/tbr:/Users/cebers_mini/Services/zemlya-bot \
   /Users/cebers_mini/Services/zemlya-bot/venv/bin/python3 tools/tbr_cli.py <cmd> [args] \
   2>&1 | grep -vE "Asyncio"'
```
Интерпретатор — venv недвижки (`zemlya-bot/venv`); БД tbr отдельная (`tbr/data/db/tbr.db`, Decisions D4/D8).

## Команды
| Команда | Что показывает |
|---|---|
| `health` | Сервисы tbr (launchctl up/idle/down) + API :20152/health + статус torgi.gov.ru |
| `districts <region>` | Фасет муниципальных районов области со счётчиками выгодных лотов ленты (коды: 47=Ленобл, 50=МО, 78=СПб). «Прочие» = адрес без распознанного района |
| `feed <region> [районы csv]` | Total ленты региона + (опц.) сверка фильтра по районам |
| `db` | Счётчики lots (+ % покрытия `district`) / valuations / bookings по статусам |
| `kind` | [TR-MULTISRC-2026] Лоты по источнику/типу торгов (torgi_gov/municipal vs efrsb/bankruptcy) + выгодных по типу + сверка ленты API `?kind=all\|municipal\|bankruptcy` + фасет kinds |
| `logs <фильтр> [-n N]` | Греп по логу бота (`~/Services/shared/logs/tbr-bot.log`) |

## Заметки по интерпретации
- `health`: `local.tbr-pipeline` / `tbr-torgi-monitor` / `tbr-backup` — cron/one-shot, показываются `idle` (норма). `exit=-15` при живом PID = был SIGTERM+рестарт, ок. Тревога — `down` с ненулевым exit у постоянного (`tbr-web-api`/`tbr-bot`/`tbr-frontend`).
- `districts`: считается по ЛЕНТЕ сайта (дисконт в диапазоне, не завершён, не занят) — не по всей БД. Бот жёстче (`confidence=high`), поэтому под-клавиатура районов в боте появляется реже, чем чипы на сайте. [TR-DISTRICT-2026]
- `district` выводится из адреса детерминированно (`tbr/district.py`), покрытие ~93%; остаток → «Прочие» (лот не теряется).
- `db bookings`: `locked` живые = активные локи (5 мин); `paid`/`expired`/`cancelled` — история.

## Редеплой
Править локальную копию `tools/tbr_cli.py`, затем scp на mini:
```bash
scp -i ~/.ssh/id_ed25519 -P 2222 <path>/tools/tbr_cli.py \
  cebers_mini@100.84.177.25:/Users/cebers_mini/Services/tbr/tools/tbr_cli.py
```

## Для e2e бота (мутирующий путь) — НЕ здесь
Реальный прогон @TorgiBezRiska_bot (регион→район→карточки, бронь) — через скилл
**tg-web-e2e** (реальный TG, прокси :2081, сессия `~/.gaechkin/tg_test_session.json`).
Осторожно: кнопка «Забронировать» на карточке лота создаёт реальную бронь — при
случайном тапе отменить (`bookings.status='cancelled'`) и вернуть free_bookings.
