Files
autoreg-skills-max/skills/ai-provider-autoreg/references/autoreg-script-hardening.md

4.2 KiB
Raw Permalink Blame History

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.