SKILL · Offer 排序与翻转点
SkillDev toolsA job-hunting methodology written for agents to read. Not a submission script, but discipline for judgment at every decision point.
Available today. Use it from your connected AI after setup.
No other account needed.
Add ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
Then ask your AI: use the SKILL · Offer 排序与翻转点 skill
What this skill tells your AI
The instructions your AI receives, as published by gilgameshcc/ai-native-jobhunt in modules/05-offer/SKILL.md and read by ahel’s review.
把本文件整份交给你的 agent 即可。 不依赖任何特定 agent 产品,不需要注册斜杠命令、不需要放进特定目录、不需要装任何东西——
SKILL.md只是一个文件名约定,不是某一家的格式。把这份文件粘给它,说一句「按这个帮我排一下手上的 offer」就能开始。
这份文件是写给 agent 的执行剧本。 你(使用者)只需要读「开跑前」「一、最小路径」和「不对劲的时候」三节——其余章节(写死的五条纪律、可选维度池、完整输出格式等)是 agent 执行时要查的细则,你不需要现在通读。
⭐ 如果你是人,而且想自己想清楚而不是要一个排序 —— 去读
透镜库.md(八个角度,纸上就能做完)。⛔ 那份不出结论,本份才出。
全文索引(九个顶级小节,一时找不到内容时先看这里)
下面是标题原文,找的时候直接 Ctrl+F / Cmd+F 搜标题文字即可跳转。
| 小节 | 在讲什么 | 你(人类)现在要读吗 |
|---|---|---|
| 开跑前 | 要什么输入、缺了怎么退化 | ✅ 读 |
| 一、最小路径(四步跑完…) | 四步跑完拿到一版排序 | ✅ 读——这是本文件的主体 |
| 二、写死的五条纪律(agent 不许改) | agent 不许碰的判断规则 | ⛔ agent 查,人不用通读 |
| 三、交给现场检索的部分(websearch) | 哪些数据要联网查 | ⛔ agent 查 |
| 四、可选维度池(不是必填清单) | 除四维外还能加什么维度 | ⛔ 深潜才需要 |
| 五、输出格式(六件事,缺一不可) | 最终产出物的完整规格 | ⛔ agent 查,产出物本身已经是「一页纸」呈现,你看那份就够 |
| 来源标注 | 三套标签体系的完整定义 | ⛔ agent 查(精简版已提前放在「开跑前」末尾) |
| 不对劲的时候 | 跑歪了怎么排查 | ✅ 出问题时读 |
| 三级自救阶梯 | agent 卡住时怎么自己找路 | ⛔ agent 查 |
交付约定:易用性与完成度优先
Agent 负责整理并完成本次可做部分,交付可直接人工 review 的成品,不止给建议或空表。先读用户工作区的 policies/;用户可配置的执行偏好和参数集中在这里维护,已有求职条件仍以 positioning.md 为准。明确要求的调整直接写回并在 policies/changes.md 记录旧值、新值、理由与影响;Agent 建议标待确认。
用户已指定路径就直接创建本次所需目录;未指定时一次询问存放位置,同时继续整理材料。不得要求用户先手工建文件夹,不得把个人材料写进公开仓库。具体岗位建立或复用 applications/日期-公司-岗位/README.md,索引实际成品,初始化只补缺失文件;原始材料和历史审阅保留,策略、申请索引及衍生产物可按本次授权更新并记录变更。结束前写 reviews/日期-任务.md:成品路径、结论依据、采用策略、待确认项及影响、实际检查和下一步;重新读取文件核对后给可点击路径。缺材料时先完成不依赖它的部分并标部分完成;无文件写入能力须明确未落盘。可审阅不等于获准发送,外部动作仍按既有授权和模块边界。
交付前交叉核对报告、申请索引、台账和审阅卡:结论与下一步必须一致,已判不投的岗位只说明排除依据及证据或本人条件改变后可重评,不沿用继续推进的话术。内容重排后修正上下文指代;检查数量只填写工具实际统计值,未统计就列检查对象,不手写估数。发现历史审阅错误时另写勘误,保留原记录。
完整规则与模板见 本地交付约定;只拿到本 SKILL 时按以上约定建立最小 Markdown 文件即可,不要求先跑其它模块。
开跑前
要什么 / 缺了退化成什么
| 输入 | 必需? | 缺了会退化成什么 |
|---|---|---|
| 每个 offer 的薪资结构(固定与浮动怎么拆、几薪、有没有期权,不需要具体金额,相对量就够) | ✅ 必需 | 缺这个不能跑。但它可以是相对的:「B 的固定部分比 A 高一点、浮动比 A 少一半」就足够 |
| 每个 offer 的通勤时间(单程,门到门) | ✅ 必需 | 缺这个不能算真实时薪——而真实时薪是最小路径唯一要算的东西 |
| 你的必要条件(不满足就不去,写 2-3 条) | ⚠️ 强烈建议 | 没有就没有 gate。agent 会先要你写,写不出来说明你还没决定在找什么 |
| 每周典型工作时长 / 加班常态 / 有没有值班待命 | 可选 | 缺了按「与你现在相当」计入,并标 我推测的,且列进翻转点。⚠️ 「你现在」本身也缺时(刚毕业 / 空窗 / 现职体感说不清),退到 周工时默认 = 每周约四十五小时,标 纯占位待校准,并必须列进翻转点做三点采样 |
面试复盘(interviews/<company>-<date>.md) | 可选 | 「发展空间」这一维只能标 我推测的,因而不参与排序,只列进「要证实它你该问谁」 |
面试前评估(assessments/<company>.md) | 可选 | 「下行风险」退化成公开渠道现查 + 答复前必问项 |
| 你现在这份工作的同样几项 | ⚠️ 强烈建议 | 缺了「留在原地」这一列会变成空的——而没有它就没有机会成本,也就没有翻转点 |
⭐ 上游文件在工作区的哪个位置(positioning.md / assessments/ / interviews/ 分别在哪个目录;没有就明说没有) | ⚠️ 强烈建议 | ⛔ 不问这一条,最典型的后果是第 1 步从零重问必要条件,而 positioning.md 里已经写着了——一条真·事前条件被当场重问一遍,时点就变成今天,被降级成 事后重构。见第 1 步 |
| ⭐ 你这台机器能不能联网检索 | ⚠️ 强烈建议 | 不能联网时「三、交给现场检索的部分」整节不可用(租金水平 / 通勤时长 / 社保政策 / 业务线存活史全部拿不到)→ 这些格一律标 我推测的 并按单元格退出排序,整批升级为「答复前必问项」,并在「口径与假设」写一行「本次无联网检索」。⛔ 不许假装查过 |
| ⭐ 答复截止日(对方要你几号之前给答复) | ✅ 必需 | ⛔ 拿不到就明写「截止日未知」,不许默认成「还有时间」。 它是多处判据的输入:「要不要为还在流程中的那家拖延答复」的第 1 条判据要拿它当比较对象(没有它 → 那一条记 判不出来);「必问项问不到而答复截止已到」整节要靠它才触发(没有它 → 「来不及问」这件事在文件里彻底不可见)。⚠️ 它以前不在这张表里,于是两处判据都在引用一个从来没被要过的输入。⭐ 它有三档,⛔ 不是两档:已知(_月_日) / 未知 / ⭐ 结构上不存在 —— 见下面那一小节 |
| ⭐ 这些材料是什么时候写的 / 这些事发生在什么时候 | ✅ 必需 | ⛔ 只标检索日期不算。 缺了「材料日期」,「当时可不可知」和「现在是否属实」会被混成一件事 —— 实跑里三个案例都撞上这个,其中一个直接踩雷:最关键的那条公开信息公示于当事人的决策时点之后。见下面「材料日期 vs 检索日期」 |
| ⭐ 你的决策时点是哪一天(⭐ 三种,⛔ 不是两种:A · 正在做决定 = 今天 / B · 回溯 · 复盘 = 当时那一天、那件事已经结束 / ⭐ C · 决策在过去做出、但至今仍在继续 = 当初那一天,而那个决定今天还在过着、今天仍然动得了) | ✅ 必需 | ⚠️ 本模块默认时点是「正在做决定」,但它不是唯一形态。 不问出来并写进「口径与假设」,「公示晚于决策时点的信息不能用来评价当时的判断」这条纪律就没有判据可用。⭐ 它同时是一页纸第 ③ 块选哪种措辞的判据(A → 「这几天该做什么」;B → 「这一次已经定了的,和下一次要提前做的」;⭐ C → 「当初定的那件事,和今天还能动的那部分」)—— 见输出格式第 1 件 |
| ⭐ 你本人在不在场(能不能随时回答追问) | ✅ 必需 | 不在场(只有一份材料、没人可问)→ 走「⭐ 用户不在场」那一支:gate 的必要条件从材料里认定,整张 gate 表标 未经确认。⛔ 不许因为"没人可问"就跳过 gate —— 那会退回 无 gate 恒触发的死循环 |
⛔⭐ 答复截止日的第三档:结构上不存在(⛔ 旧版只有"已知"和"未知"两档)
⚠️ 旧版把"没有截止日"整个塞进了 未知,⛔ 而两者完全不是一件事:未知 说的是「有一个截止日,我还没问到」;⭐ 结构上不存在 说的是「根本没有一个在等你答复的对方」 —— 典型是「你想好了随时说」,或者本次决策的形态就是「还要不要待下去」(零个 offer + 有在职工作那一支)。
- ⭐ 判据字面:有没有一个具体的对方,在等你在某一天之前给一个答复? ⛔ 没有 →
结构上不存在;有、只是没问到 →未知 - ⭐ ⛔ 它不是"缺输入",它本身就是病灶 —— 没有截止日,决策会被无限推迟;而推迟不是"还没决定",⭐ 推迟就是选了默认选项(多数情况下是「留在原地」)。⚠️ 默认选项会替你做决定,而且做完不会通知你。
- ⭐ 处理写死:自己设一个。 写进「口径与假设」的答复截止那一格,并注明
这是你自己设的,不是对方给的 - ⭐ 并照着说一句(⛔ 不许省):「这件事没有人在等你答复,所以不会有任何时刻逼你决定 —— 也就是说,你不定,就是定了『不动』。我把 ×× 定成本次的截止日,⛔ 这不是对方给的。」
- ⭐ 下游照常用它:以答复截止日为输入的那几处判据(
未成 offer的判据 1 · 「必问项问不到而答复截止已到」),⭐ 拿你自己设的这个日期当比较对象,⛔ 不再记判不出来 - ⛔ 不许拿它去解除任何标记 —— 自己设的截止日到了,同样 ⛔ 不是解除四种标记的理由(同「答复截止到了不算解除理由」)
⭐ 最小可接受形态
三组数据:两个 offer + 你现在这份工作,每组只要「薪资结构 + 通勤时间」,就可以起步。
⚠️ 是三组,不是两组。 「留在原地」是写死的第 0 列(见第 0 件事),它缺了就没有机会成本、没有指数基准、也就没有翻转点——所以第一次问用户要数据时就要一次问三组,不要问完两个 offer 才想起来还有第三列。
万一「留在原地」这一组真的拿不到(比如用户目前没有在职工作):把指数基准换成两个 offer 里薪资结构更简单的那一列 = 100,并在「口径与假设」一节显式声明:本次无「留在原地」列,因此无法计算机会成本,排序只在给定的 offer 之间成立。⛔ 不许静默地把它当成不存在。
其余的 agent 自己现查、自己整理、自己标来源;实在拿不到的,写成「答复前你要问清的三条」,不猜。
⚠️ 另外三种常见形态(⛔ 都不许静默跳过)
① 只有一个 offer,且当前没有在职工作 —— 连基准列都没有
- ⭐ 基准列 = 那个 offer 自己 = 100,并在「口径与假设」明写:本次指数不承载任何比较含义,只是一个记账口径
- ⛔ 机会成本算不出来,就说算不出来。 ⛔ 不许拿"市场上一般的岗位""上一份已经结束的工作"或任何想象中的基准去补 —— 那是编的
- ⭐ 但本模块不因此失效,只是结论形态变了:只剩一列时,⭐ gate 才是全部价值所在 —— 它问的不是"哪个更好",而是「这个到底过不过得了你自己写下的线」,一个二值判定
- gate 照跑,四种标记(
gate 未通过/有条件满足(待闭合)/gate 待定/无 gate)照带 - 真实时薪照算,但它只用来和你自己写下的底线比,⛔ 不与任何虚构基准比
- 翻转点照写;「第 1 名最弱的一维」改写成「这个 offer 最弱的一维」,⭐ 五种合格答案照旧(含「本次没有第 1 名」与「你在乎的那几维上没有短板」两种)
- gate 照跑,四种标记(
- ⭐ 结论形态写死:从"排序"改成 接 / 不接 / 先补一条信息再定,并照着说一句:「本次没有可比对象,所以这不是一个排序结论,是一个 gate 结论。」
② 手上一个 offer,另一家还在流程中 —— ⭐ 这很可能是最常见的形态之一
⚠️ 「还在面、尚未成为 offer 的机会」旧版完全没覆盖:它进不进表?以什么身份进?写死如下。
- ⭐ 它进表,但不参与排序:单独一列,带
未成 offer标记- 为什么必须进表:⭐ 「等不等它」本身就是今晚要决策的事。 把它留在表外,用户拿到的排序会假装这个选择不存在
- 为什么不参与排序:它没有任何可落纸的条款,取值最多到
我推测的。⛔ 不许给它名次,哪怕是最后一名 —— 那等于给一个还不存在的东西发名次
- 那一列填什么:只填已经发生的事实(走到第几轮、对方说的下一步时间、岗位描述里写了什么),逐格标来源。⛔ 不许按"如果拿到,条件大概会是什么样"去填
- ⭐ 「要不要为它拖延答复」的判据 —— ⛔ 每条有三种取值,不是两种:⭐
成立/不成立/判不出来- 时间上够得着 —— 对方给得出的下一步时间点,够得上你手上这个 offer 的答复截止。⭐ 这一条要问出来,⛔ 不许推测:「你们大概什么时候能给结果?」是一句可以直接问出口的话
- ⭐ 没有提问对象时(离线 / 材料型输入 / 手上根本没有对方的联系人)→ ⛔ 不许推测,也 ⛔ 不许因此判
不成立→ 记判不出来 - ⚠️ 判据 1 还依赖「答复截止日」当比较对象(见「开跑前」输入表)—— 截止日未知时同样记
判不出来,⛔ 不许默认成"还有时间"
- ⭐ 没有提问对象时(离线 / 材料型输入 / 手上根本没有对方的联系人)→ ⛔ 不许推测,也 ⛔ 不许因此判
- 它有可能改变决定 —— ⭐ 判法写死:把它假想成"已经拿到、且条件与你手上第 1 名相当",看决定会不会变。⛔ 连"条件相当"都改变不了决定的(典型:它在某条必要条件上已经明确不满足),不值得为它拖
- ⭐ 手上没有第 1 名时,锚点写死怎么换(⚠️ 这一条旧版预设"存在第 1 名",而四种标记随时会让一列都排不了第一):四种标记导致没有一列能合法排第一 → 锚点换成「排在最前面的那一列」;手上只有一个 offer → 锚点就是它;⛔ 手上一个 offer 都没有 → 记
判不出来(没有任何可比对象,这一条问不出答案)
- ⭐ 手上没有第 1 名时,锚点写死怎么换(⚠️ 这一条旧版预设"存在第 1 名",而四种标记随时会让一列都排不了第一):四种标记导致没有一列能合法排第一 → 锚点换成「排在最前面的那一列」;手上只有一个 offer → 锚点就是它;⛔ 手上一个 offer 都没有 → 记
- 拖延的代价可承受 —— 把"延一天要付什么"写下来(要不要回去谈、影不影响入职时间)。⭐ 「再要一天」多数公司给得起,而要不要得到本身就是一个信号(与「必问项问不到而答复截止已到」同一条)
- ⭐ 三种收场写死(⛔ 旧版只有前两种):
- 三条全
成立→等 - ⭐ 任一条
不成立→不等(⛔ 与旧版一致) - ⭐ 一条都不
不成立,但有判不出来→ ⭐ 收场是判不出来,⛔ 不是不等,也不是等。写死三个动作:① 照"没有它"的样子先出一版排序(⛔ 不停下)· ② 把那条判不出来的判据写成「答复前必问项」的第 1 条(判据 1 → 「你们大概什么时候能给结果?」;判据 2 → 「我手上到底有没有一个能拿第一的选项?」先回去解决那个)· ③ 明写代价让用户自己签字(照「必问项问不到而答复截止已到」那四条)
- 三条全
- ⛔ 不许把
判不出来当成不成立。 那等于"我没人可问"直接判它不值得等 —— ⚠️ 而"没人可问"说的是你的处境,不是那家公司的 - ⛔ 不接受"万一它更好呢"作为拖延理由 —— 那是一个没有临界取值的假设,而本模块对假设的要求就是写出临界取值(见输出格式第 4 件)
- ⭐ 判
不等或判不出来时都在表下写一行「为什么」,⛔ 不许静默把这一列删掉
- 时间上够得着 —— 对方给得出的下一步时间点,够得上你手上这个 offer 的答复截止。⭐ 这一条要问出来,⛔ 不许推测:「你们大概什么时候能给结果?」是一句可以直接问出口的话
- ⭐ 它什么时候升级成正式一列:拿到录用通知之后(口头的按
你给的(口头说的)后缀处理)。那时去掉未成 offer标记,重跑一次
⛔ 「连流程都没开始」的机会:不进表
⚠️ 未成 offer 只覆盖「还在流程中」,⛔ 不覆盖「连流程都没开始」 —— 一个还没投、只是在考虑的方向,旧版没有位置,于是它要么被硬塞成一列,要么整个消失。
- ⭐ 判据是纯字面的:有没有一件已经发生的事(投了 / 约了 / 面了 / 对方说过下一步时间)。一件都没有 → ⛔ 不进表
- 理由:
未成 offer那一列的填表判据本来就是「只填已经发生的事实」—— 而这里一件都填不出。硬塞进去只会得到一整列我推测的,⛔ 那不是信息,是占位 - ⭐ 它的正确去处是「这几天该做什么」里的一条动作(例:「今天投 ××,问一句他们的流程要几周」),⛔ 不是表里的一列
- ⛔ 也不许拿它去凑第二列 —— 见下面「零个 offer + 有在职工作」那一支
③ ⭐ 零个 offer,但有在职工作 —— ⛔ 这一形态旧版完全没覆盖
⚠️ 旧版覆盖了"一个 offer 无在职"和"一个 offer 另一家在面",缺的正是这第三种。 后果很硬:六件必需产出里有三件失去了对象(③ 排序结论 · ④ 翻转点 · ⑤ 第 1 名最弱的一维),⛔ 而模板对这三件都写着「不许留空」 —— 于是执行者要么留白违规,要么硬编一个不存在的名次。
- ⭐ 这不是"没得跑",是一次单列体检:表里只有第 0 列「留在原地」,⭐ gate 照跑 —— 它问的是「你现在这份工作,过不过得了你自己写下的线」,一个二值判定(与形态 ① 同构,只是那一列不是 offer)
- ⭐ 指数基准仍是「留在原地」= 100,并照着写一句:本次指数不承载任何比较含义,只是一个记账口径
- ⭐ 三件失去对象的产出,各给一个写死的替代形态(⛔ 不许留空,⛔ 也不许硬编一个不存在的名次):
| 六件里的 | ⭐ 零个 offer 时写什么 |
|---|---|
| ③ 排序结论 + 每一名与下一名差在哪一维 | ⭐ 改成「留在原地」这一列的 gate 结论:过 / 不过 / 哪一条还没判出来。⛔ 不出名次(只有一列,没有"下一名"),并照着说一句:「本次只有一列,所以这不是一个排序结论,是一个 gate 结论。」(与形态 ① 同一句) |
| ④ 翻转点 | ⭐ 改成「什么变了,你就该开始看外面」:每条照旧写全五段,只是最后一段从"排序会怎么翻"改成 —— ⭐ 取到这个值时「留在原地」就不再过 gate。⛔ 不许因为"没有排序可翻"就写"无翻转点"完事 —— 翻的对象换了,临界取值照样存在 |
| ⑤ 第 1 名最弱的一维 | ⭐ 改写成「留在原地最弱的一维」,三段照写,⭐ 五种合格答案照旧(含「本次没有第 1 名」与「你在乎的那几维上没有短板」两种)(与形态 ① 的改写同构) |
- ⭐ ① 一页纸、② 横向对照表、⑥ 决策分离结论三件不变,只是表里只有一列;⭐ 一页纸的第一句形状改成:「你现在这份工作过得了 / 过不了你自己写下的线,缺的那一件是 ××。」
- ⛔ 不许把「还在考虑但没投的方向」补进来凑第二列(见上一小节)—— 那一列填不出任何已经发生的事实
⭐ 一致性自查(⛔ 在开始算之前跑一次)
⚠️ 实跑撞到的形态:材料里一处事件日期晚于答复截止日 —— 用户自己写岔了、记错了,或者两处来源打架。⛔ 框架里没有任何位置处理"材料自己前后对不上",于是执行者只能去借「两套都跑 + 显式声明」那个模式,⚠️ 而那个模式是为「外部事实不确定」设计的,⛔ 不覆盖「材料自我矛盾」。
⚠️ 这一条与「材料日期 vs 检索日期」是并列的两条纪律,⛔ 不许混成一条:
| 纪律 | 它管的是 |
|---|---|
| 材料日期 vs 检索日期(见第三节) | ⭐ 材料与外部世界的关系 —— 这件事公示于什么时候、当时可不可知 |
| ⭐ 一致性自查(本节) | ⭐ 材料与它自己的关系 —— 同一份材料里两处对不上 |
- ⭐ 检查什么(三项,⛔ 一项都不许省;逐项在「口径与假设」里写「无冲突」或写冲突原文):
- ⭐ 日期先后:事件日 vs 答复截止日 vs 材料日 —— 有没有哪一组的先后关系说不通(典型:某件事的日期晚于答复截止日,却被当成决策依据)
- ⭐ 同一件事在两处的取值是否一致:同一条条款 / 同一个工时 / 同一条必要条件,在两处写的不是一个值
- ⭐ 相对量的基准是不是同一个:「高一成」「少一半」这类说法,两处是不是拿同一列当基准(⛔ 基准不同的两个相对量不可比,同「同一份表里所有列必须用同一种通勤口径」)
- ⛔ 发现冲突时的三条禁止:⛔ 不许自己挑一个用 · ⛔ 不许静默取平均 · ⛔ 不许因为"看起来是笔误"就替用户改掉
- ⭐ 用户在场 → 把冲突原样念回去(⛔ 不许改写成你自己的话):「你这里写 ××,那里写 ×× —— 哪个对?」 拿到答复再往下算
- ⭐ 用户不在场时(材料型输入,没人可问)→ 两种读法都跑:
- 两种读法指向同一结论 → ⭐ 正常输出,并附一句:「这一处你的材料前后对不上(这里写 ××,那里写 ××),但两种读法的结论相同。」
- ⭐ 两种读法指向不同结论 → ⭐ 这就是本次最该先解决的事:写进输出最前面(一页纸第一段;人话译法见输出格式第 1 件的译法表),⛔ 不许埋在下面某一节里
- ⚠️ 它借的不是「两套都跑」那个模式的理由,只是它的形状:那个模式处理的是外部事实不确定(
事后重构的必要条件 / 被覆盖的误差带 / 换一种通勤方式),这里处理的是材料自我矛盾。⛔ 两者的声明句不许混用
- ⛔ 自查跑没跑过要留痕:「口径与假设」里那三行空着 = 没跑过。⛔ 不许因为"本次没冲突"就把它整块删掉 —— 删掉之后,「跑过且无冲突」和「根本没查」在文件里长得一模一样(同「①② 的对照表不许整块删掉」)
⛔ 四条禁止(这一节是对 agent 说的)
- 不许报错退出。 输入缺、格式乱、只有半句话,都不是停下的理由。缺什么就明确说「你至少给我 X」,然后用手上有的先跑一版
- 不许静默自己编。 任何你没被告知、也没查到的取值,一律标
我推测的,并且不参与排序。⛔ 不许把推测混进表里当事实 - 不许一次只问一个问题挤牙膏。 需要补的东西一次问完(最多两轮)。先用已有信息出一版带「待确认」的排序,再让用户一次补齐
- 不许把该你自己做的整理工作推给用户。 用户散着贴来的 offer 条款、聊天记录截图转述、语音转文字,你负责整理成表。⛔ 不许说「请先按模板填好再给我」
⭐ 提前预告:本模块有三套独立的标签体系,别混用(完整定义见「来源标注」节)
⚠️ 下一步(第1步·过gate)第一张表就要用到其中一套,所以提前放在这里,不等到全文后段才说。
| 体系 | 枚举 | 贴在什么上 |
|---|---|---|
| 来源标注 | 你给的 / 公开可查 / 我推测的 | 对照表里的每一格取值(gate 表也算) |
| 参数来源等级 | 实践校准 / 默认建议值 / 纯占位待校准 | 「口径与假设」里的每个参数 |
| 证据等级 | 合同白纸黑字 / 面试口头 / 公开记录 / 自己估算 / 未验证 | 翻转点里的每条假设 |
三套互不换算、互不覆盖——一个取值可以同时挂三套里的各一个标签。这里只给你先认个脸熟,完整判据(比如 我推测的 具体怎么处理、未验证 什么时候用)见后面「来源标注」节。
一、最小路径(四步跑完 + 一版带待确认标记的排序)
先跑完这四步,再考虑要不要往下深潜。
⭐ 最小路径的承诺是一条产出边界,不是一个分钟数。
最小路径 = 四步跑完 + 一版带待确认标记的排序。
展开就是:第 0 列 + 二值 gate(满足 / 不满足)+ 一维真实时薪 + 一句排序 + 六样必需产出(允许带待确认标记)。 这些跑完就算跑完了。
⚠️ 上一版承诺"10 分钟",那是错的,本版撤掉。 撤掉的理由不是"实测更久",而是文件自己就把它证否了:上一版给四步各写了分步预算,相加正好把 10 分钟占满 —— 也就是说它在被写下来的那一刻就已经零余量,任何一处对照被触发都必破。一个自己算出来就已经占满的分钟数,是在承诺一件文件自己证否的事。 所以本版一律不给最小路径写分钟预算。
⛔ 下面这些一律不在最小路径里,全部划入深潜
划入深潜的 最小路径里怎么处理(⛔ 不许当场跑,也 ⛔ 不许静默省掉) 必要条件是 事后重构→ 含它 / 不含它两套排序该条标 事后重构,该列在这条上标gate 待定挂起到深潜(冷启动场景例外,见第 1 步)「有条件满足」这一档与它的闭合性判据 最小路径的 gate 只判满足 / 不满足两档。 判不出这两档的(包括本该判「有条件满足」的),一律标 gate 待定挂起换一种通勤方式会改变 gate 判定 → 两种都跑 按更慢的那一种判(保守缺省,见第 1 步),并标 gate 待定挂起三点采样与交互项 参数按默认值先算一版,并在「口径与假设」写一行「本次未做三点采样,这是初版排序」 误差带的跨维裁决 最小路径只有一维,没有"下一维"可换,所以不做跨维裁决。⚠️ 但误差带本身仍必须在「口径与假设」里报出本次取值 + 声明轮次 —— 它是"这一维分不分得出来"的判据,最小路径照样要用 为什么选这条修法(把对照移进深潜),而不是"保留对照、承认最小路径不是一件快事"
两条路都能修掉"承诺与实际不符"。选前者,是因为后者等于把一批已知会被触发的重活,留在"最快见效的那条路"上 —— 而这条路的用户特征恰恰是「今晚就得答复、第一次用这个模块」。把重活留在那里,实际结果不是他跑完,是他跳过。 移进深潜之后,这些情形在最小路径里不是消失,是变成一个可见的
gate 待定标记 + 一句"这一条要往下深潜才能定" —— 用户知道自己欠了什么,而不是拿到一版看起来已经跑完了的排序。⛔ 反过来也成立:进了深潜,触发了就得跑。 跑不完就明说"这几套对照我没跑,结论的把握程度因此下降",不要静默省掉。深潜要花多久取决于你手上有几条待确认的假设 —— 深潜没有时间承诺,也不该有:给一个"深潜也只要二十分钟"的数字,等于逼着执行者跳过对照。
第 0 件事:把「留在原地」加成一列(写死,不许省)
「留在原地」不是「不做决定」,它是第三个候选项,和别的 offer 一样有真实时薪、有发展空间、有下行风险。用户不主动提,你也要加上;用户说「我肯定要走」,你仍然加上——它是机会成本的基准,删掉它整个排序就没有参照系。
第 1 步 · 过 gate
⭐ 先看这里,再往下读:本步骤按"你的情况分支"组织,不要求从头顺序读完——多数小节前面已经标好触发条件(工作区有没有
positioning.md/ 用户在不在场 / 输入是材料还是当面写下的),只读命中你实际情况的那几条。⭐ 唯一被明确划给"深潜"、最小路径可以直接跳过的是本步骤末尾「有条件满足」的闭合性判据——最小路径只判「满足 / 不满足」两档,遇到疑似"有条件满足"的情况,标gate 待定挂起即可,不用现在判定。
⭐ 第一个动作不是"让用户写",是"先看工作区有没有 positioning.md"
⛔ 不许一上来就从零重问必要条件。 先看工作区里有没有 positioning.md(求职方向定位的产出物):
- 有 → 直接读它,把里面的条件原样接过来
- ⭐ 写下时点按那个文件里记的写下日期判,⛔ 不按"他今天跟你说的时间"判。一条用户几周前手写下来的真·事前条件,被你当场重问一遍,时点就变成今天,进而被降级成
事后重构—— 那不是在核验,那是在当场把一条真事前条件毁掉 - ⛔ 文件里没记写下日期时,也不许默认按今天算:按「说不清」处理(→ 按事前算,见下面的保守缺省)
- ⭐ 写下时点按那个文件里记的写下日期判,⛔ 不按"他今天跟你说的时间"判。一条用户几周前手写下来的真·事前条件,被你当场重问一遍,时点就变成今天,进而被降级成
- 没有 → 才要用户现在写下 2-3 条必要条件(不满足就不去)。写不出来就给他这三个提示:上一份工作最后让你决定离开的是什么? / 哪一条你答应了自己再也不将就? / 哪一条如果三年后回头看会觉得当初不该让步?
⭐ gate 的输入通道有三条,⛔ 不是两条(按顺序试,前一条不成立才试下一条)
⚠️ 这是上一轮 gate 从没跑起来的根因,而它此前被误判成"回溯场景的固有限制"。 旧版只有两条通道 —— ① positioning.md、② 让用户当场写 —— ⭐ 两条都要求"用户在场"。于是任何离线 / 转述型 / 材料型输入,最多只能走到 无 gate:⚠️ 它对所有材料型输入给同一个结论,因而与一条坏掉的规则无法区分。 补第三条:
| # | 通道 | 判据 | 条件的写下时点按什么算 |
|---|---|---|---|
| 通道 1 | positioning.md | 工作区里有这个文件 | ⭐ 按文件里记的日期(见上一小节) |
| 通道 2 | 用户当场写下 | 用户在场,且写得出 | 今天 → 冷启动分支(必然 事后重构) |
| ⭐ 通道 3 | ⭐ 从用户已有的书面材料里认定 | 见下面的字面词表 | ⭐ 按那份材料的日期,⛔ 不按今天 |
⭐ 通道 3 的提取判据:看那句话里有没有排他性措辞,⛔ 不看"你觉得他在意什么"
⚠️ 判据必须是字面的,⛔ 不能靠 agent 体会。 用户在自述 / 聊天记录转述 / 已有书面材料里出现下面这类措辞的那一句,可以提取为候选必要条件:
A · 禁止型(书面/正式表述里最常见) 「我不可能……」· 「这个不行」· 「必须要……」· 「一定要……」· 「没有 ×× 我就不去」· 「再也不……」· 「绝对不……」· 「受不了……」· 「底线是……」
⭐ B · 排序型 / 拒绝型口语(2026-08-31 补 —— 这一组才是人说话时最常见的形态) 「不是 ××,是 ××」(把某维踢出比较,同时点名真正的那一维)· 「×× 无所谓,先保 ××」· 「×× 我认了,但 ×× 不行」· 「××(一旦发生)我就 ××」(把两件事绑成连锁)· 「和我现在的处境不是一回事」(宣告某个参照系不适用)· 「再多 ×× 也换不了 ××」· 「我可以 ××,但前提是 ××」
⚠️ 为什么必须补 B 组:一次回归实测里,材料中语义上最强的四句排他性表达,一句都没命中 A 组 —— A 组更像书面誓言,而真人在语音自述/聊天记录里说的是 B 组这种排序型口语。 ⭐ 后果很具体:通道 3 零命中 → gate 表全空 → 触发
无 gate→ 而「上位出口」的前置是"存在一条硬约束",于是它结构性地够不着,一次都触发不了。 ⛔ 两条规则串联,靠前那条太窄,靠后那条就永远是死的。
⛔ 词表之外的句子不许提取。 「我比较喜欢 A」「我觉得 B 那边更有意思」这类是偏好,它的去处是加分条件表,⛔ 不是 gate。
⛔⭐ 自我说服自查(⛔ 通道 3 提取之后、进 gate 表之前跑一次,⛔ 一次都不许省)
⚠️ 这是补 B 组词表带来的副作用,必须一起补掉。 补 B 组是为了让通道 3 能命中真人口语 —— ⭐ 而真人最常用「不是 A,是 B」「××无所谓先保××」这种句式的时刻,恰恰是在说服自己。于是提取出来的"底线"很可能就是他那段自述的结论。⭐ 等于拿一个人的结论去检验他的结论。 ⚠️ 实跑里有一份材料的最后一句正是「你说我是不是在给自己找理由」—— ⛔ 框架结构性地答不了。
⭐ 判据必须字面,⛔ 不许靠 agent 体会"他是不是在自我说服"。 数两样:
第一样 · 数每条候选条件"照顾"的是哪一列
- ⭐ 对每一条候选条件,先逐列判一次「满足 / 不满足」
- ⭐ 只有一列判满足 → 记它指向那一列;判满足的不止一列,或一列都不满足 → 记
不指向任何一列,⛔ 不参与下面的计数 - ⭐ 分别指向不同列 → 正常走,⛔ 不标记
- ⭐ 全部指向同一列 → 进第二样
第二样 · 那一列是不是他自述里字面倾向的那个
- ⭐ 判据同样字面:材料里有没有一句字面指向那一列的倾向表达 —— 「我想去 ××」·「我更倾向 ××」·「我基本上定了 ××」·「你说我是不是在给自己找理由」这类
- ⛔ 没有这样一句 → 不标记(⛔ 不许靠"感觉他倾向那边"补上)
- ⭐ 两样都成立 → 那几条候选条件整组标
可能是自我说服
⛔ 标了 可能是自我说服 之后怎么办(⛔ 不是作废,是降级 + 说破)
- ⛔ 不许单独触发上位出口 —— ⚠️ 哪怕用户不在场也不许(下面那条"用户不在场可以触发上位出口"的例外,⛔ 对标了本标记的条件不适用)
- ⭐ 必须原话回读,并且问一句写死的话(⛔ 不许改写成你自己的话):
「你说的『××』『××』『××』三条都指向同一个选择。这可能是你真的有这三条底线,也可能是你已经想好了要去哪一家,正在给这个决定找理由。—— 哪一种?」
- ⭐ 用户回答"是我的底线" → 标记去掉,按
待你确认的正常路径走(确认了就转正常必要条件) - ⭐ 用户回答"我是在找理由" → 这几条移到加分条件表,⛔ 不许留在 gate 里;⭐ 并照着说一句:「那这一次真正要定的不是『去哪一家』,是『你到底想不想去那一家』—— 这件事我算不出来。」
- ⭐ 用户不在场(没人可问) → 结论照出(⛔ 不许因此停下),⭐ 但必须带一句写死的声明,⛔ 不许省:
「⚠️ 我认定的这几条底线全部指向同一个选项。我没法判断这是你的底线,还是你已经做了决定之后给它找的理由 —— 这一点只有你自己知道。」
- ⭐ 同时把它写进翻转点,临界取值就是「这几条到底是底线,还是找出来的理由」(二值)
为什么这样是对的:本模块对付"不可验证的用户自述"一贯的解法就是 —— ⭐ 不替他裁决,而是把结论对它的依赖显式暴露出来(事后重构两套都跑 / 误差带覆盖两套都跑 / 通勤方式两套都跑,都是这个形状)。 这里同样:⛔ 框架答不了"你是不是在给自己找理由",但它可以把这个问题原样递回去,而不是假装自己没看见。
⭐ 提取出来的必须回读确认,确认前标 待你确认
⚠️ 这里有一个真实的两难,⛔ 两头都不能选:提取并直接当成必要条件 = agent 替用户立法;不提取 = 明明有信息却判「一条都没有」。⭐ 待你确认 就是这两者之间的那一档 —— 它让条件进表并起作用(因而不再是 无 gate),同时明写它不是用户亲口立的法(因而 agent 没有替他立法)。
- ⭐ 候选条件照进 gate 表,那一格标
待你确认,并回读一句:「你说过『××』—— 我把它当成一条必要条件,对吗?」 - 用户确认 → 转成正常必要条件,⭐ 写下时点按那份材料的日期判(与
positioning.md同一条规则) - 用户否认 → 从 gate 表移走,改进加分条件表。⛔ 不许留在 gate 里
- 用户没回答 / 用户不在场 → ⭐ 保持
待你确认,走下一小节 - ⛔
待你确认的条件判出「不满足」时,缺省 ⛔ 不许直接判出局 —— 改判gate 待定(留在排序里、不能排第一)。⚠️ 理由与「推测在 gate 上不能踢人」同源:一条用户没确认过的底线,不该由 agent 拿去踢掉一个选项- ⭐ ⛔ 但这条缺省有一个例外,判据是「那一格的取值有多硬」 —— ⚠️ 判「不满足」靠的若是用户本人原话那种硬格,它就可以踢人(全文见下面两小节)。⭐
待你确认标的是「这条底线是不是他的」,⛔ 它没有标「这一列在这条上到底成不成立」
- ⭐ ⛔ 但这条缺省有一个例外,判据是「那一格的取值有多硬」 —— ⚠️ 判「不满足」靠的若是用户本人原话那种硬格,它就可以踢人(全文见下面两小节)。⭐
- ⭐ 反方向 ⛔ 没有例外:
待你确认的条件判出「满足」一律 ⛔ 不发通行证 —— 同样是gate 待定。⭐ 踢掉一个选项,和抬高一个选项,需要的把握不一样(见下面「方向不对称」)
⛔⭐ 例外:待你确认 可以踢人 —— 判据是「那一格的取值有多硬」,⛔ 不是「用户在不在场」
先说这条为什么必须有 —— 不加它就会出现这个死循环:
上位出口要求「已确认的不可闭合必要条件判为不满足」; 而通道 3 提取的条件一律
待你确认、确认前不能踢人; ⇒ 材料型 / 回溯型输入永远出不了强结论。
⚠️ 这与本文自己诊断过的那条同型:两条规则串联,靠前那条太窄(或太紧),靠后那条就永远是死的。修了词表让通道 3 能命中,如果这里不放行,上位出口仍然一次都触发不了。
⚠️ 这一节上一版的判据挑错了维度:它写的是「用户在不在场」。 一句话说破:
⭐ 拿"他没确认这是他的底线",去挡住"他自己说了这件事不成立" —— 挡错了对象。
掰开说 —— ⭐ 一条 gate 判定有两个部分,它们的不确定性完全不同:
| 是什么 | 确定吗 | |
|---|---|---|
| 条件 | 「我要 ××」 | ⚠️ 是我从你材料里认定的,你没确认过 |
| ⭐ 那一列在这条上的取值 | 「这一列没有 ××」 | ⭐ 可能非常硬 —— 有时就是用户本人白纸黑字说的 |
⭐ 待你确认 标的是左边那栏。 ⛔ 而旧规则拿它否掉了整行,连右边那个硬事实一起否掉了。
⚠️ 实跑里的两个形状(⛔ 不写公司名 / 人名):
- 一个人自己说「我到三十岁手里得有能拿出来给外人看的东西」,而另一列他自己说「那边没有能拿出来看的东西」—— ⭐ 后半句是他自己说的,不是 agent 猜的
- 一个人自己说某条路「外面对不上」—— ⭐ 同样是他本人的判断,不是 agent 的外推
例外的适用条件(⭐ 四条同时成立,纯字面):
- ⭐ 那一列在这条条件上判「不满足」,其依据是
你给的的硬格(用户本人原话)—— ⛔ 不是我推测的、⛔ 不是外推、⛔ 不是空格 - ⭐ 那个依据指向的是这一列自身 —— ⛔ 不是「我觉得这个行业不行」这种笼统判断
- 那条
待你确认的条件来自通道 3,且原话在材料里逐字可引;它是不可闭合类(没写闭合上限 → 按不可闭合,见前文) - ⭐ 它没有被标
可能是自我说服(见上一小节)—— ⚠️ 标了就不许走这条例外:那几条候选条件全部指向同一列,而那一列正是他自述里倾向的那个,⛔ 拿它去发一张出局判决,等于用他的结论去检验他的结论
⭐ ⛔「用户在不在场」不再是适用条件。 用户在场时同样适用 —— ⭐ 他在场只意味着你应该顺便问一句,⛔ 不意味着在他回答之前你什么都不能说。
⛔⭐ 方向不对称:这个放行只对"不满足"一个方向有效(⛔ 别漏,也别当成笔误)
| 判成 | 能不能 |
|---|---|
| ⭐ 不满足 | ✅ 可以踢出去 —— 因为踢它的那个事实是硬的 |
| 满足 | ⛔ 仍然不发通行证 —— 一个没被确认过的条件,凭什么给谁发通行证?那一格照旧 gate 待定、不能排第一 |
⭐ 踢掉一个选项,和抬高一个选项,需要的把握不一样。 ⛔ 前者只要这一条上它确实不行;后者要这条底线确实是你的底线 —— 而后面这件事,只有你能确认。
成立时怎么做:
- ✅ 允许它触发上位出口,出结论、出名次
- ⭐ 但结论必须带一句写死的声明,⛔ 不许省:
「这个先后建立在一条我从你自己的话里认定、但你还没确认过的底线上 —— 原话是『××』。如果这条不算你的底线,整个先后可能翻过来。」
- ⭐ 同时把它写进翻转点,临界取值就是「这条底线算不算数」(二值)
- ⭐ 用户在场时额外加一个动作:把回读那句话(「你说过『××』—— 我把它当成一条必要条件,对吗?」)写进「这几天该做什么」的第一条 —— ⛔ 但不因此推迟出结论
为什么这样是对的:本文对付"不可验证的用户自述"一贯的解法就是 —— ⭐ 不替他裁决,而是把结论对它的依赖显式暴露出来(事后重构两套都跑 / 误差带覆盖两套都跑 / 通勤方式两套都跑,都是这个形状)。 这里同样:不是"替他立法",是「按你自己说过的话往下走一步,并且告诉你这一步踩在哪句话上」。 ⛔ 而"什么都不敢说"并不比它更安全 —— 它只是把不确定性留给了用户,同时不给他任何可动的东西。
⭐ 用户不在场(只有材料,没人可问)—— ⛔ 它和「冷启动」不是同一件事
⚠️ 框架此前把这两件事混为一谈,全文没有一处区分它们,于是只有前者有处理。 写死区分:
| 用户在不在场 | 条件从哪来 | 降级路径 | |
|---|---|---|---|
| 冷启动 | ⭐ 在场,只是第一次用,条件是现写的 | 通道 2 | 全部标 事后重构 → 只跑两套(含全部 / 一条都不含)→ gate 只起暴露作用 |
| ⭐ 用户不在场 | ⛔ 不在场(回溯 / 复盘 / 手上只有一份材料) | ⭐ 只能走通道 3 | 候选条件照提取、照进表,整张 gate 表带表级标记 未经确认,并写在输出最前面 |
- ⛔ 不许因为"用户不在场"就跳过 gate。 跳过就回到
无 gate恒触发那个死循环 —— ⭐ 补上通道 3 之后,无 gate才可能真的有区分力(在真的一句排他性措辞都没有的材料上才触发) - ⭐ 表级标记
未经确认的执行动作:这句话必须出现在一页纸的第一段,人话版照着说 —— 「下面这几条底线,是我从你写下的材料里挑出来的,你还没确认过。如果有一条不是你的意思,顺序可能就变了。」(⚠️ 这句话里不含任何禁用词,⛔ 不受一页纸禁用词表阻挡) - ⭐
未经确认解除的只有无 gate这一个标记 —— 因为 gate 表不再是空的。⛔ 它不解除任何别的限制:各列仍按各自 gate 结果带gate 未通过/gate 待定 - ⭐ 解除方式:用户本人确认(哪怕只确认一条)→ 那一条去掉
待你确认,按写下时点正常判定
⚠️ positioning.md 有三类字段,本模块的 gate 只有两类,第三类必须有一个接收位:
positioning.md 里的 | 在本模块落到哪 |
|---|---|
| 必要条件 | gate 的 N1-N3,走下面全套判定(满足 / 不满足 / 有条件满足) |
| 加分条件 | 加分条件表 —— 不构成出局,也不构成通行证 |
| ⭐ 硬性排除条件 | 也进 gate,但它的语义是「短路」:⭐ 命中即出局,⛔ 没有「有条件满足」这一档,⛔ 不许降档、不许用代价换、不许摊销 |
⭐ 硬性排除与必要条件的区别就在这一点:必要条件里有一部分是可闭合的(付得起代价就能消除),而硬性排除永远不可闭合 —— 它写下来的时候就已经说明"这件事发生了我就不去",不是"这件事发生了我要花多少钱去补"。⛔ 把硬性排除塞进「有条件满足」那条通道,等于把 gate 上最硬的一条变成最软的一条。
⭐ 冷启动场景:第一次用本模块的人,他的必要条件必然是"事后重构"
判据是纯字面的:工作区里没有 positioning.md、也没有任何更早的书面记录,而 offer 已经在手上 —— 这种情况下那几条必要条件必然是刚刚在这次对话里写出来的,也就是必然是事后重构。
- ⛔ 不要逐条去问"这条是收到 offer 之前写下的吗"。答案结构性地已知(一个诚实的用户只会答"不是"),问了只是浪费一轮,还会让他以为自己答错了什么
- ⛔ 更不要把 2-3 条各跑一套"含它 / 不含它" —— 那是二的 n 次方套对照,工作量翻倍而约束力一点没换来(结论照样交回用户裁决)。⭐ 一次性按"全部条件都是事后重构"处理,只跑两套:含全部条件的一套 / 一条都不含的一套
- ⭐ 然后一次性说明这意味着什么(照着说,别改):「你这几条是刚写的,所以这一次 gate 只能起暴露作用,起不到约束作用 —— 它能告诉你『你的结论有多依赖你刚写下的这几条』,但它挡不住你。」
- ⭐ 紧接着给出正面价值(这一句同样别省):「这一次 gate 的作用是把你的底线写下来;下一次它才开始约束你。」 并指向入职前存档(
offers.md末尾,见输出格式可选的第 7 件)—— ⭐ 现在存进去,下次它就是事前的了 - ⭐ 这一支留在最小路径里,⛔ 不划入深潜。 理由有两条:① 它只有两套(含全部 / 不含全部),不是二的 n 次方套,成本可控;② 如果把它当成一般的
事后重构挂起成gate 待定,冷启动场景下每一条都会待定 → 永远没有一列能排第一 —— 那不是暴露问题,那是把模块瘫痪掉
⚠️ 这一小节为什么必须写在这里:本模块的 README 把它推为"全仓最独立、可冷启动直接开跑"的模块 —— 于是最被推荐的用法,恰好是 gate 最弱的用法。不说破这一点,用户会以为自己刚过了一道 gate,而实际上他刚给自己发了一张通行证。
⚠️ 先问一句:这几条是什么时候写下的(只适用于接续场景)
⚠️ 本小节只适用于接续场景 —— 有
positioning.md,或有更早的书面 / 口头记录。冷启动场景见上一小节:答案已知,⛔ 不必逐条问。
必要条件的全部约束力来自它写在你看到这些 offer 之前。所以第一步是问:这几条,是你在收到 offer 之前就写下的吗?
| 回答 | 怎么处理 |
|---|---|
| 是(有更早的笔记 / 更早跟人说过) | 正常必要条件,走下面的 gate |
| 不是,是现在才想的 | ⚠️ 标注 事后重构,仍然进 gate,但必须两套都跑 + 显式声明差异(见下) |
| 说不清 / 记不清(「大概那会儿就有这个想法」) | ⭐ 按事前算(保守缺省)。⛔ 不许当成「不是」 |
⭐ 「说不清」为什么缺省偏向事前:本节自己的论证是「门槛可以被当场裁剪,gate 的全部约束力就是这么消失的」。既然这一格的取值无人可验证,缺省就必须偏向保留约束——否则「记不清了」会变成一句零成本的万能解除键。
⛔ 事后重构的必要条件:不降级,改成「两套都跑」
⚠️ 旧版的做法(降级为加分条件、⛔ 不构成出局判定)是错的,别再那么做。
那条规则的激励方向是反的。它假设用户想让事后条件算数,所以「降级」是惩罚。但真实场景常常相反:用户心里已经想去 A,而 A 违反了他一条不可闭合的底线——他不需要裁剪任何条件,只要在被问的时候答一句「不是,是现在才想的」,那条底线就被降级、gate 就空了,A 合规进入排序并拿第一。降级正是他要的结果。 而这一格无人可验证,且说谎方向单一有利。
改成这样:
- 事后写下的必要条件标注
事后重构,仍然进 gate,照常做满足 / 不满足 / 有条件满足判定 - 同时跑两套排序:含这条的 / 不含这条的
- 两套结论相同 → 正常输出,并附一句「这个结论不依赖那条你事后才想起来的条件」
- 两套结论不同 → ⭐ 必须显式声明:「你的结论取决于一条你事后才想起来的条件 —— 它是 X。在往下走之前,先决定这条到底算不算你的底线。」⛔ 不许自己替用户裁决,⛔ 不许静默按其中一套输出
为什么是这条设计:一个无法验证的输入,不该被用来自动放行或自动拦截;它该被用来暴露「结论有多依赖它」。 这与本模块的翻转点是同一条设计——你无法验证一个假设,但你可以把结论对它的依赖显式摆出来,交给用户裁决。
⭐ 顺手让用户现在就为下一次写一版(存进 offers.md 末尾的入职前存档),下次它就是事前的了。
然后逐列判定,只有三种结果
| 判定 | 怎么处理 |
|---|---|
| 满足 | 进排序 |
| 不满足 | ⛔ 直接出局,不进排序。 在表下写一行「为什么出局」,就完了 |
| 有条件满足 | 只在可闭合的必要条件上成立,见下。写清楚是什么条件、要做什么才能闭合、闭合要付什么代价(代价进「生活成本」)。闭合不了就按「不满足」处理。⛔ 进排序后带 有条件满足(待闭合) 标记且不能排第一,见下 |
⭐ 最小路径只判前两种(满足 / 不满足)。 第三种「有条件满足」及其闭合性判据属于深潜 —— 最小路径里遇到本该判这一档的,标 gate 待定 挂起(见第一节)。
⛔ 来自 positioning.md 的硬性排除条件不走这张表:它的语义是短路 —— 命中即出局,⛔ 没有「有条件满足」这一档,也不许降档。
⛔ Gate 判定格也要标来源,且 我推测的 两个方向都不生效
横向对照表每一格都强制写成「取值 + 来源标注」,我推测的 ⛔ 不参与排序。gate 表以前没有这一列——这是个洞:「A 满足 N1」这一格可以整格是你自己推测的,而且不可见;而这一格决定的是谁出局,权重比排序表里任何一格都大。
所以 gate 表每一格同样写成「判定 + 来源标注」(你给的 / 公开可查 / 我推测的),并写死两条:
-
⛔ gate 判定格标
我推测的时,不许据此判出局。 必须先把它升级成「答复前必问项」里的一个具体问句;拿到答复之前,该列在这条必要条件上按未判定处理——留在排序里并标gate 待定,⛔ 不许静默按满足或按不满足处理 -
⛔ 反方向同样不生效:也不许据一个
我推测的格判「满足」而发一张通行证。推测在 gate 上既不能踢人,也不能放人 -
⭐ 「不能放人」的执行动作,和「不能踢人」一样写死(旧版只给了「不能踢人」的执行动作 —— 留在排序里、标
gate 待定;「不能放人」一个执行动作都没有,于是它只是一句话):⭐ 带
gate 待定标记的那一列,不能排第一。- 与「不能踢人」严格对称:不能踢人 = 留在排序里;不能放人 = 不能拿第一
- ⛔ 因此
gate 待定与gate 未通过/有条件满足(待闭合)/无 gate(见下一小节)并列 —— 四种标记全部不能排第一,⛔ 没有哪一种是例外 - 为什么必须补这一条:不补就会出现一个明显反常的不对称 —— 必要条件状态"未知"的那一列能赢,而必要条件"已知违反"的那一列(典型是「留在原地」)反而不能赢。 于是"没问到"比"问到了并且没通过"更有利,而两者之间的差别只是有没有人去问过。⛔ 一个奖励"少问一句"的 gate,方向是反的
- ⭐ 解除方式与另外两个标记同构:那一格从
我推测的升级成你给的或公开可查(= 答复拿到了)之后,标记去掉、限制解除。⛔ 答复截止到了不算解除理由(见「必问项问不到,而答复截止已经到了」)
⛔ 第四种标记:gate 表整个为空 → 无 gate
⚠️ 上面三种标记管的都是「某一格没判出来」,而实跑里最常见的一种是「一条必要条件都没有」 —— 用户当场给不出,工作区里也没有 positioning.md,于是 gate 表整张为空。
⭐ 反常就在这里:「整个没有 gate」比「某一格没问到」还宽松,而它旧版连一个标记都没有 —— 于是最松的那一种情形反而畅通无阻,三种标记拦住的全是比它更严的情况。⛔ 这和「奖励少问一句的 gate」是同一个方向错误,只是更彻底:这一次连问都没有问。
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 61
- Forks
- 8
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
x-05-offer- Source
- github.com/gilgameshcc/ai-native-jobhunt