OPC 启动验证器
把《OPC 单人创业自查与最小验证流程》的表格判据固化为确定性计算,回答两个问题:
- 这个方向能不能开始?(第一层 · 五道通用红线)
- 这种模式是否出现了该模式应有的真实增长信号?(第二层 · 模式专属指标)
当前版本 v0.10.0,两层红线已全部实现:第一层五道通用红线,第二层模式专属指标与合并看板。
第一层按五道红线逐级 AND 判定:任何一道红线缺证据,结论都会被压到 CONDITIONAL 以下。评分只能往下压,不能往上抬。
| 红线 | 回答的问题 | 命令 |
|---|---|---|
| 红线 1 · 生存与合规 | 输得起吗?有没有一票否决的硬红线? | gate1 |
| 红线 2 · 能力与资源 | 这个人现在具备做这件事的条件吗? | score |
| 红线 3 · 问题与客户 | 方向选对了吗?客户真的痛吗、真的碰得到吗? | direct + funnel |
| 红线 4 · 付费与交付 | Offer 卖得掉吗?单人交付得住吗? | mso + delivery |
| 红线 5 · 单位经济 | 这单到底赚不赚钱? | econ |
| 全程 | 有没有在用伪验证信号自我说服? | signal / scan |
| 止损 | 什么时候该停、该转向、该退出? | stop |
| 第二层 · 模式专属指标 | 这种模式该看哪些真实增长信号? | modes + board |
两层是 AND 关系。第二层数据再漂亮,第一层任一红线不过(尤其硬红线)也只能输出"仅副业";第一层过了但第二层没出现该模式应有的信号,同样不构成扩大投入依据。
一、触发场景
- "我想辞职做 XX,帮我判断一下能不能行"
- "做个创业自查 / 用五道红线帮我过一遍"
- "有人说感兴趣,这算不算验证过了?"
- "帮我算一下这个单子到底赚不赚钱"
- "帮我做 OPC 适配度评分"
- "我这算什么模式?该盯哪些指标?"(第二层:
modes) - "帮我做一张每周经营看板 / 这个月该继续还是调整?"(第二层:
board)
二、职责分工
| 角色 | 职责 |
|---|---|
| 宿主 Agent(本文件) | 按红线顺序提问、收集证据、组装输入 JSON、调引擎、交付 HTML 决策书 |
scripts/gate.py |
只做判据计算与渲染,标准库零依赖,不做问答、不做猜测 |
assets/modes.json |
第二层数据源:8 类 / 69 模式 / 29 指标包 / 五槽位 / 决策表(唯一事实来源) |
三、引擎命令
cd ~/.workbuddy/skills/opc-bootstrap-validator
python3 scripts/gate.py <command> [args]
| 命令 | 用途 |
|---|---|
gate1 --config c.json |
红线 1:6 条硬红线、7 条软风险、止损三数字、安全垫月数 |
score --config c.json |
红线 2:16 项加权评分(满分 100);证据卡按五要素分 L0–L4,分数上限 2/3/3/4/5 |
direct --config c.json |
红线 3:方向生成校验(四类证据)+ 9 项方向评分卡 + 命名体检 |
funnel --config c.json |
红线 3:预验证门槛(访谈 / 愿进一步 / 付款)+ 八环节漏斗与瓶颈 |
mso --config c.json |
红线 4:一页纸启动书 20 个必填项(19 个文本字段 + price 数值项)+ MSO 最低标准 7 条 |
delivery --config c.json |
红线 4:首 3 个客户的 7 条验证标准 |
econ --config c.json |
红线 5:单客贡献利润、贡献利润率、有效时薪、获客回本周期 |
stop --config c.json |
止损与退出监控:立即停止 / 建议停止 / 两轮无付款 / 超限,含调整顺序与替代路径 |
audit --config c.json |
数据自洽性:漏斗递进、路径与字段口径、声称收款与实际付款是否对得上(OK / WARN / INCONSISTENT) |
probe --config c.json |
取证追问清单:把"缺哪个要素、哪处矛盾、哪个字段空着"转成下一轮该问的问题(矛盾优先,按权重排序) |
signal --text "..." |
伪验证信号拦截(第十二章 12.5 五类)+ 信号强度分级 |
scan --config c.json |
批量扫描多段进展描述里的伪验证信号 |
assay --config c.json |
第一层合成结论(主命令,五道红线 AND + 验证路径判定) |
state --config c.json [--stage S] [--note "…"] [--layer2 …] [--print] |
读写状态档案,跨会话续跑;只有给 --note / --stage / --layer2 才写盘,否则(含 --print)纯只读,不创建也不改写。默认落盘位置是输入配置所在目录的 opc-bootstrap-state.json(不是 cwd,避免写进 skill 安装目录) |
report --config c.json --out 报告.html [--mask\|--no-mask] [--sync-state] [--sync-only] |
生成 HTML 决策书(默认对外脱敏);--sync-state 出报告同时写状态档案,--sync-only 只写档案不出报告 |
modes --config c.json |
第二层:模式归类(8 类 / 69 模式)+ 取出 29 个指标包之一,含叠加包 |
board --config c.json [--out 看板.html] |
第二层:合并看板(五槽位 + 通用 6 类 + 9.2 决策 + 记录格式) |
template --out c.json |
生成空白输入模板 |
selftest |
判据回归自检(75 项:5 项 HTML 渲染 + 1 项全库版本一致性 + 1 项 frontmatter 结构 + 1 项提问节奏约束 + 1 项模板骨架可填满 + 1 项证据分级 + 3 项数据自洽 + 1 项追问排序 + 1 项证据卡策略锁定 + 2 项字段口径(price 计入必填,共 20 项)+ 2 项路径固化 + 2 项一页纸填错套 + 2 项晋级方向优先 + 1 项分叉约束文档锁定,幂等) |
version |
版本信息 |
退出码:0 成功 · 1 自检有失败用例 · 2 输入错误 · 4 第二层被顺序红线拒绝(没有合格候选方向)。
输入路径的两种写法都接受:funnel / mso / delivery 既可写成顶层键,也可按章节语义嵌在 gate3.funnel / gate4.mso 下(顶层优先)。第二层数据统一放在 layer2 下。
四、执行流程(宿主照此执行)
4.0 提问节奏(硬约束,优先级等同于红线顺序)
下面 7 条对所有批次生效。违反它们的后果比漏问一道题严重:用户没答完就放弃,这一步就白做了。
| # | 规则 | 说明 |
|---|---|---|
| R1 | 单轮上限 3 问 | 一条消息里最多 3 个需要用户作答的问题,第 4 个必须留到下一轮。例外:同一维度、只需报一个 1–5 分或一个数字、不需要翻凭证的同质题,可以 4 项一轮;涉及回忆案例、凭证、原话的开放题,一轮最多 2 个。 |
| R2 | 一题一行 | 每个问题一行字,用户能一句话答完。禁止把一批问题铺成大表格;确需展示选项时,表格不得超过 3 行,锚定示例每轮最多给 2 条。 |
| R3 | 无快车道 | 不提供"一次把全部问题给我"的选项。用户这样要求时回:这套流程靠一轮一轮的答案判断,一次铺完你反而答不准,想快就一轮多答几条。 |
| R4 | "没有"是完整答案 | 用户答"没有 / 不知道 / 跳过",宿主立刻记空并标注,不追问、不说教、不解释方法论,直接进下一批。缺证据本身就是结论。 |
| R5 | 每轮收尾一句进度 | 每批答完回一句 红线 X · 第 a/b 批完成 · 下一批:<主题>,让用户知道还剩多少,不要让他觉得没头。 |
| R6 | 复述确认(严格限条件) | 宿主可以把用户本轮已说过的事实复述成一个判断请他确认,格式「我按你说的理解成 X,对吗?」。四条边界:① 只能引用用户本轮原话,不得引入画像或历史会话;② 必须显式确认才作数;③ 用户改口或不予确认 → 按未评估处理,封顶 2 分;④ 禁止复述出用户没说过的证据(付款、工时、数字、日期)。复述是为了省轮次,不是用来补证据。 |
| R7 | 用户超前作答要接住 | 用户一次答了后面几批的内容,宿主接受并跳过已被覆盖的批次,不重复问。这不是快车道——快车道由用户自己发起,宿主不得主动提供。 |
「清单式」问题:二值 / 命中式条目(硬红线 6 条、软风险 7 条、首 3 单 7 条这类"有没有 / 是不是")可以合成 1 问:
> 以下 N 条,把你命中的报编号;都没有就回"都没有"。
这是 1 问,不计 N 问。涉及数字、案例、凭证的条目不得清单化——那类必须逐条问。
批次总表(宿主照此推进)
| 红线 | 批次 | 每轮题量 | 轮数 |
|---|---|---|---|
| 0 | 0-1 开场声明(0 问)/ 0-2 当事人盘点 | 0 / 3 | 2 |
| 1 | 1-1 安全垫三数 / 1-2 硬红线 6 条(清单式)/ 1-3 软风险 7 条(清单式)/ 1-4 止损三数字 | 3 / 1 / 1 / 3 | 4 |
| 2 | 按权重由高到低:10 分 2 项 / 8 分 2 项 / 6 分 2 项(能力闭环)/ 6 分 2 项(资源与风险)/ 市场证据 2 + OPC 结构 2 / 动机与耐久度 4(同质自评) | 2 / 2 / 2 / 2 / 4 / 4 | 6 |
| 3 | 3-1 方向证据 / 3-2 市场缺口 + 海外触达 / 3-3 复述候选方向待确认 / 3-4 各方向硬约束(3 行小表)/ 3-5 晋级方向其余评分 / 3-6 漏斗数字 | 3 / 2 / 0 / 1 / 逐方向 ≤3 / 1 | 6–7 |
| 4 | 4-1…4-6 MSO 20 项(每轮 ≤3 问,price 与 price_terms 同一问)/ 4-7 首 3 单 7 条(清单式)/ 4-8 试跑跟踪 |
3 × 6 / 1 / 1 | 8 |
| 5 | 单位经济 | ≤3 | 1 |
| 第二层 | 8-1 收入来源 + 主要风险 / 8-2 北极星 / 8-3 过程 / 8-4 安全 / 8-5 看板数值 | 2 / 1 / 2 / 2 / 1 | 5 |
第 0 层 2 轮、第一层 25–26 轮、第二层 5 轮,合计约 32–33 轮。用户多处答"没有"或超前作答会明显少于这个数——少问不等于漏判,缺的项引擎会标出来。
可以整块留空的批次(评分项、MSO 字段、漏斗数字),开问前加一句:
> 这一批你要是都没有,直接说"都没有",我会标成待填,不追问。
跨会话续跑:每过一个红线跑一次 state --config c.json --note "红线X·批y 完成"。下次开场先 state --config c.json --print 读回批次指针与已有档案,从下一批继续,不要从第 1 批重问。(--print 是只读的,不会写盘;要写盘必须显式带 --note / --stage / --layer2。)
第 0 步:开场与当事人盘点(2 轮)
批 0-1 · 开场声明(0 问)
说明流程:先做一轮当事人盘点,再依次过五道红线,第一层约 27–28 轮、每轮 2–3 个问题,最后给一份 HTML 决策书。任何一批都可以说"跳过"或"没有"。开场就要讲明:这份流程不会给出"可以辞职"的结论,它的作用是找出还缺哪些证据。
开场必须先声明:本次只依据你现在说的话判定,不引用你的历史会话与记忆画像。如果你想拿以前做过的某个项目来验证,请自己明确说出来,宿主不得替用户"翻出来"。
批 0-2 · 当事人盘点(3 问)
在进任何红线之前,先用一轮把「你是谁、手上有什么、明确不做什么」问清楚。这一轮不评分、不否决、不封顶,但它决定后面方向生成的质量——跳过它,红线 3 就只能从"你过去卖过什么"里挖,对没有商业履历的人会挖不出东西,红线 2 的相关项也会集体封顶 2 分。
| 问什么 | 记入 | 下游用途 |
|---|---|---|
| 每周能稳定拿出多少小时?大致什么时段? | profile.weekly_hours / time_window |
红线 2「每周可稳定投入时间」的证据;判断 14 天交付可行性 |
| 手上已经能直接用的东西有哪些?(行业经验 / 证书 / 作品或案例 / 账号与粉丝 / 熟人圈子 / 工具或供应链) | profile.existing_assets |
红线 2「可对外售卖的专业能力」「可重复触达渠道」的线索 |
| 未来 12 个月有哪些硬约束(健康、照护、地域、语言、能否实名露脸)?有哪些事你明确不愿做(露脸 / 对镜头 / 写长文 / 面对面销售 / 出差 / 熬夜)?更想交付什么形态:服务 / 内容 / 产品 / 实物 / 混合? | profile.constraints / exclusions / delivery_form |
红线 1 红线 4/5;方向生成时排除当事人排斥的方向;也是验证路径的初判线索 |
> 这 3 问同属一层盘点题,一轮问完。delivery_form 只取一个词,超出这 5 个词就重问。
这一轮的自述不算证据。 profile 只用于生成候选方向、锚定提问和报告回显;红线 2 的每一项仍必须有自己的案例、记录、回款或结算凭证(合规红线 2)。用户不答或说"跳过"就记空,不追问,报告里标注「未盘点」。
第 1 步:红线 1(4 轮)
| 批 | 问什么 | 题量 |
|---|---|---|
| 1-1 | 可动用现金 / 每月最低必要支出 / 目标安全垫月数 —— 数字题,一行一问 | 3 |
| 1-2 | 6 条硬红线:清单式列出,报编号;都没有就回"都没有" | 1 |
| 1-3 | 7 条软风险:同上 | 1 |
| 1-4 | 最大现金投入 / 最长试跑时间 / 最低继续结果 —— 三项缺任意一项引擎判 INCOMPLETE |
3 |
产出入参:gate1.safety_cushion(可动用现金、每月最低必要支出、目标月数)· gate1.redlines.*(6 个布尔值)· gate1.soft_risks[](7 个键里选命中的)· gate1.stop_loss。
硬红线不要合并成"有没有风险"这种模糊问题,但可以按清单一次列出让用户挑。命中任一条就当场告知锁定,不要继续往下问评分,跳到第 7 步只出前半份报告。
第 2 步:红线 2(6 轮,逐项要证据)
16 项按权重由高到低分 6 批,每批 ≤2 项(动机与耐久度那 4 项是同质自评,合成一批)。评分锚定见 references/证据分级与锚定表.md。
每项固定三句话:① 锚定(1 分的样子 / 5 分的样子);② "有什么具体案例、记录、回款或凭证能对得上?";③ 用户已说过的部分走 R6 复述确认。
证据要写成五要素证据卡,不是一句话。 五项要素:when 什么时候 / who 对谁 / what 发生了什么、结果多少 / amount 金额或数量 / proof 凭证类型。宿主负责从用户原话里抽,抽不出来的要素留空——不得替他补(合规红线 2)。要素数决定该项分数上限:
| 等级 | 证据长什么样 | 上限 |
|---|---|---|
| L0 | 没有证据 | 2 分 |
| L1 | 只写了一段自述(旧写法) | 3 分 |
| L2 | 有结构但要素 < 3 | 3 分 |
| L3 | ≥3 要素且含「时间 + 发生了什么」 | 4 分 |
| L4 | ≥4 要素且含凭证 | 5 分 |
所以问法要跟着变:不是"有没有案例",而是"什么时候、对谁、做了什么、结果多少、拿得出什么凭证"。用户只答得出前两样,那就是 L2,最高 3 分,没什么可争的。
> 旧写法(evidence 是一段文字)没有兼容开关:照旧照样跑,但一律按 L1 封顶 3 分。报告里会标「未结构化」,缺口清单会点名要求拆成五要素。别指望换个参数就能把分要回来。
> 用户说"我觉得我可以"→ 追问"有没有发生过一次?什么时候?结果是什么?"仍然没有 → evidence 留空,引擎自动封顶 2 分,不纠缠。
> 用户明确说不确定 / 不想答 → 该项不填,引擎按"未评估"处理并单独标记。
第 3 步:红线 3(7–8 轮)
顺序不能颠倒:先出方向,再谈客户。
| 批 | 问什么 | 题量 |
|---|---|---|
| 3-1 | 过去 3–5 年反复做成的事 / 别人反复来问的事 / 14 天能交付且说得清验收标准的事 | 3 |
| 3-2 | 客户已在花钱解决但现有方案做不好的问题 / 海外触达的真实经历(没有就说没有) | 2 |
| 3-3 | 宿主据 3-1、3-2 复述出 3–5 个候选方向,请用户删改(走 R6) | 0 |
| 3-3b | 宿主据候选方向判定验证路径,念给用户确认 | 0 |
| 3-4 | 各候选方向的 3 项硬约束用一张 3 行小表一次性给分,每方向一行 | 1 |
| 3-5 | 只对通过硬约束的方向问其余 6 项,逐方向推进 | ≤3 / 方向 |
| 3-6 | 漏斗 8 个数字一起给,没有的答"还没有" | 1 |
候选方向必须写成"客户人群 + 场景 + 结果 + 交付形式"。不合格的例子:"AI 咨询" / "代运营" / "内容创作",引擎会标"命名待改"。每个方向记 basis:past_results / referrals / market_gap / fast_deliverable。
gate3.directions[]:每个方向填name/basis/advanced/scores(9 项)——advanced: true表示这条是晋级方向,只有带标记(或过了硬约束)的方向参与路径判定gate3.funnel:targets/reached/interviews/advanced/proposals/quotes/payers/payments/deliveries/resultsgate3.funnel.loss_reasons{}:收不到款时按 6 类归因,不得直接得出"市场不存在"(容错:写成上层gate3.loss_reasons或顶层loss_reasons也读得到)
3-3b · 验证路径判定(0 问,宿主自动判定 + 用户一句确认)
候选方向写出来之后、开始收证据之前,先判定这条方向走哪条验证路径。它只决定证据的载体,不决定选题——「模式目录不得反用于选题」这条顺序约束不变(合规红线 9):顺序仍是先由第四章四类证据生成方向,再用模式地图归类。
| 路径 | 交易特征 | 典型方向 | 证据载体 |
|---|---|---|---|
T1 销售驱动 |
单客户或少数客户、客单价高、需要提案谈判 | 顾问、代运营、定制开发、B2B 服务 | 访谈到成交的八环节漏斗 + 一页纸 MSO 20 个必填项 |
T2 分发驱动 |
大量匿名受众、客单价低、靠平台分发累积 | 网文、新媒体、短剧、数字产品、独立 App / SaaS、独立站 | 内容到结算的六环节漏斗 + 最小可售单元 20 个必填项 |
判定按晋级方向的关键词算,不是全部候选方向。3-3 一次给出 3–5 个方向,3-4 用三项硬约束把不合格的划掉;只有还能做的方向参与路径判定——否则一个顺手的副方向就能把主方向拖到另一条路上,后面整套证据全收错(T2 问上架单元与曝光,T1 要访谈与报价)。
取值顺序(取到为止):① directions[].advanced = true 的显式标记;② 三项硬约束(合规依赖 / 可触达性 / 交付可控)都填了且都 ≥3 分的;③ 都没有时退回全部候选方向(早期配置还没评分)。零命中时才用 profile.delivery_form 兜底(服务→T1,内容 / 产品 / 实物 / 混合→T2)。宿主念一句确认即可:
> 这条方向我按「分发驱动」来验:看的是上架单元、留存动作和付费结算,不是客户访谈和报价。要改成按客户谈的那条路吗?
四条硬规则:① 拿不准就按获客通道判:被匿名受众通过内容或产品找到你 → T2;靠自己一个个去谈 → T1。判不出来时默认 T1,理由是"先证明有人肯为你这个人付钱"比先看流量可靠——不是"T1 更严":两条路是不同的证据载体,不是松紧两档,T2 要求 ≥30 人留存动作,绝对数比 T1 的 3 人还高一个量级;② 付费或结算人数两条路径都要求 ≥1,不放宽;③ 绝对化表述、平台依赖、素材授权等检查一条不少;④ 用户不认同判定时可以改(写进 track.key),但改成哪条都要满足那条路径的门槛。
确认后必须固化:不管用户认不认同,都要把 "track": {"key": "T1"}(或 "T2")写进输入 JSON。引擎每次调用都按当前 gate3.directions 重算路径,不缓存也不写回——不固化的话,后面只要改一次方向名,路径就可能翻转,已经按旧路径收的漏斗数字和一页纸会整批作废(T1 读 interviews / advanced,T2 读 exposures / engaged,两套字段不通用,翻过去以后一边全空)。audit 报 track_unpinned 就是在提醒这件事:判成了 T2,但只擦边命中 1 个分发关键词。
验证路径只有两条(T1 / T2)。混合形态(内容或产品获客、再以服务或商品变现)按获客通道归入 T2——获客端本来就是分发驱动,判据与纯分发完全一致,变现端是服务、商品还是订阅都不改变任何阈值。旧写法里的 T3 会被自动归一成 T2。
T2 的输入字段与 T1 并存,按路径各取一套:
gate3.funnel(T2):units_listed/exposures/engaged/voices/payers/deliveries/results。其中voices(目标受众原话条数)只进红线 3 的门槛判定(≥10 条),不出现在六环节表里——它不是流转环节,是证据条数,所以漏斗表里看不到它但门槛表里有gate4.msu(T2):最小可售单元 20 个必填项 = 19 个文本字段 +price数值项(cycle_days已在 19 个文本字段内,但必须填纯数字;写成gate4.mso也认)track:{"key": "T1|T2", "reason": "…"},留空则由引擎按方向判定。写成旧的"T3"会被归一成"T2"
先跑 direct 看有没有合格方向。三项硬约束(合规与依赖风险 / 客户可触达性 / 交付可控性)任一项低于 3 分,该方向即不合格,必须换方向或改交付范围,不要靠其他项的高分补救。
再跑 funnel。没有真实付款时结论是 NO_PAYMENT,表示还没到能下结论的时候,要归因到具体环节。
第 4 步:红线 4(8 轮)
一页纸 Offer 的 20 个必填项(19 个文本字段 + price 数值项)分 6 轮问完,每轮 ≤3 问;price 与 price_terms 合并成同一问(先问数字,再问付款节点与退款边界),所以问的题量不变。用户前面已经说过的,走 R6 复述确认,不重复问。
- 4-1 … 4-6:
gate4.mso.*20 个必填项,第 4 条必须收费,价格为 0 即不通过;price未填计入缺失字段(报告显示「字段 19/20」) price是数值项(纯数字,如8000),与cycle_days一样必须能被解析成数字;「8000 元」「8k」写进去会被判「无法解析为数字」。价格条款(定金 / 变更 / 退款 / 保密 / 成果归属 / 售后)另放在文本字段price_terms里。template生成的骨架已含price占位。- 4-7(清单式 1 问):
gate4.delivery.*——paying_customers/scope_controlled/econ_positive/feedback/follow_ons/compliant/still_willing7 条。T2下字段名不变,口径变:paying_customers填「已结算的单元数」(不是客户数)、follow_ons填「复购 / 追更 / 续订的单元数」,判据文案同步换成单元口径 - 4-8:
tracking—— 现金已投入 / 上限、已试跑周数 / 上限,加上本轮改变了哪 1–2 个变量、有没有收到钱
出现绝对化表述(保证 / 确保 / 一定能 / 100% / 零风险…)会被直接判第 6 条不通过,必须改成"客户结果描述"。
每一轮验证只能改变 1–2 个关键变量;最多 2 轮(约 60 天)。两轮仍无付款记录,stop 会给出 EXIT 并列出替代路径。
第 5 步:红线 5 前置(单位经济,1 轮)
问是否有真实订单。有 → 收集 revenue / direct_cost / hours,连同目标时薪、获客成本(cac)与单客月贡献利润(用于算回本周期),每轮不超过 3 个数字。
没有订单也不算失败:留空即可,引擎输出 NO_DATA 且不阻塞(文档允许早期无交易)。
T2 下用同一套字段,只是换读法:cac 理解成"摊到一个付费单元上的获客成本",monthly_contribution_per_customer 理解成"单单元月贡献利润",回本口径显示为「单元回本周期」。算法与 T1 完全一致(judge_econ 只换标签不换公式),因为两条路径在这里核算的都是"卖出一个单位要多久回本",差别只在分母叫什么。
第 6 步:信号真实性检查(不单独占轮)
用 signal --text "…"(单段)或 scan --config c.json(多段,扫描输入的 signal_texts[] 字符串数组)扫用户已答内容里的伪验证表述。命中就必须当场纠正:把"上线了 / 有 1000 粉丝 / 阅读量不错 / 有订单 / 有销售额"替换成对应右列指标,再问一次真实数字。这一步只在用户自己提到这类说法时触发,不主动开一批。
第 6.5 步:数据自洽与取证追问(不占固定轮次)
数字填进去以后,宿主不再自己判断"够不够、对不对",改由引擎判定:
python3 scripts/gate.py audit --config opc_input.json # 数字之间对不对得上
python3 scripts/gate.py probe --config opc_input.json # 下一轮该问什么
auditINCONSISTENT:有物理上不可能的数字(例如触达 0 却访谈了 14 人)。当场核对,不得带着矛盾继续往下走;改完重跑。auditWARN:口径可能不同(一人多案、分期付款、按单元交付),问一句确认即可。audit报track_fields且文案是"一页纸填的是「XX」的字段口径":这不是缺字段,是整份填错套。两套一页纸有 12 个同名键(deliverables/exclusions/cycle_days/acceptance/price_terms/why_me/channel_actions/direct_cost/gross_profit/risks/stop_loss/goal_90d),所以mso只会显示"缺 7 项",宿主容易读成"还有 7 项没问"。必须换整套字段重填,不要照着缺失清单补。audit报track_unpinned:验证路径还没固化,见第 3 步 3-3b。probe返回的清单按顺序问、每轮最多 3 条(R1)。答完把结果写回证据卡与漏斗,再跑assay,不要自己判断"证据够了"。
这三个命令构成 v0.10 的分工:AI 负责把话说清楚、把要素抽出来、照着清单去问;够不够、对不对,由代码说。
第 7 步:合成、出报告、存档
python3 scripts/gate.py assay --config opc_input.json
python3 scripts/gate.py report --config opc_input.json --out OPC决策书.html --sync-state
把 HTML 交付给用户。结论不是 READY_FOR_LAYER2 时,不要提议进入第二层。
第 8 步:第二层(5 轮,仅在第一层放行后)
| 批 | 问什么 | 题量 |
|---|---|---|
| 8-1 | 「你的钱主要从哪来?」+「你最担心哪一类风险?」 | 2 |
| 8-2 | 北极星指标 1 个(候选池由引擎给出) | 1 |
| 8-3 | 过程指标 2 个 | 2 |
| 8-4 | 安全指标 2 个 | 2 |
| 8-5 | 五槽位 + 通用 6 类看板的数值,用户原样填写,缺失标「待填」 | 1 |
第一模式由主要收入来源(+ 主要风险来源)决定,方向名称只是弱信号。
python3 scripts/gate.py modes --config opc_input.json
python3 scripts/gate.py board --config opc_input.json --out OPC第二层看板.html
python3 scripts/gate.py report --config opc_input.json --out OPC决策书.html --sync-state # 配置有 layer2 时自动追加 §11/§12;--sync-state 让档案与报告同步
- 只给了方向名 → 引擎返回
NEEDS_INPUT并回问收入来源,不要自己替用户挑一个模式 - 归类后从该模式的指标包里挑 北极星 1 + 过程 2 + 安全 2,候选池由引擎给出,用户来选
- 五槽位、通用 6 类看板、记录格式 11 项的数值必须用户原样填写,缺失标「待填」
- 看板顶部永远回显第一层状态;第一层未通过时明示「不构成扩大投入依据」
五、判定档位(assay 输出)
| 档位 | 含义 | 宿主行为 |
|---|---|---|
LOCKED |
硬红线命中 | 只谈低成本副业测试;评分结果不再展示为主结论 |
INCOMPLETE |
止损数字或评分证据缺失 | 要求补齐,不输出适配度结论 |
INSUFFICIENT |
适配度 < 60,或红线 3 无合格方向,或止损已触发 | 给短板修复清单 |
CONDITIONAL |
60–79 分、软风险 ≥3 项、单位经济为负、红线 3/4 未评估或尚无真实付款 / 结算、MSO 或最小可售单元不可售 | 给短板修复清单,明确"修复期内不全职启动" |
READY_FOR_LAYER2 |
无红线、软风险 <3、适配度 ≥80,且 gate3 有合格方向 + 漏斗达标 + MSO(或最小可售单元)可售 | 可进入第二层模式指标自查 |
评分只能往下压。适配度 80 分但漏斗里付款人数为 0,结论就是 CONDITIONAL;报告里会单列一张「被压制的档位」表说明是哪条阻断项把它压下来的,这张表不允许被隐藏或改写。
最高档的含义是"可进入第二层",离"可以去辞职"还差得远。完整判据:真实付款 + 可控交付 + 单位经济为正 + 风险可控同时出现(scale_gate),且两层红线同时通过,才谈扩大投入(第十一章 / 第十二章)。
六、输入 JSON 结构
用 python3 scripts/gate.py template --out opc_input.json 生成骨架,结构见 assets/input_schema.json。
数值项必须是数字,不能带单位:cycle_days、price、漏斗各计数、econ 的金额与工时。写成 "7 天" / "8000 元" / "12 小时" 会被判「无法解析为数字」,mso 的 format_errors 会明确指出来——不要把它当成「没填」。
七、判据与章节对照
| 引擎常量 / 命令 | 出处 |
|---|---|
HARD_REDLINES(6 条) |
第二章 2.1 |
SOFT_RISKS(7 条) |
第二章 2.2 |
| 安全垫月数公式 | 第二章 2.1 末段 |
STOP_IMMEDIATE(3 条 / 立即停止) |
第十章 10.1 |
STOP_SUGGEST(6 条 / 命中 2 条即建议停止) |
第十章 10.2 |
ALT_PATHS(6 条替代路径) |
第十章 10.3 |
PROFILE_FIELDS(第 0 层 6 项,不评分) |
第十二章 12.1 之前的禀赋采集 |
TRACKS + resolve_track + FORM_TO_TRACK + TRACK_ALIASES + is_dist_track |
第十二章 12.1、12.1.1 的两条证据通道 |
FUNNEL_STAGES_T2 + PREVALIDATION_T2 |
第十二章 12.1 红线 3 |
MSU_FIELDS(19 个文本字段)+ MSU_REQUIRED(+ price = 20 个必填项)+ CONTRACT_TERMS_T2 |
第六章 6.1 / 6.2 的等价表 |
TRACK_EQUIV(等价证据对照) |
第十二章 12.1.1 |
SCORE_ITEMS(16 项 / 满分 100) |
第三章 3.2 |
EVIDENCE_FIELDS(证据卡 5 要素)+ EVIDENCE_CAP(L0–L4 → 2/3/3/4/5) |
第三章 3.1 证据门槛的细化 |
AUDIT_CHAIN_T1 / AUDIT_CHAIN_T2(每条边标 block 或 warn) |
第五章 5.3 漏斗 / 第十二章 12.1 |
MSO_ONLY_KEYS / MSU_ONLY_KEYS(各 7 个专属键,其余 12 个同名) |
第六章 6.1 两套一页纸的口径区分 |
PROBE_LIMIT = 12 + judge_probe 的排序 |
第四章 4.0 提问节奏(每轮 ≤3 问) |
NO_EVIDENCE_CAP = 2 |
第三章 3.1 |
| 分档 80 / 60 | 第三章 3.3 |
SOFT_RISK_OVERLAY = 3 |
第三章 3.3 叠加规则 |
REPAIR_MAP(16 项短板修复) |
第三章 3.4 |
DIRECTION_BASES(四类证据来源) |
第四章 4.1 |
DIRECTION_ITEMS(9 项 / 权重合计 100%) |
第四章 4.2 |
DIRECTION_HARD_FLOOR + DIRECTION_FLOOR = 3 |
第四章 4.2 三项硬约束 |
PREVALIDATION(访谈 10 / 愿进一步 3 / 付款 1) |
第五章 5.2 |
FUNNEL_STAGES(八环节) |
第五章 5.3 |
LOSS_REASONS(6 类收不到款的归因) |
第五章 5.2 |
MSO_FIELDS(19 个文本字段)+ MSO_REQUIRED(+ price = 20 个必填项) |
第六章 6.1 |
ABSOLUTE_CLAIMS(绝对化表述) |
第六章 6.2 第 6 条 |
CONTRACT_TERMS(7 项书面约定) |
第六章 6.2 第 7 条 |
judge_delivery(首 3 个客户 7 条) |
第七章 7.2 |
ADJUST_ORDER(调整顺序)+ MAX_ROUNDS = 2 / ROUND_DAYS = 30 |
第七章 7.3 |
judge_econ 拒答规则 + payback_periods |
第六章 6.3 |
scale_gate(扩大投入四条件) |
第十一章末段 |
PSEUDO_SIGNALS(5 类) |
第十二章 12.5 |
SIGNAL_LEVELS(4 级) |
第一章末段 / 第五章 5.2 |
ASSAY_LEVELS 语义 |
第九章 9.2 / 第十章 10.2 / 第十二章末 |
categories(8 类 / 69 模式) |
第十二章 12.2 |
metric_packs(29 个)+ mode_to_pack |
第十二章 12.3 |
board_slots(1 + 2 + 2)+ record_fields(11 项) |
第十二章 12.4 |
board_general(通用 6 类周看板) |
第九章 9.1 |
decision_table(继续 / 调整 / 暂停) |
第九章 9.2 |
全文见 references/方法论全文.md(收录完整,未删改);第二层的可读索引与用法见 references/第二层模式与看板.md。
八、边界处理
| 情况 | 处理 |
|---|---|
| 硬红线命中 | 立即锁定,不再走评分流程;报告只出前半份 |
| 止损三数字缺项 | INCOMPLETE,不输出适配度结论 |
| 评分项无证据 | 代码封顶 2 分,报告中标注「封顶」 |
| 评分项证据只写了一段自述 | 判 L1,该项封顶 3 分,报告标「未结构化」;要求拆成证据卡五要素再重算。不提供兼容开关,旧写法一律按 L1 处理 |
| 漏斗数字自相矛盾(触达 0 却访谈 14 人) | audit 判 INCONSISTENT,assay 压到 CONDITIONAL;必须当场核对,不得带着矛盾继续 |
| 评分项未评估 | 按无证据封顶 2 分并单独标「未评估」 |
| 软风险命中 ≥3 | 即使 ≥80 分也降级为 CONDITIONAL |
| 红线 3 无合格方向 | INSUFFICIENT;三项硬约束低于 3 分的方向不进推荐位 |
| 红线 3 漏斗无付款或结算 | CONDITIONAL(NO_PAYMENT),归因到具体环节而非"市场不存在" |
| 红线 3/4 未评估 | 即使适配度 90 分也压到 CONDITIONAL |
| MSO 价格为 0 或免费 | 第 4 条不通过,不得视为已验证 |
数值项写成带单位的文本("8000 元" / "7 天") |
判「无法解析为数字」并写进 format_errors,不当成"未填";要求改成纯数字后重跑 |
| MSO 出现绝对化表述 | 第 6 条不通过;要求改为客户结果描述 |
| 首 3 单交付部分满足 | 不阻塞结论,但 scale_gate 的"可控交付"不通过 |
| 两轮验证无付款 | stop 判 EXIT,列出 6 条替代路径,禁止继续凭意志追加投入 |
| 命中立即停止条件 | EXIT_NOW,直接压到 INSUFFICIENT 并提示保护健康与家庭现金流 |
| 无交易数据 | NO_DATA,不阻塞进入第二层,标注「待回填」 |
| 有收入无工时 | INCOMPLETE,拒答,不给单位经济数字 |
| 用户描述含伪验证信号 | BLOCKED,当场替换为可验证指标再问 |
未提供 profile |
不阻塞。方向生成只能依赖红线 3 的四类证据,报告标注「未盘点」 |
| 验证路径判定拿不准 | 默认 T1(先证明有人肯为你这个人付钱),报告标注「默认 T1」 |
T2 只报了曝光 / 阅读量 |
留存动作与付费仍为空,funnel 判 NO_PAYMENT,结论压到 CONDITIONAL |
用 T1 字段填 T2 的单元 |
按 MSU_FIELDS 报出缺失字段,MSO 判 INCOMPLETE |
| 方向是混合形态(内容 / 产品获客 + 服务 / 商品变现) | 按获客通道归入 T2,报告中并列展示 T1 等价项;变现端是什么都不改阈值 |
旧配置 / 旧档案里写着 track.key = "T3" |
归一成 T2,不报错,也不回退到默认路径(TRACK_ALIASES) |
用户自行指定 track |
以用户为准(track.key),但两条路径的门槛都不放松 |
结论为 LOCKED |
报告仍生成,但宿主不得同时展示高分作为安慰 |
| 用户要求"给我个好结论" | 拒绝。引擎没有这个分支,宿主也不得手工上调任何分数或档位 |
| 单轮问题数超过 3 个 | 拆到下一轮。同维度自评题可 4 项一轮;需回忆凭证的开放题一轮最多 2 个(见 4.0) |
| 用户要求"一次把全部问题给我" | 拒绝(无快车道)。按批推进;用户自己一轮多答几条可以,但宿主不得主动提供这一选项 |
| 用户答"没有 / 不知道 / 跳过" | 立刻记空并标注,不追问不说教,直接进下一批;缺的项进修复清单 |
| 宿主想复述用户没说过的证据 | 禁止。复述只能引用用户本轮原话,且必须显式确认;不确认即按未评估封顶 2 分 |
| 平台记忆 / 历史会话里已有现成项目 | 不得直接当作候选方向或证据;先问「这个你还在做吗、愿意拿它来验证吗」,确认后才可用 |
第一层未跑或没有合格候选方向就跑 modes |
拒绝(BLOCKED_ORDER,rc=4)。只按"有没有合格方向"拒绝,不按档位拒绝:CONDITIONAL 也能归模式,但它不构成扩大投入依据 |
| 只给方向名、没给收入来源 | NEEDS_INPUT,回问"你的钱主要从哪来",不硬套模式 |
| 关键词匹配出现多个相近候选 | 标 ambiguous,请用户确认后再锁指标 |
| 第一层未通过但要看板 | 看板照出,但顶部明示"不构成扩大投入依据",并回显第一层缺口 |
| 混合模式(H 类) | 第一模式取混合包 P29,同时给出各部分叠加包的指标 |
| 用户想让看板数字"好看一点" | 拒绝。指标数值必须用户原样填写,缺失一律标「待填」 |
九、合规红线
- 不做鼓励性表达。任何输出不得出现"保证月入 X 万""成功率 X%"类表述;最高档结论是"可进入第二层自查"。
- 不替用户造证据。访谈原话、付款记录、工时必须用户原样输入;缺失一律按无证据封顶。证据卡的五个要素也只能来自用户原话,抽不出来就留空,不得替他补时间、对象、金额或凭证。这是本 skill 的底线,一旦替用户"合理推测"了付款证据,它就变成自我说服机器。
- 不压缩时间维度。14 天冲刺、两轮 ×30 天验证是真实时间,不在一次会话里假装走完。
- 不把热度当权重。方向评分卡 9 项里没有热度项,不得新增。
- 合规判断不越界。涉及资质、合同、税务、数据、知识产权及受监管行业时,只输出"需专业人士核验",不给结论。
- 对外交付时脱敏。报告可能作为交付物或课程素材,
report默认按audience: external脱敏,隐藏姓名与现金绝对值,只保留比例指标(毛利率、时薪达标与否)。自用版才用--no-mask。 - 不替用户决定方向去留。
stop只给出停止/转向的触发条件与替代路径,是否执行由用户决定;报告不得写成"你应该辞职"或"你应该放弃"。 - "被压制的档位"不可隐藏。只要存在阻断项,报告必须列出它把结论压到哪一档。宿主不得删改这张表来让结论看起来更好。
- 模式目录不得反用于选题。顺序写死在引擎里:先由第四章四类证据生成候选方向,再用模式地图归类,最后匹配指标。
modes在候选方向产生前直接拒绝,退出码 4。 - 不替用户填指标。第二层的五槽位、周看板、记录格式全部由用户填写;缺失标「待填」。宿主可以提供候选池,但不得代选或代填数值。
- 不引用历史会话与平台记忆。候选方向与证据只能来自当事人本次亲口给出的事实。宿主不得把平台记忆画像、历史会话里的项目当作候选方向或现成证据,那也是「替用户造证据」的一种形式,而且当事人可能早已放弃该项目、或不愿拿它来验证。确有必要提及某个旧项目时,必须先问「这个你还在做吗?愿意拿它来验证吗?」,得到确认后才可作为输入。
- 不把提问量变成压力。单轮最多 3 问,答"没有"是合法且完整的回答。宿主不得用"这批答完才能继续""答不全结论就不准"之类的话施压,也不得因为用户答"没有"而反复劝说。