luma-apply · v1.0.0 · 2026-09-24 · sha256 c1f22f59f6bafe1e
luma-apply v1.0.0A
Immutable. This exact content never changes and is served at /api/v1/blob/c1f22f59f6bafe1e.
---
name: luma-apply
description: "Подать заявку на ивент в Долине (luma и не только) без ручного кликанья по форме. Триггеры “/luma-apply“, “/apply“, “запиши меня на ивент“, “подай заявку на“, “зарегистрируй на хакатон“, “закрой очередь регистраций“, “register me for“"
version: 1.0.0
---
# /luma-apply — заявка на ивент без ручного кликанья
> 🧒 Отчёт Антону закончи блоком «Простыми словами».
## Зачем существует
26.08.2026 регистрация на 9 ивентов делалась целиком руками: открыть страницу, прочитать
дерево, угадать поля, кликать селекты по координатам, сверить глазами, сабмит, проверить.
Итог: три зависших рендерера и одна форма, заполненная дважды. При этом **дорогая половина
работы — решить, ЧТО писать — браузера не требует вовсе**: luma отдаёт структуру формы
публично, без авторизации. Скилл переносит эту половину в 0-токенный скрипт.
## Аккаунт
Логин luma — `dzyatkovskiy.a2@gmail.com` (аккаунт **a2**), вход через **Passkey** либо через
**Google тем же адресом**. Пароль символами не набираем — подаёт Chrome/Passkey сам
(память `one-chrome-account-all-machines`). Профиль ответов: `cv-events/apply_profile.json`.
## Шаг 1 — план ответов (0 токенов, 0 браузера)
```
python [путь владельца] <слаг-или-URL>
```
Возвращает: `plan` (готовые ответы по id вопроса), `unknown` (необязательные без ответа),
`missing_required` (обязательные без ответа), `price_gate`, `ready`.
Три исхода:
- **`ready: true`** → идём в шаг 2, думать не надо.
- **`missing_required` не пуст** → на эти вопросы отвечаю Я, ОДИН раз, и ответ уезжает в
`apply_profile.json` навсегда (в `answers` + правило в `LABEL_RULES`, если формулировка
повторяющаяся). Следующее событие с тем же вопросом закроется автоматически.
- **`price_gate: true`** → ⛔ СТОП. Платный билет = Tier-2. Не покупаем, не жмём Get Ticket,
а спрашиваем Антона: что за событие, сколько стоит, почему стоит денег.
## Шаг 2 — сабмит в браузере
Chrome-MCP (сессия a2 живая). Порядок жёсткий:
1. `navigate` на `luma.com/<слаг>` → кнопка регистрации (`Register` / `Request to Join` /
`One-Click RSVP` — последняя закрывает всё сразу, форм нет).
2. `read_page filter=interactive` → сопоставить `ref_*` с планом по порядку вопросов.
3. `form_input` для текстовых, клик по варианту для селектов.
⚠️ Селект luma нередко встаёт НЕ на тот пункт с первого клика — **перечитать значение после
каждого селекта** и переставить, если промазал (ловили дважды 26.08).
4. **§3.6 — перед Send перечитать, что реально в поле.** Luma подставляет старый профиль:
26.08 в заявку в Google DeepMind чуть не уехал чужой GitHub `TonyStef` вместо `tonydzi`.
5. Сабмит → скриншот подтверждения.
## Шаг 3 — статус читаем во ВТОРОЙ вкладке
Класс поломки (2 датированных случая, журнал 26.08): после сабмита рендерер luma виснет,
`captureScreenshot` и `read_page` отваливаются по таймауту. **«Завис» не значит «отправлено»**:
один раз заявка ушла, другой раз форма сбросилась и потребовала полного перезаполнения.
Поэтому: `tabs_create` → тот же URL → прочитать статус там. Видим `Pending Approval`,
`You're In` или снова форму — только это и есть правда.
## Шаг 4 — журнал (без него работа не сделана)
Строка в `cv-events/luma_registered.jsonl`:
`{"ts","slug","outcome","note"}`, где outcome — `youre-in` · `pending-approval` ·
`closed` (регистрация закрыта хостом) · `dead-link` · `paid-needs-anton` · `form-manual` ·
`skip-geo`. Без строки сторож `lane_debt()` будет считать событие незакрытым и позовёт снова.
## Границы
- ⛔ **Деньги — никогда.** Любая цена → стоп и аск Антону (Tier-2).
- ⛔ **Чекбоксы:** ставим только согласие на передачу контактов организаторам и спонсорам
(мы для того и идём). Платёж, чужая рассылка, отказ от прав → решает человек.
- ⛔ **Не выдумывать ответы.** Нет в профиле — спросить или оставить пустым, а не сочинить.
- ✅ Событие оффлайн в Bay Area — регистрируем свободно: Антон в Долине с сентября (ДА+++ 26.08).
- ✅ Remote — регистрируем всегда, ответ Антона про переезд для них не нужен.
## Соседи
`cv_mine.py` (еженедельный майнер календаря, готовит очередь) · `luma_apply.py` (движок) ·
`nonluma_fetch.py` (люди с не-luma площадок) · книга-реестр альфы в Sheets.
Канон: `cv-events-lane` (память), `concept-luma-events` (волт),
`reglament-lid-v-crm-nesyot-ves-kontekst-znakomstva` (провенанс лида).