mirror of
https://github.com/jnMetaCode/superpowers-zh.git
synced 2026-09-02 22:54:06 +08:00
fix(skills): 子智能体产出非中文 —— 中文路由规则到不了子智能体(#116)
## 根因
报告人说 SDD 产出的 task-N-report / review 是英文。查下来不是漏译:
4 个分派提示词模板本身全是中文,缺的是「输出用什么语言」这一条。
`using-superpowers` 里有这条规则:
用户用中文交流 → 所有输出使用中文
但它活在**控制者**的上下文里。而 SDD 的设计前提正是子智能体不继承会话
上下文(SKILL.md:「它们绝不应继承你会话的上下文或历史记录」)。所以这条
规则对子智能体从来没有生效过 —— 它只在控制者自己说话时管用。
## 改法
4 个分派提示词的输出格式段各加一行输出语言要求,全部落在 ``` 围栏**之内**
(围栏外的文字子智能体一个字都收不到):
- subagent-driven-development/implementer-prompt.md
- subagent-driven-development/task-reviewer-prompt.md
- subagent-driven-development/re-review-prompt.md
- requesting-code-review/code-reviewer.md
指令刻意划了边界:代码、标识符、命令、file:line、测试输出、提交信息**不翻译**;
ADDRESSED / NOT ADDRESSED、Critical / Important / Minor、✅❌⚠️ 保持原样 ——
控制者按这些词做判定,翻译了会打断流程。
四处都是对上游的偏离,各自在文件顶部就地声明(不写进围栏,免得污染提示词)。
## 固化成检查
新增 audit 4d:4 个分派提示词必须有输出语言指令,且必须在围栏内。
围栏外是**静默失效** —— 文件里搜得到「用中文写」,产出照样是英文。
已双向验证:删掉 → FAIL 并指明缺哪个文件;挪到围栏外 → FAIL 并提示移回围栏内。
audit 166 -> 170 pass。
## 未覆盖:task-N-brief.md
简报是 `scripts/task-brief` 从计划文件里机械抽取的,语言完全跟随计划本身,
提示词管不到。报告人的简报是英文,说明他的**计划文件**就是英文,那是另一个
问题。已在 issue 里请他确认计划文件的语言。
门禁:audit.sh 170 pass / 0 warn / 0 fail、verify-release.sh 90 pass / 0 fail
This commit is contained in:
@@ -255,6 +255,34 @@ fi
|
||||
popd >/dev/null
|
||||
rm -rf "$TMP"
|
||||
|
||||
# 4d. 分派提示词必须带输出语言指令,且必须落在 prompt 围栏之内(issue #116)
|
||||
#
|
||||
# 子智能体拿到的是全新上下文,using-superpowers 的「用户用中文交流 → 所有输出
|
||||
# 使用中文」只活在控制者上下文里,永远到不了它。所以中文要求必须写进分派提示词
|
||||
# 本身,而且必须在 ``` 围栏内 —— 落在围栏外就只是文档,子智能体一个字都收不到,
|
||||
# 而这种失效是静默的:文件里搜得到「用中文写」,产出照样是英文。
|
||||
DISPATCH_PROMPTS=(
|
||||
skills/subagent-driven-development/implementer-prompt.md
|
||||
skills/subagent-driven-development/task-reviewer-prompt.md
|
||||
skills/subagent-driven-development/re-review-prompt.md
|
||||
skills/requesting-code-review/code-reviewer.md
|
||||
)
|
||||
for f in "${DISPATCH_PROMPTS[@]}"; do
|
||||
if [ ! -f "$f" ]; then
|
||||
bad "分派提示词缺失: $f"
|
||||
continue
|
||||
fi
|
||||
inside=$(awk '/^```/ { infence = !infence; next } infence && /用中文写/ { c++ } END { print c+0 }' "$f")
|
||||
outside=$(awk '/^```/ { infence = !infence; next } !infence && /用中文写/ { c++ } END { print c+0 }' "$f")
|
||||
if [ "$inside" -ge 1 ]; then
|
||||
ok
|
||||
elif [ "$outside" -ge 1 ]; then
|
||||
bad "输出语言指令在围栏外,子智能体收不到: $f —— 把「用中文写」那行移进 prompt 的 \`\`\` 围栏内"
|
||||
else
|
||||
bad "分派提示词缺少输出语言指令: $f —— 子智能体不继承会话上下文,中文要求必须写进提示词(issue #116)"
|
||||
fi
|
||||
done
|
||||
|
||||
#==============================================================================
|
||||
hdr "Category 5: 工具计数一致性"
|
||||
#==============================================================================
|
||||
|
||||
@@ -4,6 +4,10 @@
|
||||
|
||||
**用途:** 在工作成果扩散到更多工作之前,对照需求和代码质量标准做一次审查。
|
||||
|
||||
> **superpowers-zh 增量:** 「输出格式」里的输出语言一行是本 fork 追加的,上游没有。
|
||||
> 子智能体拿到的是全新上下文,`using-superpowers` 里"用户用中文交流 → 所有输出使用中文"
|
||||
> 那条路由只活在控制者的上下文里,永远到不了它。要中文审查报告,就得写进提示词本身。
|
||||
|
||||
```
|
||||
Task tool(general-purpose):
|
||||
description: "审查代码改动"
|
||||
@@ -72,6 +76,10 @@ Task tool(general-purpose):
|
||||
|
||||
## 输出格式
|
||||
|
||||
**用中文写。** 结论、问题描述和理由都用中文。代码、标识符、命令、
|
||||
file:line 引用和测试输出照原样保留,不要翻译。Critical / Important /
|
||||
Minor 这三个严重度词保持原样。
|
||||
|
||||
### 优点
|
||||
[哪些地方做得好?具体一点。]
|
||||
|
||||
|
||||
@@ -2,6 +2,10 @@
|
||||
|
||||
分派实现子智能体时使用此模板。
|
||||
|
||||
> **superpowers-zh 增量:** 「报告格式」里的输出语言一行是本 fork 追加的,上游没有。
|
||||
> 子智能体拿到的是全新上下文,`using-superpowers` 里"用户用中文交流 → 所有输出使用中文"
|
||||
> 那条路由只活在控制者的上下文里,永远到不了它。要中文报告,就得写进提示词本身。
|
||||
|
||||
```
|
||||
Subagent (general-purpose):
|
||||
description: "实现任务 N:[任务名称]"
|
||||
@@ -114,6 +118,10 @@ Subagent (general-purpose):
|
||||
|
||||
## 报告格式
|
||||
|
||||
**用中文写。** 报告文件的正文、你的疑虑、以及你回传的最终消息都用中文。
|
||||
代码、标识符、命令、file:line 引用、测试输出和提交信息照原样保留,
|
||||
不要翻译。
|
||||
|
||||
把你的完整报告写到 [REPORT_FILE]:
|
||||
- 你实现了什么(如果被阻塞,则是你尝试了什么)
|
||||
- 你测试了什么以及测试结果
|
||||
|
||||
@@ -6,6 +6,10 @@
|
||||
|
||||
**目的:** 核实上一次审查的每一条发现都已解决,且修复本身没有破坏任何东西。
|
||||
|
||||
> **superpowers-zh 增量:** 「输出格式」里的输出语言一行是本 fork 追加的,上游没有。
|
||||
> 理由同 [implementer-prompt.md](implementer-prompt.md):子智能体不继承会话上下文,
|
||||
> `using-superpowers` 的中文路由规则到不了它。
|
||||
|
||||
```
|
||||
Subagent (general-purpose):
|
||||
description: "复审任务 N 第 R 轮修复"
|
||||
@@ -59,6 +63,10 @@ Subagent (general-purpose):
|
||||
|
||||
## 输出格式
|
||||
|
||||
**用中文写。** 结论、发现描述和理由都用中文。代码、标识符、命令、
|
||||
file:line 引用和测试输出照原样保留,不要翻译。ADDRESSED / NOT ADDRESSED
|
||||
这两个状态词保持原样——控制者按它们做判定。
|
||||
|
||||
你的最终消息就是报告本身:直接从第一条发现的结论开始。每一行都应该是
|
||||
一个结论、一条带 file:line 的发现,或者一项你实际做过的检查——
|
||||
不要开场白,不要过程旁白。
|
||||
|
||||
@@ -5,6 +5,10 @@
|
||||
|
||||
**目的:** 核实一个任务的实现与其需求匹配(不多不少)且构建良好(整洁、有测试、可维护)
|
||||
|
||||
> **superpowers-zh 增量:** 「输出格式」里的输出语言一行是本 fork 追加的,上游没有。
|
||||
> 理由同 [implementer-prompt.md](implementer-prompt.md):子智能体不继承会话上下文,
|
||||
> `using-superpowers` 的中文路由规则到不了它。
|
||||
|
||||
```
|
||||
Subagent (general-purpose):
|
||||
description: "审查任务 N(规格 + 质量)"
|
||||
@@ -122,6 +126,10 @@ Subagent (general-purpose):
|
||||
|
||||
## 输出格式
|
||||
|
||||
**用中文写。** 结论、发现描述和理由都用中文。代码、标识符、命令、
|
||||
file:line 引用和测试输出照原样保留,不要翻译。ADDRESSED 之类的
|
||||
状态词、以及 ✅/❌/⚠️ 标记保持原样。
|
||||
|
||||
### 规格合规性
|
||||
|
||||
- ✅ 符合规格 | ❌ 发现问题:[缺失/多余/理解偏差的内容,
|
||||
|
||||
Reference in New Issue
Block a user