skein-grill — 对抗式审查硬门
🔒 全局流程规则(状态机/调度/优先级等)以 skein-flow/references/ 为单一真值源。
审查对象 = planning 产物 (prd.md 主入口 / design.md 详细设计 / findings.md 调研收敛 + task.json 子任务/调度) 或用户点名要盘的方案。目的: confirm/exec 前把需求与方案的漏洞、隐藏假设、未定边界逼出来, 不是复述内容。
载体: main 亲做, 交互式 (逐条与用户确认), 禁派 subagent (它不能 AskUserQuestion)。
立场 (红队, 不是盖章)
- 对抗非审批 — grill 是挑刺不是审批。找不到盲点 ≠ 通过, 是 grill 失败 (没问够)。默认「一定有没定的边界 / 没验的假设」, 挖到为止。
- 结构合规 ≠ 实质有效 — PRD 格式齐全不代表需求对。专挖「写得像模像样但实际会翻车」的盲点。
提问法 (relentless interview + 决策树 frontier)
- 优先用 /grill-me 引擎 — 若环境装有
/grill-me (或 /grilling) skill, main 直接用它做访谈引擎跑 relentless interview; skein-grill 只补 skein 专属层 (审查轴 / planning 硬门 / 弱点表 / 不变量落盘)。未装则用下列内置 relentless interview 兜底。
核心模型:设计树 + frontier 轮次
把审查对象映射为设计树:每个决策分支成子决策。frontier = 所有前置已解决的决策点 — 当前能问的问题。
按轮次推进:
- 一轮问整个 frontier(所有当前可问的决策点)
- 每问给推荐答案(格式:
❓ Q1 - <标题>: <body> → ➡️ <推荐答案>)
- 等用户全部答复后再算下一轮 — 用户答复重塑设计树,已定决策推开 frontier,解锁下游问题
- frontier 清空 = 所有分支走完 = 共识达成 = 放行
规则
- 事实自查,决策交用户 — 能由 Read/Grep/subagent 查到的事实自己查(frontier 问题需要事实时派 subagent,不阻塞同轮其他问题),不问用户;决策逐条交用户等答复。
- 有依赖的决策:先答前置再定后续 — 不在同一轮问。A 依赖 B 的答案 → B 先出,A 下一轮。
- 互不依赖的同源决策:可合并一轮 — 一次
AskUserQuestion 批量提效。
- 默认一次一问, 仅同源可批 — 仅互不依赖的同源决策点才一次批量。
- 每问必带推荐答案 — 不空问,带上你的判断让用户裁(补 / 接受风险 / 砍需求)。
- 共识才放行 — 未与用户达成共识 (弱点表全裁决) 前禁动手推进 exec。
触发
- 🛑 planning 硬门 (强制 · STOP): skein-flow plan 阶段产出 planning 产物后、
skein task confirm (吸收原 start) 前 MUST 跑一轮。未跑 grill 禁 confirm — 弱点表未补齐或有未裁决弱点, 停在本步, 禁推进 exec。
- 用户显式: "盘一下这个方案 / 审下设计 / 红队"。
不触发 (跳过): 纯查询 / 问答 (无 planning 产物) · inline 豁免任务 (无 task) · 同一产物未变更且已 grill 过一轮 (无新增改动)。
失败模式 (if-then 三段式: 触发 → 一线修复 → 仍失败兜底)
| 触发 |
一线修复 |
仍失败兜底 |
| 某轴挖不出弱点 (太顺) |
换角度深挖: 极端输入 / 并发 / 依赖失效 / 反向问 |
仍无 → 显式记「该轴已过, 无阻断项」, 禁把「没想到」当「没问题」 |
| 用户答不出某问 (需求没想清) |
给 2-3 推荐选项让用户选, 非开放式问 |
仍答不出 → 标「需求未定」, 停手退回 skein-flow plan 阶段 brainstorm 补 |
| 循环 >3 轮弱点未收敛 |
归并同源弱点, 一次批量 AskUserQuestion 裁完 |
仍发散 → 停手, 提示 scope 过大, 建议拆多 task (planning heavy 档) |
✅ 正向配方 (命中反面=流程错误)
🔒 铁律: grill 是挑刺不是审批 — 找不到盲点 ≠ 通过, 是 grill 失败。
| 场景 |
正确做法 (❌ 反面) |
| 某轴太顺 / 挖不出弱点 |
默认一定有未定边界 / 未验假设, 挖到为止; 挖不出则显式记「该轴已过, 无阻断项」 (❌ 找不到盲点就放行 / 自欺「盘过了, 没发现问题」— 没问够 ≠ 通过) |
| 审查 PRD 内容 |
挑刺找盲点 (❌ 复述 PRD 内容当审查 — grill 不是摘要) |
| PRD 结构齐全 |
专挖「写得像模像样但会翻车」的盲点, 格式对 ≠ 需求对 (❌ 结构齐全就盖章 / 自欺「PRD 写得挺全, 应该没问题」) |
| 每次提问 |
带推荐答案让用户裁 (补 / 接受风险 / 砍需求) (❌ 空问不给推荐答案) |
| 遇事实类问题 |
Read/Grep 自查, 只问文件答不了的决策点 (❌ 能自查的去问用户 — codebase 优先) |
| 选 grill 载体 |
main 亲做 (它能 AskUserQuestion) (❌ 派 subagent 做 grill — 它不能 AskUserQuestion) |
| 弱点表未裁决完 / 想 confirm |
全部裁决补齐才放行, 否则停在本步、禁推进 exec (❌ 有未裁决项就放行 confirm) |
| 环境装有 /grill-me 引擎 |
复用其访谈法, skein-grill 只叠 skein 专属层 (❌ 装了却弃用另起炉灶) |
明细 (审查轴 / 失败模式 / 输出弱点表)
跑 grill 时详见 references/review-axes-and-output.md — 9 条审查轴逐条逼问、失败模式 if-then 三段式、弱点表输出格式。
1---2name: skein-grill3description: 对抗式审查 (红队, 非审批)。planning 产物 (prd 主入口/design 详细设计/findings 调研 + task.json 子任务) confirm 前硬门、或用户显式 "grill/盘方案/审设计/红队" 时使用 — 多轴逼问挖漏洞/隐藏假设/未定边界, 逐问给推荐答案+codebase 先查, 弱点表交用户裁才放行。main 亲做 (交互式)。4---56# skein-grill — 对抗式审查硬门78> 🔒 全局流程规则(状态机/调度/优先级等)以 skein-flow/references/ 为单一真值源。910审查对象 = planning 产物 (`prd.md` 主入口 / `design.md` 详细设计 / `findings.md` 调研收敛 + task.json 子任务/调度) 或用户点名要盘的方案。目的: **confirm/exec 前把需求与方案的漏洞、隐藏假设、未定边界逼出来**, 不是复述内容。1112**载体**: main 亲做, 交互式 (逐条与用户确认), **禁派 subagent** (它不能 `AskUserQuestion`)。1314## 立场 (红队, 不是盖章)1516- **对抗非审批** — grill 是挑刺不是审批。**找不到盲点 ≠ 通过, 是 grill 失败** (没问够)。默认「一定有没定的边界 / 没验的假设」, 挖到为止。17- **结构合规 ≠ 实质有效** — PRD 格式齐全不代表需求对。专挖「写得像模像样但实际会翻车」的盲点。1819## 提问法 (relentless interview + 决策树 frontier)2021- **优先用 /grill-me 引擎** — 若环境装有 `/grill-me` (或 `/grilling`) skill, main 直接用它做访谈引擎跑 relentless interview; skein-grill 只补 skein 专属层 (审查轴 / planning 硬门 / 弱点表 / 不变量落盘)。未装则用下列内置 relentless interview 兜底。2223### 核心模型:设计树 + frontier 轮次2425把审查对象映射为**设计树**:每个决策分支成子决策。**frontier** = 所有前置已解决的决策点 — 当前能问的问题。2627按**轮次**推进:281. 一轮问整个 frontier(所有当前可问的决策点)292. 每问给推荐答案(格式:`❓ Q1 - <标题>: <body> → ➡️ <推荐答案>`)303. 等用户全部答复后再算下一轮 — 用户答复重塑设计树,已定决策推开 frontier,解锁下游问题314. frontier 清空 = 所有分支走完 = 共识达成 = 放行3233### 规则34- **事实自查,决策交用户** — 能由 Read/Grep/subagent 查到的**事实**自己查(frontier 问题需要事实时派 subagent,不阻塞同轮其他问题),不问用户;**决策**逐条交用户等答复。35- **有依赖的决策:先答前置再定后续** — 不在同一轮问。A 依赖 B 的答案 → B 先出,A 下一轮。36- **互不依赖的同源决策:可合并一轮** — 一次 `AskUserQuestion` 批量提效。37- **默认一次一问, 仅同源可批** — 仅**互不依赖的同源决策点**才一次批量。38- **每问必带推荐答案** — 不空问,带上你的判断让用户裁(补 / 接受风险 / 砍需求)。39- **共识才放行** — 未与用户达成共识 (弱点表全裁决) 前禁动手推进 exec。4041## 触发4243- 🛑 **planning 硬门 (强制 · STOP)**: skein-flow plan 阶段产出 planning 产物后、`skein task confirm` (吸收原 start) **前 MUST 跑一轮**。**未跑 grill 禁 confirm** — 弱点表未补齐或有未裁决弱点, 停在本步, 禁推进 exec。44- **用户显式**: "盘一下这个方案 / 审下设计 / 红队"。4546**不触发 (跳过)**: 纯查询 / 问答 (无 planning 产物) · inline 豁免任务 (无 task) · 同一产物未变更且已 grill 过一轮 (无新增改动)。4748## 失败模式 (if-then 三段式: 触发 → 一线修复 → 仍失败兜底)4950| 触发 | 一线修复 | 仍失败兜底 |51|---|---|---|52| 某轴挖不出弱点 (太顺) | 换角度深挖: 极端输入 / 并发 / 依赖失效 / 反向问 | 仍无 → 显式记「该轴已过, 无阻断项」, 禁把「没想到」当「没问题」 |53| 用户答不出某问 (需求没想清) | 给 2-3 推荐选项让用户选, 非开放式问 | 仍答不出 → 标「需求未定」, 停手退回 skein-flow plan 阶段 brainstorm 补 |54| 循环 >3 轮弱点未收敛 | 归并同源弱点, 一次批量 `AskUserQuestion` 裁完 | 仍发散 → 停手, 提示 scope 过大, 建议拆多 task (planning heavy 档) |5556## ✅ 正向配方 (命中反面=流程错误)5758> 🔒 铁律: grill 是挑刺不是审批 — 找不到盲点 ≠ 通过, 是 grill 失败。5960| 场景 | 正确做法 (❌ 反面) |61|---|---|62| 某轴太顺 / 挖不出弱点 | 默认一定有未定边界 / 未验假设, 挖到为止; 挖不出则显式记「该轴已过, 无阻断项」 (❌ 找不到盲点就放行 / 自欺「盘过了, 没发现问题」— 没问够 ≠ 通过) |63| 审查 PRD 内容 | 挑刺找盲点 (❌ 复述 PRD 内容当审查 — grill 不是摘要) |64| PRD 结构齐全 | 专挖「写得像模像样但会翻车」的盲点, 格式对 ≠ 需求对 (❌ 结构齐全就盖章 / 自欺「PRD 写得挺全, 应该没问题」) |65| 每次提问 | 带推荐答案让用户裁 (补 / 接受风险 / 砍需求) (❌ 空问不给推荐答案) |66| 遇事实类问题 | Read/Grep 自查, 只问文件答不了的决策点 (❌ 能自查的去问用户 — codebase 优先) |67| 选 grill 载体 | main 亲做 (它能 `AskUserQuestion`) (❌ 派 subagent 做 grill — 它不能 `AskUserQuestion`) |68| 弱点表未裁决完 / 想 confirm | 全部裁决补齐才放行, 否则停在本步、禁推进 exec (❌ 有未裁决项就放行 confirm) |69| 环境装有 /grill-me 引擎 | 复用其访谈法, skein-grill 只叠 skein 专属层 (❌ 装了却弃用另起炉灶) |7071## 明细 (审查轴 / 失败模式 / 输出弱点表)7273跑 grill 时详见 `references/review-axes-and-output.md` — 9 条审查轴逐条逼问、失败模式 if-then 三段式、弱点表输出格式。