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

361 lines
11 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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%)