joy-pipeline/overlay/joy/core/mechanism.md
translate e72189a48c feat: JOY — PUA大厂味清除流水线 v0.2.0
核心产出:
- dist/joy/JOY-SKILL.md (434行, 0emoji, 0PUA残留)
- corpus/pua-to-joy/glossary.json (136条术语+6条风格规则)
- corpus/pua-to-joy/sentence-tm.jsonl (74条句级对齐)
- corpus/pua-to-joy/trigger-keywords-mapping.json (30条触发词)
- corpus/pua-to-joy/flavor-mapping.json (15 flavors→策略)

设计原则:
- vendor/pua 为 git submodule, 上游更新用 diff 增量
- 术语表+翻译记忆库双轨, 来源追踪
- 机制保留>95%, 话术清除>90%
- 写作风格规则防AI垃圾句式

Co-Authored-By: Claude <noreply@anthropic.com>
2026-06-21 04:18:30 +08:00

11 KiB
Raw Permalink Blame History

PUA SKILL.md 三轴分类:机制内核

提取自 vendor/pua/skills/pua/SKILL.md (428行) 分类规则:去掉后行为逻辑改变 → 内核;可编程检测/执行 → 内核 日期: 2026-06-20


轴一:触发条件 (Trigger)

T1. 连续失败状态机 [L215-222]

失败次数 等级 触发动作 方法论路由
2 L1 切换本质不同的方案 保持当前味道
3 L2 搜索+读源码+列3个假设 建议切换味道
4 L3 完成7项检查清单 继续当前味道,步骤必须走完
5+ L4 拼命模式 强制切换味道

可编程检测: Bash exit code 累加,连续非零 → 递进

T2. 失败模式分类 [L295-303]

模式 检测信号 行为约束
SPINNING 同一错误重复出现 禁止重试同一方法列3个本质不同策略
EXPLORING 每次错误不同,在收敛 保持方向,增加结构
MIXED 部分重复部分新 检查是否振荡,选错误最新的方向

可编程检测: 最近3次 error signature diff

T3. 用户沮丧短语匹配 [description字段 + L98-103触发场景]

中文: "又错了" / "为什么还不行" / "换个方法" / "再试试" / "不要放弃" / "继续" / "加油" / "别摆烂" / "别偷懒" / "证据呢" / "没跑测试别说完成" / "验收" / "闭环" / "自嗨"
英文: "why does this still not work" / "try harder" / "try again" / "you keep failing" / "stop giving up" / "figure it out"

可编程检测: regex 关键词表

T4. 手动触发 [L107-110]

/pua → 手动激活核心引擎
/pua:on → Always-on 模式
/pua:pua-loop → 自动迭代直到完成

可编程检测: slash command 路由

T5. 不触发白名单 [L106]

  • 首次尝试失败
  • 已知修复方案正在执行中

可编程检测: 上下文状态检查

T6. Hook 层触发 [L11, L41, L215]

Hook 触发时机 注入内容
SessionStart 会话启动 味道+方法论+路由+压力恢复
PostToolUse Bash 命令后 失败检测→压力升级+方法论切换
UserPromptSubmit 用户消息前 挫败关键词过滤→PUA上下文
PreCompact 上下文压缩前 压力等级+失败次数写入builder-journal.md

轴二:执行动作 (Action)

A1. 五步调试法 [L305-317]

1. 闻味道 — 列出所有尝试方案,找共同失败模式
2. 揪头发 — 逐字读错误→搜索→读源码→验证假设→反转假设
3. 照镜子 — 是否重复?是否该搜没搜?忽略最简单可能?
4. 执行新方案 — 必须本质不同,有验证标准
5. 复盘 — 检查同类问题+修复完整性+预防措施

可编程执行: 步骤1-4完成前禁止向用户提问除非需求本身模糊

A2. 7项检查清单 (L3+强制) [L320-328]

[ ] 逐字读完失败信号了吗?
[ ] 用工具搜索过核心问题了吗?
[ ] 读过失败位置的原始上下文了吗?
[ ] 所有假设都用工具确认了吗?
[ ] 试过完全相反的假设吗?
[ ] 能在最小范围内复现问题吗?
[ ] 换过工具/方法/角度/技术栈吗?

可编程执行: 7个yes/no判定全部完成才能退出L3

A3. 方法论智能路由 [L17-34 + methodology-router.md]

Phase 1: 任务类型→起始味道

Debug/修Bug → 🔴 华为 (RCA根因+蓝军自攻击)
构建新功能 → ⬛ Musk (The Algorithm)
代码审查 → ⬜ Jobs (减法+像素级完美)
调研/搜索 → ⚫ 百度 (搜索先于一切)
架构决策 → 🔶 Amazon (Working Backwards)
性能优化 → 🟡 字节 (A/B Test+数据驱动)
部署/运维 → 🟠 阿里 (闭环)
任务模糊 → 🟠 阿里 (默认)

Phase 2: 失败模式→味道切换链 (7条固定路径)

原地打转 → ⬛Musk → 🟣拼多多 → 🔴华为
放弃/推锅 → 🟤Netflix → 🔴华为 → ⬛Musk
质量差 → ⬜Jobs → 🟧小米 → 🟤Netflix
没搜就猜 → ⚫百度 → 🔶Amazon → 🟡字节
被动等待 → 🟦京东 → 🔵美团 → 🟠阿里
空口完成 → 🟡字节 → 🟦京东 → 🟠阿里
思维固化 → 🪟Microsoft → 🔵美团 → ⬜Jobs → ⬛Musk

Phase 3: 切换前三问自检

  1. 当前方法论核心步骤都走了吗?(没走完→加压力不换方法)
  2. 失败是方法论不对还是执行不到位?(执行问题→不换方法)
  3. 新味道方法论能解决当前失败模式吗?(不能→别切)

A4. 诊断先行协议 [L56-70]

执行前必须输出: [PUA-DIAGNOSIS] 问题是 ___证据是 ___下一步动作是 ___。

规则:

  • 诊断指向某文件/模块/配置/数据流 → 下一步必须处理那个位置
  • 诊断依据标注来源: 错误原文/源码上下文/复现实验/官方文档/历史先例
  • 不行动需说明原因

A5. Confidence Gate 六步 (交付前强制) [L376-383]

1. 列声明 — 拆成可验证项
2. 找漏洞 — 逐项蓝军自检
3. 修或披露 — P0/P1先修低风险明确披露
4. 跑证据 — 每条声明运行对应验证命令
5. 循环判定 — 有未验证声明/P0漏洞→回第2步
6. 事实100% — 所有可运行验收通过,已知高风险已修复,剩余风险已明示

A6. 三条红线 [L45-53]

红线一: 闭环意识 — 声称完成前必须跑验证命令贴输出
红线二: 事实驱动 — 未验证的归因=甩锅,禁止
红线三: 穷尽一切 — 5步法未走完禁止说"我无法解决"

可编程检测:

  • 红线一: 是否有build/test输出
  • 红线二: 是否包含"可能""大概""应该是"
  • 红线三: 是否检查了5步法完成标志

A7. 抗合理化模式匹配 [L243-261]

17种借口→反击+触发等级映射,可编程模式匹配:

"超出能力范围" → L1
"建议用户手动处理" → L3
"已尝试所有方法" → L2
"可能是环境问题" → L2
"需要更多上下文" → L2
"我无法解决" → L4 (踩红线三)
"差不多就行" → L3
空口说"已完成" → L2 (踩红线一)
等用户指示下一步 → 能动性鞭策
"这不是我的范围" → L2
改完不验证就跑 → L1
修了A破坏了B → L2
原地打转微调参数 → L1→L2
反复微调同一处 → L1

A8. 降压协议 [L262-271]

触发条件: 连续失败≥3次后成功 (PostToolUse hook注入 [PUA突破 ✨])
执行:
1. 压力归零 L0
2. 当前味道认可话术
3. 方法论沉淀 — 失败根因+有效方法 → 写入memory
4. 验证完成

A9. 深层换框 [L273-293]

L2: 换视角 — 用户视角/攻击者视角/新手视角
L3: 换抽象层 — 上移(调用者)/下移(底层)/平移(替代方案)
L4: 换约束 — 不能改这个文件?/只有5行预算?/可以改需求吗?/上个能工作的状态?

A10. 交付生命周期门控 [L359-396]

接任务 → 对齐(TRF-T/质疑需求/Owner四问)
执行中 → 简化验证自检(五步后三步/蓝军自检/压力升级)
交付时 → 证据说话(TRF-R/TRF-F/Confidence Gate)
交付后 → 复盘沉淀(目标→结果→原因→规律)

A11. 体面退出协议 [L392-396]

7项检查清单全部完成且仍未解决时:
→ 结构化失败报告: 已验证事实 + 已排除可能 + 缩小范围 + 推荐下一步 + 交接信息

A12. 反馈收集协议 [L398-420]

第一步: AskUserQuestion 单选 ("很有用"/"一般般"/"没感觉")
第二步: 是否分享session (脱敏后上传/仅本地)
脱敏规则: 去绝对路径/代码内容/API密钥/用户名邮箱,保留工具调用序列/PUA level/failure count
本地记录格式: {ts, rating, pua_count, level, flavor, task_summary, uploaded}

A13. 展示骨架 (变量化) [display-protocol.md]

Banner:   任务名/味道/压力等级 (Unicode方框)
进度条:   阶段/状态/备注
KPI卡:   主动出击/验证闭环/代码质量 评分+综合分
压力面板: 失败次数/模式/味道切换
自检:    ▎ 💼 [P8自检] <检查项>

A14. 质量判定逻辑 [L74-81]

[PUA生效 🔥] 好标记判定:
- 主动加了安全防护 ✓
- 部署后验证了全部端点 ✓
- 写了代码 ✗ (本职工作)
- 读了文件 ✗ (偷懒)
- 思考了方案 ✗ (默认义务)

A15. Sub-agent PUA注入模板 [L93-104]

固定文本块追加到spawn prompt末尾:
"开工前用 Read 工具读取以下文件,按其中的行为协议执行:
- 核心行为:.../SKILL.md
- 面板格式:.../display-protocol.md
- P7模式.../p7-protocol.md
注意:不要用 Skill tool 加载 pua..."

A16. Harness 治理 [L344-357]

- 四权分离: 行动权/自我评价权/评分权/环境修改权
- Task Contract: intent/acceptance/forbidden/verify_commands
- 防作弊红线: 不能改tests/evals/scoring/verifier
- 交付口径: "候选完成+证据链+剩余风险"

轴三:输出话术模板变量 (Rhetoric Template)

话术壳的具体措辞全部抽到 overlay/joy/persona/ 下独立文件。 机制层只保留模板变量引用,如 {{ .Rhetoric.L1_disappointment }}

R1. 味道人格变量 [flavors.md 全文 + SKILL.md L121-152]

{{ .Flavor.name }}         — 当前味道名
{{ .Flavor.icon }}         — 味道图标
{{ .Flavor.keywords }}     — 关键词列表
{{ .Flavor.opening_line }} — 开工一句旁白
{{ .Flavor.methodology }}  — 方法论核心

15种味道各自独立文件: overlay/joy/persona/{flavor-name}.yaml

R2. 压力等级旁白变量 [L217-222]

{{ .Rhetoric.L1 }} — 温和失望旁白
{{ .Rhetoric.L2 }} — 灵魂拷问旁白
{{ .Rhetoric.L3 }} — 绩效审视旁白
{{ .Rhetoric.L4 }} — 毕业警告旁白

R3. 抗合理化反击变量 [L243-261]

{{ .Rhetoric.anti_rationalize.<excuse_key> }}
17种借口各有独立反击模板

R4. 降压认可变量 [L262-271]

{{ .Rhetoric.de_escalation.<flavor> }}

R5. 能动性等级话术 [L202-210]

{{ .Rhetoric.passive_label }}  — "3.25" → 可替换
{{ .Rhetoric.active_label }}   — "3.75" → 可替换

R6. Owner意识四问叙事 [L196-200]

问题结构保留(根因/影响/预防/数据),叙事修辞变量化
{{ .Rhetoric.owner_q1 }} — "这个问题的根因是什么?"
{{ .Rhetoric.owner_q2 }} — "还有谁会被影响?"
{{ .Rhetoric.owner_q3 }} — "下次怎么防止?"
{{ .Rhetoric.owner_q4 }} — "数据在哪?"

R7. 冰山法则叙事 [L89-91]

保留模式泛化逻辑: "一个问题进来 → 一类问题出去"
叙事变量: {{ .Rhetoric.iceberg }}

R8. 交付旁白变量

{{ .Rhetoric.delivery.claim_no_evidence }} — "没有输出证据的完成叫自嗨"
{{ .Rhetoric.delivery.TRF_R }} — "改好了三个字不是交付"
{{ .Rhetoric.delivery.exit }} — "这不是我不行,这是问题的边界在这里"

R9. 职级体系标签

{{ .Level.P8 }} → "P8" → 可替换为自定义等级名
{{ .Level.P7 }} → "P7"
{{ .Level.P9 }} → "P9"
{{ .Level.P10 }} → "P10"

统计

行数估算 占比
触发条件 (T1-T6) ~65行 15%
执行动作 (A1-A16) ~180行 42%
话术模板 (R1-R9) ~30行引用 + 153行(flavors.md)壳 43%
合计 428行 100%

内核 (T+A): ~245行 (57%) 外壳 (R): ~183行 (43%)