# Jd Triage

> SKILL · JD 结构化与定级（v0.1.2 骨架）

- Skill: `gilgameshcc/jd-triage` (Agent Skill, multi-file: 4 files)
- Install (CLI): `npx skillmds@latest add gilgameshcc/jd-triage`
- Raw SKILL.md: https://api.skillmd.com/api/skills/gilgameshcc/jd-triage/raw
- Safety review: pending
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: gilgameshcc (https://skillmd.com/u/gilgameshcc)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/gilgameshcc/jd-triage

---

# SKILL · JD 结构化与定级（v0.1.2 骨架）

**把本文件整份交给你的 agent 即可**——不依赖任何特定 agent 产品，不需要注册命令、不需要放在特定目录、不需要装任何东西。`SKILL.md` 只是一个文件名约定，不是某一家的格式。连同一份 JD 原文一起贴给它，就能开始。

> ⚠️ **这一版是骨架**：给的是规则与标定方法，**不是一套调好的参数**。文中所有 `〔…〕` 都是**留空的参数**，需要你自己标定（方法见第三步）。完整定级模板排在 v0.3。

---

## 开跑前

### 要什么

| | 要什么 | 缺了会退化成什么 |
|---|---|---|
| **必需** | **JD 原文** | 没有原文就没有可抽取的对象。**不接受"某公司某岗位大概是做 XX 的"这种转述**——转述本身已经是一次评价，抽取纪律从第一步就破了 |
| **必需** | **你的必要条件 2-3 条 + 硬性排除条件 2-3 条** | 缺了**不猜、也不用默认值**。会先要你写这两组，因为没有它们，所有岗位都会被判成"较匹配"（见「不对劲的时候」第 1 条） |
| 可选 | [`positioning.md`](../../00-workspace/templates/positioning.md)（定位文件，空模板在 `00-workspace`） | 没有就从上一行的口述里现场整理一份最小版本，并存回去，下次直接用 |
| 可选 | 加分条件 | 没有就只判"是否满足必要条件 + 是否触排除条件"，**级别会收敛成三级**（强匹配与较匹配分不开），并明确告诉你少了哪一层。⭐ **写了加分条件、但它的上沿还没校准时也走这一档**——首轮的每个人都在这个状态里，见第二步「首轮」一节 |
| 可选 | ⭐ `branches.md`（活跃探路分支） | **一律按主线阈值判，探路岗位会被判成"不投"。** 这是缺省的保守行为，不是 bug。但必须明说一句："我没看到任何活跃探路分支——**你如果在试新方向，需要手工告诉我**" |
| 可选 | `ledger.md`（台账，已跑过的岗位与对方回应） | 没有就跳过第三步的阈值反推，阈值停在 `纯占位待校准`，并在每次定级结论末尾标注这一点 |

### ⭐ 最小可接受形态

**一份 JD 原文 + 你的必要条件与排除条件各 2-3 条。**

散着贴进来就行 —— 微信里复制的一段、招聘页面上整片选中的文字、你自己口述的三句"我不接受什么"，**都算**。整理成结构化表是 agent 的工作，不是你的。

#### ⭐ 照最小形态给，你会拿到 X，但拿不到 Y

| ✅ X：你会拿到 | ❌ Y：你拿不到 |
|---|---|
| 一张结构化抽取表 + 一个级别 + **能追回到条件编号的理由** | **分开的「强匹配」与「较匹配」**——没有加分条件表（或有表但上沿还没校准），级别收敛成三级 |
| 一份「原文未提及」清单，逐条升级成面试必问项 | **任何一个标着 `实践校准` 的阈值**。全部停在 `纯占位待校准`——标定要的是你**已经做过**的判断，一份新 JD 里没有 |
| 一条可复核的「不投」理由（指得到具体编号） | **"我这条排除条件是不是定错了"的答案**——那要第三步的三类反推样本，每类 〔2-3〕 条（`默认建议值`） |

**一句话**：最小形态够**定级**，不够**标定阈值**。定级是"用现有标尺量一次"，标定是"检查标尺本身准不准"——后者要的是一批你已经做过的判断，不是一份新的 JD。所以第一次跑完不要问"我的阈值定得对不对"：在这个输入量下，那个问题没有答案，**任何看起来像答案的东西都是编的**。

### ⛔ 四条禁止（对 agent）

1. **不许报错退出。** 上游文件不存在是常态，不是异常。退化成"需要你手工补这几项"，然后继续跑
2. **不许静默自己编。** 没写汇报线就是没写——填"原文未提及"并进"待确认"，**不要推一个像是那么回事的答案填进去**
3. **不许一次只问一个问题挤牙膏。** 要什么一次列全，让人一次补齐
4. **不许把该自己解决的整理工作推给用户。** 用户散着贴来的材料由你整理成结构化表；"请先把 JD 整理成表格再给我"是被禁止的回答

---

## 第一步 · 抽取（不做评价，只做客观抽取）

用 [`templates/jd-抽取模板.md`](templates/jd-抽取模板.md) 的空表逐栏填。**填之前先接受这条纪律**：

> **抽取阶段不下任何判断，原文措辞原样保留。**
>
> 为什么这条不能松：抽取时就顺手评价（把"负责数据平台的日常维护与迭代"写成"看起来是接手已有系统"），会**把 JD 里的原始信号洗掉**。后面的定级于是不是在评价 JD，而是在评价**一份已经被你评价过的材料**——错误从此不可见，因为原文已经不在表里了。

三条执行细则：

- **原文措辞保留。** 不同义替换、不精简、不"翻译成人话"。你觉得含糊的地方，正是要保留的地方——含糊本身是信号
- **薪资原样抄。** 不折算、不换算周期、不取区间中点、不补"大概"。以图片形式给出的薪资，抄下你看到的原样文本，并标注它来自图片
- **原文没写的，写"原文未提及"。** 它会自动进入"待确认"清单，成为面试必问项（交给 [`interview-strategic-assessment`](../interview-strategic-assessment/README.md)），**而不是被一个推测填掉**

### ⭐ `核心职责` 这一栏比薪资更重要

薪资谈得动，**做的事换不动**。这一栏的抽取规则是：**摘出原文里能支撑下面两组区分的句子**——

| 区分 | 原文里往哪看 |
|---|---|
| **从 0 搭体系 vs 接手已有系统** | 前者常出现"搭建 / 建立 / 从无到有 / 定义流程 / 组建"；后者常出现"维护 / 迭代 / 优化现有 / 承接 / 保障稳定"。**看动词，不看名词** |
| **对内提效 vs 对外产品** | 前者常出现"内部效率 / 支持业务团队 / 降本 / 提效 / 赋能"；后者常出现"面向客户 / 商业化 / 付费用户 / 对外交付 / 营收" |

**但抽取阶段只贴句子，不下结论。** 表里这一栏写的是"原文原句 + 它指向哪一组"，不是"这是一个从 0 搭体系的岗位"。**两组都判不出时写"原文未提及"，进待确认**——这本身就是一个强信号：一份说不清自己要人干什么的 JD，往往对应一个还没想清楚的岗位。

### ⭐ 「这条是怎么进来的」不是可有可无的登记项

抽取表里有一栏问「**这条 JD 是怎么进来的**」（搜索命中 / 平台推荐 / 对方主动推来 / 中间人转介 / 其他）。定级用不到它，所以它看起来最像可以省掉的那一栏。**恰恰相反**：

- **它是下游判断"你的搜索词在不在漂移"唯一的输入。** 反复出现、却不在你关键词列表里的那些岗位形态，只能从这一栏认出来
- **漏填 = 这条在后面的方向复盘里等于不存在**，不是权重低，是不进样本
- **它事后补不回来。** 一周后你不会记得某条是自己搜的还是被推来的，而这两者指向完全相反的解读（前者反映你的关键词，后者反映别人眼里的你）

执行要求：`搜索命中` 的**连搜索词一起记**；`对方主动推来` 的同时在 `ledger.md` 的「反向吸引」栏打标记；真想不起来就写 `其他` + 你记得的那半句。**⛔ 不许猜一个具体来源填进去**——猜出来的来路会污染的正是这一栏唯一的用途。

---

## 第二步 · 定级（四级，排除条件短路）

用 [`templates/定级规则模板.md`](templates/定级规则模板.md)。判定**必须按这个顺序**，顺序本身就是纪律：

```
① 硬性排除条件  →  命中任一条  →  判「不投」，短路，不再往下算
② 必要条件      →  ⭐ 三态，不是两态：
                    ├─ 满足          → 继续往下
                    ├─ 原文明确不满足 → 看是否落在活跃探路分支里
                    │                    ├─ 是 → 走该分支的更宽阈值 → 可判「探路」
                    │                    └─ 否 → 判「不投」
                    └─ 原文未提及     → 降一档 + 挂待确认 + 升级为面试必问项
                                        ⛔ 不据此判「不投」
③ 加分条件      →  在必要条件全满足的前提下，决定「强匹配」还是「较匹配」
```

### ⭐ 硬性排除条件不可被匹配度换

薪资、汇报线、权限这类是**不可交易的**，不是"权重特别高的加分项"。

- ❌ 不许写"排除条件命中一条扣 N 分"——只要它出现在同一个加权式子里，就总会被别的项换掉
- ❌ 不许出现"虽然薪资不达标，但匹配度很高，建议投一下试试"这种结论。**这句话就是这条纪律要防的那个错误本身**
- ✅ 正确形态是**短路**：命中 → 判「不投」→ 停止计算 → 理由里写清命中的是哪一条编号

> 这与 [`05-offer`](../../05-offer/README.md) 的 gate 是**同一条纪律**：那边是"加分项再多也换不掉一条必要条件"，这边是"匹配度再高也换不掉一条硬性排除条件"。**这条纪律在几个模块里都出现过，犯的是同一类错**——把不可交易的条件当成了可以加权的项。所以你在多个模块里看到同一句警告，不是重复，是同一条纪律的不同落点。

### ⭐ 「原文未提及」是第三态，不是「未满足」

**JD 不写关键信息是常态，不是例外。** 汇报线、权限、办公方式，多数 JD 都不写。所以必要条件这一侧有三态：

| 态 | 它是什么 | 怎么处理 |
|---|---|---|
| **满足** | 抽取表里有原文能**证实** | 正常往下走 |
| **未满足** | 抽取表里有原文能**证伪** | 除非落在活跃探路分支内，否则判「不投」 |
| ⭐ **原文未提及** | 抽取表这一栏是空的 —— **它是一个待确认项，不是一个判定** | **降一档 + 挂进待确认 + 升级为面试必问项。⛔ 不据此判「不投」** |

「降一档」的意思：强匹配 → 较匹配；较匹配 → 保留，但标注"关键项未确认"。**它压低优先级，不关门。**

⭐ **三级收敛期怎么降**（〔B 上沿〕仍为 `纯占位待校准` 时 —— 见下面「⭐ 首轮」一节，**首轮的每个人都在这个状态里**）：这时只有「匹配」一档，**降无可降**。口径写死：**保留「匹配」，标注"关键项未确认"，并在批内相对排序里排到同等命中数的岗位之后。**
⛔ **不许因为"降不动"就把三态压回两态判「不投」** —— 那正好是这一节要防的那个错误，只是换了个入口进来。

**为什么必要条件这一侧要这么处理**，理由与排除条件那一侧同源（那边的说法是「推测项不能单独触发不可逆动作」）：

- **「不投」不产生任何反馈**——不投递、不接触、没有回应，于是这条判断永远没有机会被证明是错的。它是**不可逆**的
- **一份 JD 没写某件事，最常见的原因只是这份 JD 写得糙**，不是招聘方在这件事上真的不满足你的条件。用"对方没写"去触发一个不可逆的动作，等于把**对方的写作质量**当成了你的判据

⛔ 不许出现这种结论：~~"JD 没提汇报线，按最坏情况算，判不投。"~~
✅ 正确形态："**N2 待确认**——「汇报线」栏为 `原文未提及`；级别由强匹配降为较匹配，已列入面试必问。"

⚠️ **反过来也不许：不许把「原文未提及」当成「满足」放过去。** 那会让定级结论看起来很完整，实际建立在一批没人检验过的默认假设上。**三态就是三态，往哪边压成两态都是错的。**

### 四个级别

| 级别 | 判据 | 你该做什么 |
|---|---|---|
| **强匹配** | 无排除命中 + 必要条件全满足 + 加分条件命中数 ≥ 〔上沿阈值·纯占位待校准〕 | 优先投，值得为它单独定制材料 |
| **较匹配** | 无排除命中 + 必要条件全满足 + 加分条件命中数落在〔中段·纯占位待校准〕 | 投，用通用版本即可 |
| **探路** | 无排除命中 + 有必要条件未满足**但落在活跃探路分支内** + 满足该分支的更宽阈值 | 投，但计入该分支的配额，且到分支截止日一起复盘 |
| **不投** | 命中任一硬性排除条件（**最高优先级，无条件**）；或**任一必要条件被原文明确证伪**且不落在任何活跃探路分支内。⛔ **「原文未提及」不算未满足**，见上一节 | 不投。**但要把理由写进定级结果文件，并在台账里留一行**——"不投"也是数据 |

> ⛔ 这里**没有"缺口上限"参数** —— 一旦允许"缺几条还能过"，必要条件就变成了加权项，正是本模块上一节要防的那件事（硬性排除条件不可被匹配度换）。分支豁免哪几条必要条件，写在 `branches.md` 里，是**显式豁免**，不是缺口预算。

### ⭐ 首轮：加分条件表非空，但它的上沿还没校准

「开跑前」写的是**加分条件表为空**时收敛成三级。还有一种状态它没覆盖，而**首轮的每个人都在这个状态里**：加分条件写了几条，但〔B 上沿〕和〔B 中段〕都还是 `纯占位待校准`——**一个没有数值的上沿，分不开「强匹配」和「较匹配」**。

这一档这样处理：

1. **同样收敛成三级**（强 / 较合并成一档，就叫「匹配」）。⛔ **不许随手编一个上沿把它们劈开**
2. **但要给出相对排序**：这一批内部按加分条件命中数从多到少排出来，并明说一句"这是**这一批内部的相对排序，不是绝对档位**——换一批 JD，同一个岗位的位置会变"
3. 每条结论末尾标注：〔B 上沿〕仍为 `纯占位待校准`，因此强 / 较两档尚未分开

**它什么时候自动解开**：等你按第三步反推出〔B 上沿〕、把它的来源等级从 `纯占位待校准` 改成 `实践校准`（或至少 `默认建议值`）那一刻，四级自动恢复。触发条件是**样本量**，不是时间——第三步的三类样本每类攒够 〔2-3〕 条（`默认建议值`）就可以反推；少于这个量级，反推出来的上沿只是把一两条个例写成了规则。

⛔ **不许为了"能出四级"先编一个上沿。** 编出来的档位会立刻开始影响你投哪些岗，而它没有任何依据；更糟的是它长得和一个真阈值一模一样，三个月后你不会记得它是编的。这正是 §来源标注三挡要如实标的原因。

### 定级理由必须能被追回去

一条合格的定级结论长这样：

> **青栈网络 / 数据平台负责人 → 不投**
> 命中排除条件 **X2**（薪资下沿低于你写的下沿）→ 短路，未继续计算匹配度。
> 补充（不参与判定）：必要条件 N1 N3 满足，N2 待确认（原文未提及汇报线）。

一条**不合格**的结论长这样：

> ~~综合看比较匹配，建议可以投一下。~~

区别不在语气，在**可追性**：前者能指回具体条件编号，后者指不回任何东西，所以既无法复核，也无法用来校准阈值。**每条定级理由都必须指向至少一个条件编号；指不到，就写"指不到"，然后回到第一步看抽取表哪一栏是空的。**

### ⭐ 定级结果写到哪（⛔ 不要就地发明一个文件名）

一批 JD 定完级，产出**一份文件**：

```
triage/<日期>-定级结果.md
```

- 日期 = **这批 JD 的批次日期**，与 `jobs/<日期>-一批说明.md` 对齐，两份文件肉眼就能配上对
- 位置与命名的权威定义在 [`00-workspace` 的工作区骨架](../../00-workspace/templates/工作区骨架.md)
- **没有工作区、只是单跑一次的**：把同样的内容原样输出给用户，并告诉他"将来建工作区时，这份东西放 `triage/`"。⛔ 不许现场发明一个文件名，也不许把它塞进 JD 原文那份文件里

**一条都不许少的三样东西**：

1. **每条岗位的级别**（强匹配 / 较匹配 / 探路 / 不投；三级收敛期就写「匹配」并注明原因）
2. **理由，且能追回到具体条件编号**（`X1` / `N2` / `B1`…）。指不到编号就写"指不到"，不许用"综合看还行"顶上
3. **待确认项**：所有 `原文未提及` 与 `我推测的`，逐条写清"要证实它该问谁 / 查什么"，并标出它把级别压低了几档

**四个位置各管一件事，别互相塞**：

| 位置 | 装什么 | ⛔ 不装什么 |
|---|---|---|
| `jobs/<日期>-一批说明.md` | JD **原文**与抽取表 | 任何级别与判断——判断进 `triage/` |
| `triage/<日期>-定级结果.md` | 级别 + 可追编号的理由 + 待确认项 | JD 原文的改写版（原文只在 `jobs/`，这里引用原句即可） |
| `ledger.md` 的「级别」栏 | **一个字母**（S/A/B 之类），用来分层看回复率 | 理由——**一个字母装不下"能追到条件编号的理由"**，那是 `triage/` 的活 |
| `assessments/<公司>.md` | **面试前**的疑点与红旗绿旗判据 | 投前定级——读者和时机都不同（那边服务"要不要去"，这边服务"要不要投"） |

> ⚠️ **判成「不投」的那些也要写进这份文件，并在 `ledger.md` 里留一行。** 「不投」是本模块产出最多、也最容易蒸发的一类结论；它不落地，第三步的阈值校准就永远缺掉最重要的那一类样本。

---

## 第三步 · ⭐ 怎么定你自己的阈值

**仓库不给数字。** 下面是标定方法，完整表格在 [`templates/定级规则模板.md`](templates/定级规则模板.md)。

### 从哪几条已投过的岗位反推

不要凭空想一个阈值，**从你已经做过的判断里反推**。取三类样本，每类几条即可：

| 样本类型 | 它告诉你什么 |
|---|---|
| ① 投了、且对方有回应的 | 你的**实际命中区**在哪 |
| ② 投了、但事后后悔的 | 你**漏写了哪条排除条件**——后悔的那个理由，就是那条排除条件的原文 |
| ③ ⭐ 犹豫很久、最后没投、但一直惦记的 | **最有价值的一类。** 它标出的是你真实的下沿，而不是你以为的下沿。你写下的排除条件往往比你真实的底线更严——这类样本是唯一能发现这件事的入口 |

方法：把这几条岗位按第一步抽取成表，然后问"**要让我当时的判断成立，阈值得设在哪**"。反推出来的阈值标 `实践校准`；凭感觉定的标 `默认建议值`；没定的保持 `纯占位待校准`。

### 先松后紧，不是先紧后松

**默认先松。** 理由是不对称的：

- **先紧的代价不可回收**——被判「不投」的岗位不产生任何反馈（不投递、不接触、没有回应），于是阈值再也校不动了。这是一个**自我封闭的错误**：越紧，越看不见自己错在哪
- **先松的代价可回收**——无非是多读几份 JD、多写几条"不投"的理由。这些恰好是下一轮校准的样本

**唯一的例外：排除条件反过来，一开始就要写死、写紧。** 松的是匹配度那一侧，不是排除那一侧。把这两侧搞反是最常见的误用——结果是"什么都投得出去，但底线也守不住"。

### 多久回头校一次

**按新增样本量触发，不按时间。** 时间到了但样本没增加，校准只是在重新解释同一批数据。

三个**强制**校准时机（不等样本量）：

1. 连续多条「强匹配」零回应 —— 要么是抽取错了，要么是阈值标在了一个和市场无关的位置
2. 一条探路分支**开启或关闭**时 —— 分支的更宽阈值和主线阈值必须一起看，否则会漂移成两套互不相干的标准
3. 你的**必要条件本身变了** —— 这时旧阈值全部作废，回到 `纯占位待校准`，不要拿旧数字硬套新条件

---

## 来源标注

每条结论都要能一眼看出它是哪来的。**三挡，不要第四挡**：

| 标注 | 什么时候用 | 例 |
|---|---|---|
| `你给的` | 用户提供的事实与偏好 | 必要条件 / 排除条件 / 阈值 / 你对某条职责的解读 |
| `公开可查` | JD 原文里的字段、公司公开信息 | 岗位名称、城市、薪资原文、招聘方公开介绍 |
| `我推测的` | JD 没写、由 agent 推断的 | "看起来汇报给业务负责人""团队规模应该不大""这大概是个从 0 搭的岗位" |

**每条 `我推测的` 必须附一句"要证实它，你该问谁 / 查什么"。** 例：

> 汇报线：推测直接汇报给业务线负责人 · `我推测的`
> 要证实它：面试时问"这个岗位向谁汇报，团队现在有几个人" —— 这类问题对方大概率能答，答不上来本身也是信号。

### ⭐ 推测项不能单独把一个岗位判成「不投」

一条标着 `我推测的` 的信息，**不足以触发硬性排除条件**。它可以让级别降一档并挂上"待确认"，但不能直接关门。

⭐ **去向与必要条件的第三态同构，一条都不许少**：**降一档 + 挂待确认 + 升级为面试必问项**（交给 [`interview-strategic-assessment`](../interview-strategic-assessment/README.md)）。
⛔ **只挂在"待确认"里、不给去向的推测项，到面试当天不会变成任何一个你问得出口的问题** —— 它会一直停在那里，而级别已经被它压低了。

理由：排除条件的杀伤力是短路式的、不可逆的（不投 = 没有反馈 = 阈值校不动）。**用一个猜测去触发一个不可逆的动作，是这个模块最贵的错误形态。** 这与 [`05-offer`](../../05-offer/README.md) 的「推测项不参与排序」是同一条处理方式。

---

## 不对劲的时候

`症状 → 最可能原因 → 你下一句该说什么`

| 症状 | 最可能原因 | 你下一句该说什么 |
|---|---|---|
| ⭐ **所有岗位都判成「较匹配」** | 硬性排除条件没定，或全部用了默认值——于是没有任何东西能把岗位推到两端 | *"先把你的必要条件和排除条件各写 2-3 条，再重跑一次"* |
| **所有岗位都判成「不投」** | ① 排除条件写得比你的真实底线更严 ② 你在试新方向，但它读不到任何活跃探路分支，按主线阈值判 | *"把这几条排除条件按'不满足我就真的不会去'再筛一遍；如果我在试新方向，先把这条探路分支说给你听"* |
| **定级理由是"综合看比较匹配"这种一句话** | 抽取表没填完，或条件没编号——理由无处可追 | *"把每条定级理由改成指向具体条件编号的形式；指不到就直接说指不到，我们回去看抽取表哪一栏是空的"* |
| **抽取表里出现了 JD 原文里没有的措辞** | 抽取阶段做了评价或润色，原始信号已被洗掉 | *"重新抽一次，这一栏只许贴原文句子；原文没写就写'原文未提及'"* |
| **同一家公司两条岗位定级完全相反，但 JD 差别不大** | `核心职责` 那一栏的两组区分没做，或薪资原文被折算过 | *"把两份 JD 的核心职责原文并排贴出来，我们看差在哪一句"* |
| ⭐ **一批岗位因为"JD 没写"被判成「不投」** | 必要条件被当成两态判了——「原文未提及」被算成了「未满足」 | *"把所有因为『原文未提及』判成不投的重判一遍：那是待确认项，不是判定——降一档 + 挂待确认 + 升级为面试必问，不投的只留原文能证伪的那些"* |
| ⭐ **它问你"定级结果存哪"，或者自己起了个文件名** | 落点规则没读到 | *"定级结果一批一份，存 `triage/<日期>-定级结果.md`，日期和这批 JD 的 `jobs/` 文件对齐；里面每条要有级别 + 能追到条件编号的理由 + 待确认项"* |
| ⭐ **强匹配和较匹配总是分不开，或者忽然冒出一个上沿数字** | 加分条件的上沿还是 `纯占位待校准`（首轮的默认状态）；后一种是它自己编了一个 | *"这一批先收敛成三级，只给批内相对排序，别编上沿；等我攒够可反推的样本再按第三步标定"* |

---

## 三级自救阶梯

**不要一出问题就把活推回给人。** 上面那张表是 L3 的载体，不是"一遇事就回报"的入口。

| 级 | 什么时候到这一级 | 该做什么 | ⛔ 不该做什么 |
|---|---|---|---|
| **L1 有现成的，直接走** | 抽取模板与定级规则命中 | 按规则执行，**不问**。已有条件能裁决的判断自己裁决 | 不为"确认一下"打断用户 |
| **L2 没现成的，自己走通 + ⭐ 沉淀** | 上游文件缺 / 用户散着贴来一堆材料 / JD 格式怪 / 某一栏原文没写 | 自己把散料整理成抽取表；自己从口述里现场整理出最小版本的条件清单；拿不准就**按更保守的一侧判**并记下理由。**走通之后写回去**——条件清单存进 `positioning.md`、新的抽取线索补进模板、定级结果与理由记进 `ledger.md` | ⛔ **不把"这次绕过去了"只留在会话里**。没沉淀 = 下次还得再试一遍 = 等于没走通 |
| **L3 实在不行，才回报人** | L2 也走不通；或只有用户本人才有的事实（他的真实底线、他是不是在试新方向） | 输出 **症状 + 已经试过什么 + 建议你做什么**（给可选项） | ⛔ 不输出裸错误；⛔ 不说"请提供更多信息"这种没有指向的话；⛔ 不把 L2 该自己解决的整理工作推给用户 |

---

## 变更日志

- **v0.1.2**（来自 [`fixtures/jd-triage/`](../../../fixtures/jd-triage/expected.md) 首轮双向断言，**只改判据表述，不动结构**）：两处都不是区分力失败，是**首跑时 hit 侧无判据可依 / 落点缺失** ——
  - **三级收敛期的「降一档」没有取值**：SKILL 只定义了"强匹配→较匹配 / 较匹配→保留但标注"，而**首轮的每个人都在三级收敛期**（〔B 上沿〕未校准），那时只有「匹配」一档、降无可降。已写死口径：保留「匹配」+ 标注"关键项未确认" + 批内排到同等命中数之后，⛔ 不许因为降不动就把三态压回两态判「不投」。
  - **排除条件侧的推测项没有去向**：必要条件第三态明写"降一档 + 待确认 + **升级为面试必问项**"，而 §来源标注「推测项不能单独判「不投」」只写了前两样。已补齐第三样并写明理由 —— **只挂在待确认里、不给去向的推测项，到面试当天不会变成任何一个你问得出口的问题。**
- **v0.1.1**（来自一次端到端实跑测试）：必要条件补第三态「原文未提及」（降一档 + 待确认 + 面试必问，**不据此判「不投」**）· 定级结果有了明确落点 `triage/<日期>-定级结果.md` 与四个位置的边界 · 补「加分条件表非空但上沿未校准」这一档（首轮默认状态）与它的解开条件 · 「最小可接受形态」写清拿得到 X / 拿不到 Y · 第一步点明「这条是怎么进来的」这一栏的用途。
- **v0.1.0**（首发，骨架）：抽取纪律 + 四级定级短路顺序 + 阈值标定方法 + 探路分支更宽阈值与降级行为 + 三段式区块（开跑前 / 来源标注 / 不对劲的时候）+ 三级自救阶梯。**所有阈值参数化留空**（「不投」一栏**不设缺口上限参数**——必要条件未满足即不投，豁免只能来自显式的探路分支），完整定级模板排 v0.3。

