# 模式: pipeline — 待处理 URL 收件箱 (第二大脑)

用于批量处理记录在 `data/pipeline.md` 中的职位 URL 链接。候选人可以随时向待处理列表中追加抓取的岗位链接，然后运行 `/career-ops pipeline` 一键自动化评估所有待投递机会。

## 实时工作流

1. **读取数据**：分析 `data/pipeline.md` 文件，找出 "Pending" 模块下所有标记为 `- [ ]` 的待处理项目。
2. **循环遍历处理**：对每一个未处理的 URL：
   a. **计算新报告编号**：扫描 `reports/` 目录，找出当前最大的三位数字前缀并加 1，作为 `REPORT_NUM`。
   b. **抓取职位描述 (JD)**：首选 Playwright (通过 `browser_navigate` + `browser_snapshot`) 渲染网页抓取，备选 `WebFetch` 提取静态文本，最后使用 `WebSearch` 搜索同名岗位快照。
   c. **异常处理**：若链接因权限、失效等原因完全无法打开，将该项标记为 `- [!]`，附加错误描述，并继续处理下一个。
   d. **执行一键管道评估**：运行 A-F 维度评估 → 保存为报告 `.md` 文件 → 根据设定生成简历 PDF（若评分达到阈值）→ 自动记录至 tracker。
   e. **将记录从“待处理”移入“已处理”**：更新状态为 `- [x] #NNN | 职位链接 | 公司名称 | 职位名称 | 评分/5 | PDF 状态`。

   **关于自动生成 PDF 的分流控制 (Configurable)：**
   系统将读取个人配置 `config/profile.yml` 中的 `auto_pdf_score_threshold`（自动生成 PDF 评分阈值）。如果该配置项不存在，则默认阈值为 `3.0`。
   如果本次岗位的评估得分低于该阈值，系统将**跳过**简历 PDF 的生成步骤（照常撰写评估报告，并在报告头部标明 `**PDF:** not generated — run /career-ops pdf {company-slug} to create on demand`，同时在 tracker 的 PDF 列登记为 ❌）。
   如果评分等于或高于该阈值，则照常自动生成量身定制的简历 PDF。

   *注：此机制可以大幅节省批量扫描时的 Playwright 渲染排版开销（每次渲染需要 30-60 秒）。候选人可在后续通过执行命令单独生成心仪岗位的 PDF。*
3. **并发加速**：如果待处理的 URL 达到 3 个及以上，建议以并发方式（在后台启动子 Agent）并行执行评估，以实现最大处理效率。
4. **输出批处理总结**：处理完毕后，输出一份汇总清单表格：

```text
| 编号 | 公司名称 | 岗位名称 | 综合评分 | PDF 状态 | 投递建议 |
```

---

## `pipeline.md` 语法规范

```markdown
## Pending
- [ ] https://jobs.example.com/posting/123
- [ ] https://boards.greenhouse.io/company/jobs/456 | 某某科技 | 资深 AI 产品经理
- [!] https://private.url/job — 错误：需要登录后查看

## Processed
- [x] #143 | https://jobs.example.com/posting/789 | 极客科技 | AI 研发工程师 | 4.2/5 | PDF ✅
- [x] #144 | https://boards.greenhouse.io/xyz/jobs/012 | 某大厂 | 解决方案架构师 | 2.1/5 | PDF ❌
```

---

## 智能解析 URL 职位描述

1. **Playwright (首选)**：`browser_navigate` + `browser_snapshot`。能够稳定处理所有单页面应用 (SPA)。
2. **WebFetch (备选)**：适用于静态页面，或在 Playwright 环境不可用时作为后备。
3. **WebSearch (最终手段)**：在第三方招聘聚合平台上查找同名职位的快照。

**特殊情况处理：**
- **LinkedIn**：可能会触发强登录校验拦截。若多次失败，标记为 `[!]` 并引导候选人直接粘贴 JD 文本。
- **PDF 文件**：如果 URL 链接直接指向一份 PDF 文档，使用 Read 工具读取二进制文档。
- **本地文件前缀 `local:`**：如果是本地路径，直接读取对应文件。例如：`local:jds/linkedin-pm-ai.md` 指向读取本地的 `jds/linkedin-pm-ai.md` 文件。

---

## 数据一致性校验

在启动处理之前，先执行以下脚本检查简历与配置的同步状态：
```bash
node cv-sync-check.mjs
```
如果检测到简历或个人偏好数据存在脱节风险，在继续执行前向求职者发出警示。
