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:
AI不止语
2026-08-11 21:04:05 +08:00
parent 4a53c1e6ab
commit d3db168041
5 changed files with 60 additions and 0 deletions

View File

@@ -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: 工具计数一致性"
#==============================================================================

View File

@@ -4,6 +4,10 @@
**用途:** 在工作成果扩散到更多工作之前,对照需求和代码质量标准做一次审查。
> **superpowers-zh 增量:** 「输出格式」里的输出语言一行是本 fork 追加的,上游没有。
> 子智能体拿到的是全新上下文,`using-superpowers` 里"用户用中文交流 → 所有输出使用中文"
> 那条路由只活在控制者的上下文里,永远到不了它。要中文审查报告,就得写进提示词本身。
```
Task toolgeneral-purpose:
description: "审查代码改动"
@@ -72,6 +76,10 @@ Task toolgeneral-purpose:
## 输出格式
**用中文写。** 结论、问题描述和理由都用中文。代码、标识符、命令、
file:line 引用和测试输出照原样保留不要翻译。Critical / Important /
Minor 这三个严重度词保持原样。
### 优点
[哪些地方做得好?具体一点。]

View File

@@ -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]
- 你实现了什么(如果被阻塞,则是你尝试了什么)
- 你测试了什么以及测试结果

View 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 的发现,或者一项你实际做过的检查——
不要开场白,不要过程旁白。

View File

@@ -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 之类的
状态词、以及 ✅/❌/⚠️ 标记保持原样。
### 规格合规性
- ✅ 符合规格 | ❌ 发现问题:[缺失/多余/理解偏差的内容,