Варианты новых промопрогулок
Найди районы, где из готовых рассказов складывается новая промопрогулка, и предложи пользователю короткий список с обоснованием. Скилл только анализирует: прогулки не создаются, озвучка не заказывается, на production ничего не пишется.
Критерии по умолчанию
Пользователь может поменять любой порог; тогда передай его в analyze.py флагом.
- Точки: не меньше 10 (
--min-stops), не больше 20 (--max-stops).
- Аудио: не меньше 17 минут суммарно (
--min-audio-min). Записи F5 и v3 перед публикацией переозвучиваются в v4 (правило AGENTS.md), поэтому их длительность оценивается по числу слов с темпом v4 ~117 слов в минуту; точная длительность есть только у v4.
- Пересечение: с каждой существующей промопрогулкой общих точек не больше 50 % от точек нового варианта (
--max-overlap). Учитываются все прогулки аккаунта promo-walks, включая открытые только по ссылке: это готовые выпуски очереди. Варианты в выдаче отличаются и друг от друга по тому же правилу. Если пользователь имеет в виду пересечение с объединением всех прогулок, смотри поле unionOverlapShare.
- Соседство: с остановками каждой существующей прогулки рядом, ближе 100 м (
--near-m), не больше 50 % точек варианта (--max-near-overlap), поле nearOverlap и колонка «≤100 м от остановок». Так отсекается та же улица с другими рассказами: скилл сначала берёт точки, которых нет ни в одной прогулке, и без этой проверки выдаёт «0 пересечений» на чужом маршруте.
- Фото: у каждой остановки должно быть превью (правило
AGENTS.md). Колонка «Без фото» и поле needsPhoto показывают, каким точкам его нужно найти; если у точки нет свободного снимка в Commons или на Flickr с CC, её заменяют другой.
- Пешая связность: оценка пути ≤ 4 км (
--max-route-km, прямые × 1,3), соседние остановки не дальше 700 м (--max-hop-m), точки в радиусе 900 м от затравки (--radius-m).
Одна точка — один рассказ: одинаковый MP3 под разными id и записи каталога ближе 40 м считаются одной точкой. Остановки старых автоматических прогулок без placeId сопоставляются по координатам.
Мемориальные доски, могилы и посольства (kind в снимке) по умолчанию не входят в пул: из них не складывается прогулка на слух, а к посольству не подойти. Флаг --include-minor возвращает их.
1. Снимок production (только чтение)
Адрес сервера лежит в игнорируемом .env.ops (VPS); не печатай его и не записывай в репозиторий. Скрипт открывает обе базы с readOnly.
S=<scratchpad>
VPS=$(grep '^VPS=' .env.ops | cut -d= -f2-)
ssh -o ConnectTimeout=15 "$VPS" 'docker exec -i otgolosok-generator-generator-1 node --input-type=module' \
< .claude/skills/promo-walk-candidates/scripts/collect.mjs > $S/snapshot.json
Локальная backend/data/jobs.sqlite устаревает за дни и не содержит новых прогулок: не подменяй ею снимок. ADMIN_TOKEN из локального .env на production не подходит.
2. Автоматический отбор
python3 -I .claude/skills/promo-walk-candidates/scripts/analyze.py $S/snapshot.json $S/out --top 40 \
--extra-walks content/<пакет>/walk-stops-<прогулка>.json
В --extra-walks передай остановки прогулок, которых ещё нет в снимке: незакоммиченные пакеты параллельных сессий (git status --short content/) и уже согласованные варианты. Иначе отбор предложит район, который собирают рядом.
Результат: $S/out/candidates.md (таблица) и candidates.json (точки каждого варианта, модель записи, в каких прогулках точка уже есть, ближайшее метро у начала и конца). Сортировка: больше новых точек, меньше переозвучки, больше аудио. Работает ~30 с.
3. Ручная проверка каждого варианта
Скрипт видит только координаты и длительность. Прочитай точки варианта и отбрось или поправь его, если:
- точки за платным или закрытым входом (территория Кремля, музейные дворы, могилы внутри соборов) — слушатель должен стоять у объекта снаружи;
- нет общей темы или узнаваемой оси (улица, набережная, слобода): название промопрогулки строится как «Остоженка: искусство и частная жизнь»;
- вариант повторяет район опубликованной прогулки по смыслу, хотя точки формально другие (соседние дома той же улицы);
- путь идёт через магистраль без перехода, промзону или закрытую территорию — проверь на карте;
- у точки нет фото и свободный снимок не находится — замени точку, не публикуй её без превью;
- много мелких точек без истории (мемориальные доски, безымянные башни подряд) — такая прогулка скучна на слух.
Замену точки бери из places снимка в том же районе и пересчитай критерии.
4. Отчёт
По-русски, 5–10 лучших вариантов после ручной проверки. Для каждого: рабочее название, старт и финиш (метро), число точек, аудио (сколько измерено v4 и сколько оценено), путь, максимальное пересечение и с какой прогулкой, сколько записей нужно переозвучить в v4 (это платно), сколько точек без фото, 3–4 сильные точки и риски. Отдельно перечисли отброшенные районы и причину.
Переозвучку и создание прогулки предлагай следующим шагом: объём платной партии подтверждает пользователь. Если отчёт нужен надолго, сохрани его в docs/agents/promo-walk-candidates-<дата>.md и добавь строку в docs/agents/README.md; без адресов сервера и токенов.