autoreg-skills-max: initial public release (restored, redacted, hardened)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
# Autoreg Script Hardening — checklist для прожарки/написания волн-регераторов
|
||||
|
||||
Класс-уровень: применимо к ЛЮБОМУ масс-регеру (почта+OTP+прокси+стейт). Чек-лист багов, которые реально ловятся в бою.
|
||||
|
||||
## 1. State persistence — атомарная запись
|
||||
`save_state()` = запись в `path + ".tmp"` → `os.replace(tmp, path)`. Креш/kill посреди прямой записи = битый JSON = волна не резюмится с самого начала. `os.replace` атомарен на Windows и POSIX.
|
||||
|
||||
## 2. Прокси — dead-TTL, не вечный бан
|
||||
Один сетевой таймаут ≠ мёртвый узел навсегда. Помечай `d["dead_until"] = time.time() + 900`, при выборе скипай только пока `dead_until > now`. Вечный блэклист за длинную волну съедает пул до нуля на транзиентных ошибках.
|
||||
|
||||
## 3. Курсор почтового пула — якорь по IDENTITY, не по индексу
|
||||
Числовой `mail_ptr` ломается, когда список ящиков фильтруется между запусками (used-фильтр, dead-креды) — индексы съезжают → ящики скипаются или берутся повторно. Сохраняй `last_mail` (адрес) и при резюме ищи его индекс в ТЕКУЩЕМ отфильтрованном списке; числовой ptr — только fallback.
|
||||
|
||||
## 4. IMAP OTP — фильтр свежести + body fallback
|
||||
- Парсь заголовок `Date` и отбрасывай письма старше `since_ts - 90` — иначе берётся вчерашний код от прошлой реги (регистрация фейлится молча/с непонятной ошибкой).
|
||||
- Нет `text/plain` части → fallback на `text/html` (некоторые провайдеры шлют только html).
|
||||
- По таймауту возвращай последний найденный кандидат (`fallback or ""`), а не пустоту сразу.
|
||||
|
||||
## 5. Zero-quota health probe ключей
|
||||
Дешёвая проверка живости API-ключа БЕЗ траты квоты: POST chat/completions с несуществующей моделью (`probe/nonexistent-model-xyz`). Интерпретация:
|
||||
- 404 (model not found) = ключ ЖИВ
|
||||
- 403 + "suspended" = аккаунт забанен
|
||||
- 429 / "allowance" = квота выжрана (обычно восстанавливается за 24ч)
|
||||
GET /models при этом часто 200 даже на suspended — не годится. Используй probe в ротационных кронах/шлюзовых синках.
|
||||
|
||||
## 6. Конвейер, не партия
|
||||
Антифрод провайдеров банит волны пачками через часы-сутки после регистрации (массовый `403 suspended` — норма, не баг скрипта). Одиночный ключ = расходник. Правильная архитектура: непрерывная волна + cron-ротация живых в пул/шлюз (probe из п.5 → live в каналы, suspended в disable). Крон 15 мин — бан прилетает с задержкой, 30-минутное окно оставляет трупы в ротации.
|
||||
|
||||
## 7. Fail-stop волны
|
||||
Счётчик подряд-фейлов: при >N фейлов и валящемся успехе — останавливать волну (обычно = сдох captcha-sidecar или весь прокси-пул), иначе тихо сжигается почтовый пул.
|
||||
|
||||
## 8. Шлюз new-api (если ключи идут в ротацию)
|
||||
Канал-на-ключ, мульти-ключ блобом ломает Authorization (`invalid header field value`); `\r` из Windows-файлов ключей = та же ошибка; правки БД channels/abilities требуют `systemctl restart`. Детали — README llmtr-autoreg репо и memory-заметки по new-api.
|
||||
Reference in New Issue
Block a user