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

34 lines
4.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.