Конвейер
Порядок фиксирован в pipeline/stages.py: как бы стадии
ни перечислили в аргументах, прогон расставит их в этом порядке. Числа справа — из журнала прогонов.
Профили и расписание
«Профиль» здесь — набор аргументов прогона, и разворачивается он в одном
месте: case в run-pipeline.sh. Стадии в строках посчитаны тем же парсером
аргументов, которым их читает CLI, а расписание взято из docker/crontab.
Источники
Адаптер на ATS и агрегаторы, которые обходятся целиком. В индексе они
неразличимы по устройству: агрегатор пишет вакансии тем же полем ats, а slug у него —
имя работодателя, поэтому и разрез один.
Треки
Трек — это списки слов: любое из include в названии заносит вакансию в трек, любое из exclude забирает обратно. Списки и есть определение — и SQL-предикат, и функция на пути записи выводятся из них. Порядок важен: трек присваивается ПЕРВЫЙ подошедший, а не лучший.
Словари разметки
Офлайн-слой чист: ни базы, ни сети. Любой классификатор вправе ответить «не знаю» — половина названий не несёт грейда, две трети не несут семейства роли, и классификатор, который угадывает, врёт.
Под кого ищем
Профиль поиска — это контролы (видимые поля формы, их можно ослабить), отбор (условия, которые контролами не выражаются) и балл. Сигналы и балл — один список: слагаемое, которого не видно, и подпись, которая ничего не весит, разошлись бы на второй правке.