# Режим: pipeline — Очередь URL (Second Brain)

Обрабатывает URL вакансий из `data/pipeline.md`. Пользователь добавляет URL когда угодно, затем запускает `/career-ops pipeline` для обработки.

## Workflow

1. **Прочитать** `data/pipeline.md` → найти `- [ ]` в секции "Ожидающие" (или "Pendientes" / "Pending" — pipeline.md может содержать заголовки на любом языке)
2. **Для каждого URL**:
   a. Зарезервировать следующий `REPORT_NUM` атомарно, запустив `node reserve-report-num.mjs` (и освободить маркер, запустив `node reserve-report-num.mjs --release <num>` после записи отчета)
   b. **Извлечь JD** через Playwright → WebFetch → WebSearch
   c. Если URL недоступен → пометить `- [!]` с заметкой, продолжить
   d. **Выполнить auto-pipeline**: Оценка A-F → Отчёт .md → PDF (если балл >= 3.0) → Трекер
   e. **Переместить из "Ожидающие" в "Обработанные"**: `- [x] #NNN | URL | Компания | Роль | Балл/5 | PDF ✅/❌`
3. **Если 3+ URL**, запустить агентов параллельно (Agent tool с `run_in_background`). **Ограничение:** Playwright требует ресурсов — использовать **только один** Playwright-агент одновременно (правило `_shared.md`). Все прочие шаги (WebFetch, оценка, генерация отчёта) допускают полную параллелизацию. Рекомендуемая схема: один агент с Playwright верифицирует активность вакансии; остальные агенты получают JD через WebFetch и параллельно проводят оценку.
4. **По завершении** показать таблицу:

```
| # | Компания | Роль | Балл | PDF | Рекомендуемое действие |
```

## Формат pipeline.md

```markdown
## Ожидающие
- [ ] https://jobs.example.com/posting/123
- [ ] https://hh.ru/vacancy/12345678 | Компания | Senior Backend
- [!] https://private.url/job — Ошибка: требуется авторизация

## Обработанные
- [x] #143 | https://jobs.example.com/posting/789 | Acme Corp | AI PM | 4.2/5 | PDF ✅
- [x] #144 | https://hh.ru/vacancy/87654321 | BigCo | Backend | 2.1/5 | PDF ❌
```

## Определение JD из URL

1. **Playwright (предпочтительно):** `browser_navigate` + `browser_snapshot`. Работает со всеми SPA.
2. **WebFetch (fallback):** Для статических страниц.
3. **WebSearch (последний ресурс):** Поиск на вторичных порталах.

**Особые случаи:**
- **hh.ru**: API доступен: `https://api.hh.ru/vacancies/{id}` — JSON с полным описанием
- **LinkedIn**: Может требовать логин → пометить `[!]`, попросить вставить текст
- **PDF**: Если URL на PDF — прочитать через Read tool
- **`local:` префикс**: Читать локальный файл. Пример: `local:jds/company-role.md`

## Нумерация

1. Запустить `node reserve-report-num.mjs` для атомарного резервирования следующего порядкового номера (stdout вернет `{###}`).
2. Записать файл отчета, используя этот номер.
3. Освободить маркер, запустив `node reserve-report-num.mjs --release {###}` после записи отчета.

## Синхронизация источников

Перед обработкой URL:
```bash
node cv-sync-check.mjs
```
Если рассинхронизация — предупредить пользователя.
