Skip to content

research: идеи из референсов (s3rgeym/fikstt2/Steev193/tgeruzov/konard) — таблица для бэклога #84

Closed

Description

@axisrow

Исследование 5 референсов hh.ru-автоматизации (субагент, 2026-07-28). Цель — идеи для hhru_bot. Метод: WebFetch README + ключевых исходников. Лицензии: s3rgeym Non-Commercial (паттерны берём, код нет), fikstt2/Steev193/tgeruzov/konard — MIT/Unlicense.

Главный вывод: наш проект ВПЕРЕДИ референсов в нескольких местах — LLMScoringProvider с circuit breaker (#74, нет ни у кого), fail-closed state machine для reply-employers в cli-spec (лучше простого retry s3rgeym), launchd/cron schedule #18 (нативнее бесконечного цикла fikstt2), account-scope responses #12. Но есть зазоры.

Сравнительная таблица

Обновлено 2026-07-31. Источник статусов — пере-аудит по исходному коду
(docs/research/issue-84-references.md, PR #114) и текущее состояние src/hhru_bot/.
Первая версия таблицы делалась по README через WebFetch и в ряде мест была неверной.

Колонки отсортированы по числу фич, общих с нашим проектом (в скобках — сколько).
Строки сгруппированы: сначала то, что у нас ГОТОВО, затем В РАБОТЕ, НЕТ и ОТКЛОНЕНО.

Фича s3rgeym (16) fikstt2 (8) Steev193 (7) konard (5) tgeruzov (4) Наш проект
Дедупликация откликов да да да да да ГОТОВО (SQLite, #3)
Персистентная сессия (storage_state) нет да да да да ГОТОВО (#10)
Скоринг/ранжирование вакансий да (--ai-filter) да да (3 score) нет нет ГОТОВО (#15/#74, circuit breaker)
AI-генерация сопроводительных да да да нет нет ГОТОВО (#17, fallback на шаблон)
SQLite-история откликов да нет нет да нет ГОТОВО (#3)
Троттлинг/дневные лимиты да да нет нет нет ГОТОВО (throttle.py)
Стоп-слова по заголовку да да нет нет нет ГОТОВО (exclude_keywords); нет дефолтов
Таблица skipped + clear-skipped да (--reason) нет нет да нет ГОТОВО (#87)
Мониторинг ответов HR (responses) да да нет нет нет ГОТОВО (#12, account-scope)
Воронка/статистика откликов да нет да нет нет ГОТОВО (#11/#13)
Расписание/автопилот да (docker cron) да (loop 30м) нет нет нет ГОТОВО (#18, launchd/cron)
Детект тест-вопросов формы да нет нет да нет ГОТОВО (#95, detect-only)
Вынесенные селекторы + fallback нет нет да нет да ГОТОВО (#7, selector_groups)
Healthcheck селекторов нет нет нет нет да ГОТОВО (#88)
Few-shot стиль писем нет нет да нет нет ГОТОВО (#96)
Рандомизация шаблонов {a b c} да (rand_text) нет нет нет
Поднятие резюме (bump) да нет нет нет нет ГОТОВО (кулдаун 4ч)
SQL-доступ к БД из CLI да нет нет нет нет ГОТОВО (#45 query)
Хвост лога (log -f) да нет нет нет нет ГОТОВО (#58)
whoami / список резюме да нет нет нет нет ГОТОВО (#56/#57)
Probe-дамп формы без отправки нет нет нет нет нет ГОТОВО (#8) - НИ У КОГО НЕТ
Рыночные агрегаты по ЗП нет нет нет нет нет ГОТОВО (#66/#93) - НИ У КОГО НЕТ
reply-employers (ответы HR) да да (TG) нет нет нет В РАБОТЕ (#55 -> #107-#112)
LLM-фильтрация (бинарный отсев) да да да нет нет НЕТ (скоринг есть, порога нет)
Детект капчи -> стоп прогона нет нет нет нет да НЕТ - P1 идея #114
Codegen селекторов нет нет да нет нет НЕТ - P3 идея #114
Учёт правок писем пользователем нет нет да нет нет НЕТ - P3 идея #114
Авто-ответы на тест-вопросы да (LLM) нет нет да (Q&A-файл) нет НЕТ - #97 под вопросом
clear-negotiations (отзыв) да нет нет нет нет НЕТ (#111, ждёт #107)
clone-resume да нет нет нет нет НЕТ (спроектирована)
REST API-клиент (мимикрия) да нет нет нет нет ОТКЛОНЕНО (cli-spec)
Multi-account (--profile) да нет нет нет нет ОТКЛОНЕНО (один аккаунт)
Telegram-бот нет да да нет нет ОТКЛОНЕНО (CLI-only)
Web-дашборд да (ui) нет да (:3849) нет нет ОТКЛОНЕНО (CLI-only)
Bezier-траектории курсора нет нет нет да да ОТКЛОНЕНО (оверинжиниринг)
Отправка email напрямую да (SMTP) нет нет нет нет ОТКЛОНЕНО (только hh.ru)
AI-капча Vision нет нет нет нет нет ОТКЛОНЕНО (решаем вручную)

Что показывает сортировка. s3rgeym перекрывается с нами по 16 фичам из 25 своих —
это ближайший функциональный аналог и главный источник паттернов (при этом его код брать
нельзя, Non-Commercial). Дальше идут fikstt2 (8) и Steev193 (7) — у них ценны точечные
решения (персистентная сессия, few-shot, codegen), а не архитектура целиком. konard (5)
и tgeruzov (4) перекрываются меньше всех, но именно у них лежат две незакрытые идеи:
Q&A-файл и детект капчи.

Две фичи есть только у нас и ни у одного из пяти референсов: probe-дамп формы без
отправки (#8) и рыночные агрегаты по зарплатам (#66/#93).

Рекомендации в бэклог

HIGH (простые, переиспользуют существующее)

  1. Бинарный AI-отсев по порогу — ai_reject_threshold в scoring-конфиг; в filter_candidates карточки с LLMScoringProvider.score() < threshold → [skip] low LLM score. Бесплатно (уже посчитанный score), эквивалент s3rgeym --ai-filter без 2-го LLM-вызова.
  2. Рандомизация шаблонов писём {a|b|c} — 10-20 строк в apply/letter.py._format_template(), random.choice. Анти-фрод + AI-детекторы писём. Паттерн s3rgeym rand_text().
  3. Таблица skipped + clear-skipped — CREATE TABLE IF NOT EXISTS в SCHEMA-блоке (Рефакторинг: убрать migrations (ПРИЧИНА — оверинжиниринг для такого простого проекта) #50, без миграций), partial-UNIQUE (resume_id, vacancy_id, reason). Тройная польза: cli-spec clear-skipped, stats по причинам отсева, кэш LLM-отсева (экономия как s3rgeym _is_vacancy_already_skipped).

MEDIUM

  1. reply-employers — cli-spec §3.3 (claim→in_flight→sent с reconcile). Подсмотреть у s3rgeym: viewed_by_opponent, AI с историей чата.
  2. Few-shot стиль писём — cover_letter_examples в AIProfile, few-shot в промпт.
  3. probe --healthcheck — проверка N селекторов из selector_groups без отклика, рапорт устаревших (CLAUDE.md «первый подозреваемый — устаревший селектор»).
  4. Детект тест-вопросов формы (без авто-ответа) — probe/apply-step видит task_* → [INFO] пропущено: тест-вопросы + skipped reason=has_questions.

LOW / оверинжиниринг (НЕ наш масштаб)

  1. AI-Vision капча (manual правильнее), 9. Multi-account (нарушает принцип), 10. REST API-мимикрия (cli-spec запретил), 11. Telegram/web-дашборд (CLI-only), 12. Bézier (оверинжиниринг), 13. --send-email (только hh.ru), 14. Бесконечный цикл (schedule лучше).

Принципы (не нарушать)

  • CLI-only, read-only для hh.ru, один аккаунт, ручной запуск, троттлинг/лимиты, cookie-сессия (не API-мимикрия).
  • «Из говна и палок», переиспользовать существующее, без оверинжиниринга.

Исследование. Sub-issues создаются отдельно по мерджу текущей волны (#80 timeout, #81 wiring).

Activity

  1. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Матрица «фича × референс» (да/нет)

    Легенда: + = есть, – = нет, ~ = частично.

    Фича s3rgeym fikstt2 Steev193 tgeruzov konard hhru_bot
    LLM-фильтрация (бинарный отсев) + + + – – ~
    reply-employers (авто-ответы HR) + + – – – –
    clone-resume + – – – – –
    clear-negotiations (отзыв откликов) + – – – – –
    clear-skipped + – – – – ~
    Авто-ответы на тест-вопросы формы + – – – + –
    AI-капча Vision – – – – – –
    Multi-account (--profile) + – – – – –
    REST API-клиент (мимикрия Android) + – – – – –
    Рандомизация шаблонов {opt1|opt2|opt3} + – – – – –
    Few-shot стиль писём – – + – – –
    Healthcheck селекторов – – – + – ~
    regex по полной description + – – – – –
    --send-email напрямую (SMTP) + – – – – –
    Бесконечный цикл/автопилот + + – – – +
    Web-дашборд + – + – – –
    Telegram-бот – + + – – –
    Bézier-траектории курсора – – – + + ~
    Circuit breaker на LLM – – – – – +
    AI-письма под вакансию + – + – + +
    LLM-скоринг вакансий (0-100) – – + – – +
    Дедупликация по истории + – – – + +
    Троттлинг/дневные лимиты + ~ + – + +
    Multi-resume (config) ~ – + – – +
    Schedule (launchd/cron) – – – – – +
    Мониторинг ответов HR (responses) + + – – – +
    Воронка откликов (funnel) – – – – – +
    Probe (дамп формы без отклика) – – – – – +
    Рынок-анализ по доходу – – – – – +
    CLI-only (без TG/web) – – ~ – – +

    Зазоры hhru_bot (где у референсов есть, у нас нет/частично)

    • LLM-фильтрация (бинарный отсев) ~ — есть скоринг, но не отсекает low → HIGH: ai_reject_threshold.
    • clear-skipped ~ — лог [skip], не пишет в БД → HIGH: таблица skipped.
    • reply-employers – — спроектирована в cli-spec, нереализована → MEDIUM.
    • Healthcheck селекторов ~ — probe близок → MEDIUM: probe --healthcheck.
    • Рандомизация шаблонов {a|b|c} – → HIGH (10-20 строк).
    • Bézier-курсор ~ (тrottle.wait) → LOW/оверинжиниринг.

    Где hhru_bot впереди (unique / лучше референсов)

    • Circuit breaker на LLM — единственный.
    • LLM-скоринг вакансий 0-100 + tier-буст работодателя — только Steev193 имеет схожее, но без tier/circuit-breaker.
    • Воронка откликов (funnel) — ни у кого.
    • Probe (дамп формы) — ни у кого.
    • Рынок-анализ по доходу — ни у кого.
    • Schedule (launchd/cron) — нативнее бесконечного цикла s3rgeym/fikstt2.
    • Account-scope responses с partial-UNIQUE — аккуратнее хранение.
    • Fail-closed state machine для reply в cli-spec — лучше простого retry s3rgeym.
  2. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Матрица «фича × референс» (да/нет)

    Легенда: ✅ есть, ❌ нет, ⚠️ частично.

    Фича s3rgeym fikstt2 Steev193 tgeruzov konard hhru_bot
    LLM-фильтрация (бинарный отсев) ✅ ✅ ✅ ❌ ❌ ⚠️
    reply-employers (авто-ответы HR) ✅ ✅ ❌ ❌ ❌ ❌
    clone-resume ✅ ❌ ❌ ❌ ❌ ❌
    clear-negotiations (отзыв откликов) ✅ ❌ ❌ ❌ ❌ ❌
    clear-skipped ✅ ❌ ❌ ❌ ❌ ⚠️
    Авто-ответы на тест-вопросы формы ✅ ❌ ❌ ❌ ✅ ❌
    AI-капча Vision ❌ ❌ ❌ ❌ ❌ ❌
    Multi-account (--profile) ✅ ❌ ❌ ❌ ❌ ❌
    REST API-клиент (мимикрия Android) ✅ ❌ ❌ ❌ ❌ ❌
    Рандомизация шаблонов {opt1|opt2|opt3} ✅ ❌ ❌ ❌ ❌ ❌
    Few-shot стиль писём ❌ ❌ ✅ ❌ ❌ ❌
    Healthcheck селекторов ❌ ❌ ❌ ✅ ❌ ⚠️
    regex по полной description ✅ ❌ ❌ ❌ ❌ ❌
    --send-email напрямую (SMTP) ✅ ❌ ❌ ❌ ❌ ❌
    Бесконечный цикл/автопилот ✅ ✅ ❌ ❌ ❌ ✅
    Web-дашборд ✅ ❌ ✅ ❌ ❌ ❌
    Telegram-бот ❌ ✅ ✅ ❌ ❌ ❌
    Bézier-траектории курсора ❌ ❌ ❌ ✅ ✅ ⚠️
    Circuit breaker на LLM ❌ ❌ ❌ ❌ ❌ ✅
    AI-письма под вакансию ✅ ❌ ✅ ❌ ✅ ✅
    LLM-скоринг вакансий (0-100) ❌ ❌ ✅ ❌ ❌ ✅
    Дедупликация по истории ✅ ❌ ❌ ❌ ✅ ✅
    Троттлинг/дневные лимиты ✅ ⚠️ ✅ ❌ ✅ ✅
    Multi-resume (config) ⚠️ ❌ ✅ ❌ ❌ ✅
    Schedule (launchd/cron) ❌ ❌ ❌ ❌ ❌ ✅
    Мониторинг ответов HR (responses) ✅ ✅ ❌ ❌ ❌ ✅
    Воронка откликов (funnel) ❌ ❌ ❌ ❌ ❌ ✅
    Probe (дамп формы без отклика) ❌ ❌ ❌ ❌ ❌ ✅
    Рынок-анализ по доходу ❌ ❌ ❌ ❌ ❌ ✅
    CLI-only (без TG/web) ❌ ❌ ⚠️ ❌ ❌ ✅

    Зазоры hhru_bot (где у референсов есть, у нас нет/частично)

    • LLM-фильтрация (бинарный отсев) ⚠️ — есть скоринг, но не отсекает low → HIGH: ai_reject_threshold.
    • clear-skipped ⚠️ — лог [skip], не пишет в БД → HIGH: таблица skipped.
    • reply-employers ❌ — спроектирована в cli-spec, нереализована → MEDIUM.
    • Healthcheck селекторов ⚠️ — probe близок → MEDIUM: probe --healthcheck.
    • Рандомизация шаблонов {a|b|c} ❌ → HIGH (10-20 строк).
    • Bézier-курсор ⚠️ (throttle.wait) → LOW/оверинжиниринг.

    Где hhru_bot впереди (unique / лучше референсов)

    • Circuit breaker на LLM — единственный.
    • LLM-скоринг вакансий 0-100 + tier-буст работодателя — только Steev193 имеет схожее, но без tier/circuit-breaker.
    • Воронка откликов (funnel) — ни у кого.
    • Probe (дамп формы) — ни у кого.
    • Рынок-анализ по доходу — ни у кого.
    • Schedule (launchd/cron) — нативнее бесконечного цикла s3rgeym/fikstt2.
    • Account-scope responses с partial-UNIQUE — аккуратнее хранение.
    • Fail-closed state machine для reply в cli-spec — лучше простого retry s3rgeym.
  3. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Связано: README.md — Roadmap и бэклог (раздел со ссылками на этот research + эпик #65 + milestones M1–M7). Milestone: Этап 1 (рынок/развитие).

    Актуализация (2026-07-28): реализовано после research —

    Полная обновлённая матрица + приоритезация фич (3+/5 → 2/5 → 1/5 → 0) — в комментариях ниже.

  4. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Уточнение HIGH-идеи №1 (бинарный отсев) — отзыв пользователя

    Оригинальная рекомендация «бинарный AI-отсев по порогу score» — плохая: это платный LLM-вызов ради решения, которое дешёвая эвристика принимает бесплатно. LLM-отсев = трата токенов.

    Правильный подход (решение пользователя): бинарный отсев делает ЭВРИСТИКА (tier/trusted/rating/invitation) ДО LLM-скоринга. LLM-скоринг (#74/#81) остаётся, но работает только по релевантным → меньше вызовов, дешевле, быстрее.

    Архитектура

    ```
    сбор карточек
    → [эвристический фильтр: tier/trusted/rating/приглашение] ← отсекает мусор БЕСПЛАТНО
    → [LLM-скоринг оставшихся] ← LLM только по релевантным
    → apply
    ```

    Сигналы для эвристического отсева (всё уже есть в проекте)

    Решение эвристики «стоит ли откликаться» (чистая функция, 0 токенов)

    • ❌ Отсечь: tier=unknown И нет rating И нет отзывов И работодатель не взаимодействовал → «слепой отклик в пустоту», низкая конверсия.
    • ✅ Оставить: известная компания, ИЛИ trusted, ИЛИ rating≥порог, ИЛИ раньше приглашал/смотрел.

    Отсечённые → таблица `skipped` (идея №3) с reason `low_employer_tier`/`no_interaction` → кэш, повторный search не дёргает LLM.

    Итог: HIGH-идея №1 переформулирована с «LLM-бинарный отсев» на «эвристический pre-LLM фильтр по tier/trusted/rating/invitation». LLM-скоринг (#74/#81) не трогаем — он работает ПОСЛЕ фильтра, по меньшему числу релевантных.

  5. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Матрица «фича × референс» (да/нет) — обновлено 2026-07-28

    Легенда: ✅ есть, ❌ нет, ⚠️ частично. Статус hhru_bot актуализирован после волны реализаций (#74/#81/#85/#88 вмержены; #86/#87 — PR CLEAN, ждут мерджа).

    Фича s3rgeym fikstt2 Steev193 tgeruzov konard hhru_bot
    LLM-фильтрация (бинарный отсев) ✅ ✅ ✅ ❌ ❌ ✅ (#85 pre-LLM эвристика)
    reply-employers (авто-ответы HR) ✅ ✅ ❌ ❌ ❌ ❌ (cli-spec, blocked #44)
    clone-resume ✅ ❌ ❌ ❌ ❌ ❌ (cli-spec)
    clear-negotiations (отзыв откликов) ✅ ❌ ❌ ❌ ❌ ❌ (cli-spec)
    clear-skipped ✅ ❌ ❌ ❌ ❌ ⚠️→✅ (#87 PR #92 CLEAN, ждёт мерджа)
    Авто-ответы на тест-вопросы формы ✅ ❌ ❌ ❌ ✅ ❌ (detect-only идея)
    AI-капча Vision ❌ ❌ ❌ ❌ ❌ ❌ (manual, правильно)
    Multi-account (--profile) ✅ ❌ ❌ ❌ ❌ ❌ (принцип: один аккаунт)
    REST API-клиент (мимикрия Android) ✅ ❌ ❌ ❌ ❌ ❌ (cli-spec запретил)
    Рандомизация шаблонов {opt1|opt2|opt3} ✅ ❌ ❌ ❌ ❌ ⚠️→✅ (#86 PR #89 CLEAN, ждёт мерджа)
    Few-shot стиль писём ❌ ❌ ✅ ❌ ❌ ❌ (MEDIUM-идея)
    Healthcheck селекторов ❌ ❌ ❌ ✅ ❌ ✅ (#88/#91 вмержен)
    regex по полной description ✅ ❌ ❌ ❌ ❌ ❌ (LOW)
    --send-email напрямую (SMTP) ✅ ❌ ❌ ❌ ❌ ❌ (принцип: только hh.ru)
    Бесконечный цикл/автопилот ✅ ✅ ❌ ❌ ❌ ✅ (schedule #18)
    Web-дашборд ✅ ❌ ✅ ❌ ❌ ❌ (CLI-only)
    Telegram-бот ❌ ✅ ✅ ❌ ❌ ❌ (stdout)
    Bézier-траектории курсора ❌ ❌ ❌ ✅ ✅ ⚠️ (throttle.wait)
    Circuit breaker на LLM ❌ ❌ ❌ ❌ ❌ ✅ (#74)
    AI-письма под вакансию ✅ ❌ ✅ ❌ ✅ ✅ (#17)
    LLM-скоринг вакансий (0-100) ❌ ❌ ✅ ❌ ❌ ✅ (#74, активирован #81)
    Дедупликация по истории ✅ ❌ ❌ ❌ ✅ ✅
    Троттлинг/дневные лимиты ✅ ⚠️ ✅ ❌ ✅ ✅
    Multi-resume (config) ⚠️ ❌ ✅ ❌ ❌ ✅
    Schedule (launchd/cron) ❌ ❌ ❌ ❌ ❌ ✅ (#18)
    Мониторинг ответов HR (responses) ✅ ✅ ❌ ❌ ❌ ✅ (#12)
    Воронка откликов (funnel) ❌ ❌ ❌ ❌ ❌ ✅ (#13)
    Probe (дамп формы без отклика) ❌ ❌ ❌ ❌ ❌ ✅ (#8)
    Рынок-анализ по доходу ❌ ❌ ❌ ❌ ❌ ✅ (#66, polish #93)
    CLI-only (без TG/web) ❌ ❌ ⚠️ ❌ ❌ ✅

    Зазоры hhru_bot — актуально после волны реализаций

    Уточнение HIGH-идеи №1 (бинарный отсев) — отзыв пользователя

    Оригинал «бинарный AI-отсев по порогу LLM-score» — плохая (трата токенов). Реализовано как эвристический pre-LLM фильтр #85 (tier/trusted/rating/invitation, 0 токенов) — отсекает мусор ДО LLM-скоринга. LLM-скоринг (#74/#81) работает только по релевантным. См. комментарий-уточнение.

    Где hhru_bot впереди (unique / лучше референсов) — без изменений

    • Circuit breaker на LLM — единственный.
    • LLM-скоринг 0-100 + tier-буст работодателя — только Steev193 схож, но без tier/circuit-breaker.
    • Воронка откликов (funnel), Probe (дамп формы), Рынок-анализ по доходу — ни у кого.
    • Schedule (launchd/cron) — нативнее бесконечного цикла.
    • Account-scope responses с partial-UNIQUE — аккуратнее хранение.
    • Fail-closed state machine для reply в cli-spec — лучше простого retry s3rgeym.
    • Pre-LLM эвристический фильтр feat(scoring): эвристический pre-LLM фильтр по tier/trusted/rating/invitation (отсев до LLM, 0 токенов) #85 — отсев до LLM (0 токенов), лучше LLM-отсева s3rgeym/Steev193.

    Оставшиеся бэклог-идеи (после волны)

  6. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Приоритезация фич по «популярности у конкурентов» (из 5)

    Принцип: фичи, которые есть у 3+ из 5 конкурентов = индустриальный стандарт (проверены рынком) → высший приоритет. Потом 2/5, потом 1/5, потом 0 (только у нас/ни у кого). ✅=1, ⚠️=0.5. Учитываются ТОЛЬКО фичи, которых у нас НЕТ или частично (зазоры) — реализованное (#85/#88) исключено из приоритета (уже есть).

    ТИР 1 — есть у 3+ из 5 конкурентов (стандарт рынка, высший приоритет)

    Фича Доля у конкурентов У нас Рекомендация
    AI-письма под вакансию 4/5 (s3rgeym, Steev193, konard + fikstt2 ~) ✅ уже (#17) — (сделано)
    Дедупликация по истории 3/5 (s3rgeym, konard, +) ✅ уже — (сделано)
    Троттлинг/дневные лимиты ~4/5 ✅ уже — (сделано)

    → В ТИР-1 почти всё у нас уже есть. Реализовать новых — нет.

    ТИР 2 — есть у 2 из 5 конкурентов

    Фича У кого (2) У нас Рекомендация
    reply-employers (авто-ответы HR) s3rgeym + fikstt2 ❌ (cli-spec, blocked #44) HIGH после #44 — спроектирована, ждет реальные ответы
    Бесконечный цикл/автопилот s3rgeym + fikstt2 ✅ (schedule #18) — (сделано лучше)
    Мониторинг ответов HR s3rgeym + fikstt2 ✅ (#12) — (сделано)
    Telegram-бот fikstt2 + Steev193 ❌ (CLI-only) LOW (нарушает принцип)

    → Новый в ТИР-2: reply-employers (после разблокировки #44).

    ТИР 3 — есть у 1 из 5 конкурентов

    Фича У кого (1) У нас Рекомендация
    clone-resume s3rgeym ❌ (cli-spec) MEDIUM (только при упоре в лимит)
    clear-negotiations s3rgeym ❌ (cli-spec, безвопаснее) LOW (деструктивная, редкая)
    Авто-ответы на тест-вопросы формы konard (+s3rgeym LLM) ❌ MEDIUM (detect-only) — probe видит вопросы → [skip]
    REST API-клиент (мимикрия Android) s3rgeym ❌ (cli-spec запретил) LOW (не наш путь)
    Рандомизация шаблонов {a|b|c} s3rgeym ⚠️→✅ (#86/#89 CLEAN) — (ждёт мердж)
    regex по полной description s3rgeym ❌ LOW (доп. HTTP)
    --send-email (SMTP) s3rgeym ❌ LOW (нарушает принцип)
    Web-дашборд s3rgeym + Steev193 ❌ (CLI-only) LOW (нарушает принцип)
    Few-shot стиль писём Steev193 ❌ MEDIUM (AI-направление)
    Healthcheck селекторов tgeruzov ✅ (#88/#91) — (сделано)
    Bézier-курсор tgeruzov + konard ⚠️ LOW (оверинжиниринг)
    LLM-скоринг 0-100 Steev193 ✅ (#74) — (сделано лучше)
    Multi-resume (config) Steev193 ✅ — (сделано)
    Schedule — (у нас unique) ✅ (#18) —

    ТИР 4 — ни у кого из конкурентов (unique hhru_bot, не приоритет для «добавить»)

    Circuit breaker (#74), воронка (#13), probe (#8), рынок-анализ по доходу (#66), pre-LLM эвристический фильтр (#85), fail-closed state machine для reply (cli-spec). Это наши преимущества — держать, не «добавлять».

    ИТОГОВЫЙ ПРИОРИТЕТНЫЙ БЭКЛОГ (что делать дальше)

    P1 (после текущей волны #89/#92/#93):

    1. reply-employers (ТИР-2, 2/5) — спроектирована, разблокируется после Верифицировать селекторы /applicant/negotiations + точная дедупликация/empty-state (follow-up к #12, Этап 2) #44 (реальные ответы HR). Высший приоритет среди нереализованных.

    P2:
    2. Детект тест-вопросов формы (detect-only) (ТИР-3, ~1.5/5) — probe/apply-step видит task_* → [skip] has_questions + skipped (#87). Безопаснее авто-ответа.
    3. Few-shot стиль писём (ТИР-3, 1/5) — cover_letter_examples в AIProfile, few-shot в промпт (#17 расширение).
    4. clone-resume (ТИР-3, 1/5) — только если упрёмся в дневной лимит откликов.

    P3 (низкий/оверинжиниринг — НЕ делать):

    • clear-negotiations (деструктивная, редкая), regex по description, REST API-мимикрия, Telegram/web, Bézier, --send-email, AI-Vision капча, multi-account.

    Принцип

    Приоритезация матрицы #84. Sub-issues создаются после текущей волны.

  7. axisrow commented on Jul 28, 2026

    @axisrow
    OwnerAuthor

    Все фичи, отсортированные по популярности у конкурентов (из 5)

    Принцип: 3+/5 (стандарт рынка) → 2/5 → 1/5 → 0/5. ✅=1, ⚠️=0.5. Внутри тира — по убыванию доли. Включает ВСЕ фичи (в т.ч. реализованные у нас), чтобы видеть полную картину.

    ТИР 1 — есть у 3+ из 5 конкурентов (стандарт рынка)

    Фича Доля Кто У нас
    Троттлинг/дневные лимиты ~4/5 s3rgeym⚠️, Steev193, konard, fikstt2⚠️ ✅
    AI-письма под вакансию 3/5 s3rgeym, Steev193, konard ✅ #17
    Дедупликация по истории 3/5 s3rgeym, konard, (others частично) ✅
    Бесконечный цикл/автопилот 2.5/5 s3rgeym, fikstt2, (schedule-аналоги) ✅ #18 schedule

    ТИР 2 — есть у 2 из 5 конкурентов

    Фича Доля Кто У нас
    reply-employers (авто-ответы HR) 2/5 s3rgeym, fikstt2 ❌ cli-spec, blocked #44
    Мониторинг ответов HR (responses) 2/5 s3rgeym, fikstt2 ✅ #12
    Telegram-бот 2/5 fikstt2, Steev193 ❌ (CLI-only, не наш путь)

    ТИР 3 — есть у 1 из 5 конкурентов

    Фича Доля Кто У нас
    clone-resume 1/5 s3rgeym ❌ cli-spec
    clear-negotiations (отзыв откликов) 1/5 s3rgeym ❌ cli-spec (безопаснее)
    Авто-ответы на тест-вопросы формы 1.5/5 konard, s3rgeym(LLM) ❌ (detect-only идея)
    REST API-клиент (мимикрия Android) 1/5 s3rgeym ❌ (cli-spec запретил)
    Рандомизация шаблонов {a|b|c} 1/5 s3rgeym ⚠️→✅ #86/#89 (ждёт мердж)
    clear-skipped 1/5 s3rgeym ⚠️→✅ #87/#92 (ждёт мердж)
    regex по полной description 1/5 s3rgeym ❌ (LOW, доп. HTTP)
    --send-email напрямую (SMTP) 1/5 s3rgeym ❌ (нарушает принцип)
    Few-shot стиль писём 1/5 Steev193 ❌ (MEDIUM)
    Healthcheck селекторов 1/5 tgeruzov ✅ #88/#91
    Bézier-траектории курсора 2/5 tgeruzov, konard ⚠️ (LOW/оверинжиниринг)
    LLM-скоринг вакансий (0-100) 1/5 Steev193 ✅ #74 (лучше — tier+circuit)
    Multi-resume (config) 1.5/5 Steev193, s3rgeym⚠️ ✅
    LLM-фильтрация (бинарный отсев) 3/5 s3rgeym, fikstt2, Steev193 ✅ #85 (pre-LLM эвристика, 0 токенов)
    Web-дашборд 2/5 s3rgeym, Steev193 ❌ (CLI-only)

    ТИР 4 — 0 у конкурентов (unique hhru_bot)

    Фича У нас
    Circuit breaker на LLM ✅ #74
    Воронка откликов (funnel) ✅ #13
    Probe (дамп формы без отклика) ✅ #8
    Рынок-анализ по доходу ✅ #66 (polish #93)
    Schedule (launchd/cron) ✅ #18
    Fail-closed state machine для reply cli-spec (лучше s3rgeym retry)
    Pre-LLM эвристический фильтр ✅ #85
    AI-капча Vision ❌ (manual правильно — и у конкурентов 0)
    Multi-account (--profile) ❌ (нарушает принцип — только s3rgeym)

    Приоритетный бэклог (ЧТО ДЕЛАТЬ, отсортировано)

    Исключая реализованное (✅) и нарушающее принципы (LOW/оверинжиниринг):

    1. reply-employers — ТИР-2 (2/5), спроектирована, ждёт Верифицировать селекторы /applicant/negotiations + точная дедупликация/empty-state (follow-up к #12, Этап 2) #44 (реальные ответы). Высший среди нереализованных.
    2. Детект тест-вопросов формы (detect-only) — ТИР-3 (1.5/5), probe/apply → [skip] has_questions.
    3. Few-shot стиль писём — ТИР-3 (1/5), расширение Этап 5: AI-генерация сопроводительных писем (с fallback на шаблон) #17.
    4. clone-resume — ТИР-3 (1/5), только при упоре в лимит.

    НЕ делать (нарушают принципы / оверинжиниринг): Telegram-бот, web-дашборд, REST API-мимикрия, --send-email, Bézier, AI-Vision, multi-account, clear-negotiations (редкая деструктивная).

    Полная сортировка матрицы #84. Принцип: 3+/5 → 2/5 → 1/5 → 0. Включает все фичи.

  8. axisrow commented on Jul 31, 2026

    @axisrow
    OwnerAuthor

    Пере-аудит референсов ПО КОДУ — итоговая таблица для бэклога

    Прошлые итерации в этом ишью строились на WebFetch README. Здесь референсы склонированы и прочитаны по исходникам — из-за этого часть прежних выводов изменилась, а часть идей отклонена именно потому, что код показал другое.

    Полный документ: docs/research/issue-84-references.md (PR #114). Ниже — сжатая версия.

    Что изменилось против прошлых итераций

    Прежний вывод Что показал код
    «Авто-ответы на тест-вопросы — MEDIUM, подсмотреть у s3rgeym» (#97) Отклонено. У s3rgeym это прямой POST /applicant/vacancy_response/popup с _xsrf/uidPk/X-Xsrftoken — запрещённая cli-spec API-мимикрия, в браузерном стеке не переиспользуется. Второй блокер принципиальный: работодателю уходит ответ от лица кандидата, которого тот не писал. Предложена замена — статический Q&A-файл (konard)
    «clone-resume — MEDIUM, если упрёмся в лимит» Отклонено. По README:133 назначение — «закончились вакансии → клонируйте и делайте активным», т.е. переподнятие резюме, а не обход лимита. Размножение дневного лимита клонами отклоняем по принципу
    «Pre-LLM фильтр (#85) — уникален, ни у кого нет» Overclaim. У fikstt2 title_rejection_reason() вызывается до analyzer.assess(). Уникален не отсев до LLM, а наш признак — сигналы работодателя vs стоп-слова. По стоп-словам у нас как раз зазор (идея №4)
    Приоритет = «популярность у конкурентов» (3+/5 = стандарт рынка) Критерий сменён. Он ставит в топ то, что легко скопировать: три из пяти референсов — массовые автооткликеры с другой целью. Новый критерий: риск для аккаунта → стоимость упущенного → удобство

    Новые идеи

    № Идея Откуда LOC Размер Приоритет
    1 Детект капчи / анти-бот проверки → стоп прогона tgeruzov script.js:2217-2245 40-60 S P1
    2 Статический Q&A-файл для тест-вопросов (замена #97) konard qa-database.mjs 150-200 M/L P2
    3 Показ «вакансии для ручного отклика» tgeruzov (список + экспорт) 50-70 S P2
    4 Дефолтный список стоп-слов по заголовку fikstt2 vacancy_filter.py 30-40 S P3
    5 codegen — обновление селекторов Steev193 scripts/codegen-hh.mjs 20-30 S P3
    6 Копить стиль писем из правок пользователя Steev193 cover-letter-user-edits.mjs 40-60 S P3

    Приоритизация

    P1 — детект капчи. Единственная идея, которая закрывает активный риск, а не отсутствие удобства. Суть: в этом сценарии отключается единственный тормоз проекта. count_today считает только status='success', а капча даёт сплошные failed — значит серия неудач идёт до исчерпания --limit, и дневной лимит её не остановит вообще. Каждая итерация — новый запрос к hh.ru ровно тогда, когда он уже показал challenge. Весь троттлинг написан против такого поведения, но здесь не срабатывает. Это защита аккаунта, не обход: капчу не решаем, а отдаём человеку. Дёшево, изолированно, не требует живого аккаунта (тестируется на фейковой странице).

    P2 — №3, затем №2. Обе достраивают уже вложенное: #95 научился распознавать вопросы и останавливаться, но дальше вакансия теряется. №3 дешевле и без блокеров, №2 требует сверки формы на живом аккаунте и попутно решает судьбу #97.

    P3 — №4, №5, №6. Полезные, но узкие.

    Отклонено (12 пунктов, с причинами)

    LLM-ответы на тест-вопросы по образцу s3rgeym, авто-ответ «не хожу по ссылкам», REST API-мимикрия, Bézier-курсор, multi-account, Telegram-бот, графический интерфейс (у s3rgeym десктопный pywebview, у Steev193 веб-дашборд), --send-email (SMTP), AI-Vision капча, бесконечный цикл, clear-negotiations, clone-resume, regex по полной description.

    Каждое — с конкретной причиной по принципам проекта (CLI-only, без API-мимикрии, без обхода троттлинга/лимитов, максимальная простота). Отклонение — тоже результат исследования.

    Рекомендация по открытому ишью

    #97 (LLM-ответы на тест-вопросы) — переформулировать в идею №2 (статический Q&A: отвечает человек, один раз, своими словами) либо закрыть. Обоснование выше.

    Где мы впереди

    Circuit breaker на LLM (#74), воронка откликов (#13), probe с дампом формы (#8), анализ рынка по доходу (#66) — ни у кого из пяти. schedule через launchd/cron (#18) чище бесконечного цикла, detect-only на тест-вопросы (#95) честнее их авто-ответов.


    Документ прошёл cycle-review вручную: Codex (gpt-5.4, xhigh) 3 раунда + code-reviewer, 9 находок — все исправлены. Детали в PR #114.

    Ишью закроется автоматически при мердже PR #114 (Closes #84).

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    documentationImprovements or additions to documentationepic

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions