- W15.4 (杨帆): §11/§14 cross-reference audit — PASS-WITH-NOTES, 3 fixes needed - W15.5 (王测): §14 internal consistency — PASS-WITH-NOTES, 4 fixes needed - W15.6 (胡桐): self-check script + YAML verification — PASS - W15.7 (杨帆): Add E7 (no OPEN CRITICAL) to EXPRESS conditions, update T11 to include §14.4 A1-A4, add T18 finding status in §14.5 - W15.8 (王测): Fix findings-registry Close Date, add historical finding time-limit rule, add legacy audit Findings Summary note, add Fixes annotation to PROMPT_TEMPLATE - W15.9 (胡桐): Fix false-positive warning in check_agents_metadata.py (skip audits/ dir), add metadata check to §5 Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
8.0 KiB
8.0 KiB
子代理 Prompt 模板
版本: 1.0 (W10.3 朱晴设计) 用途: CEO 派活给子代理时复制此模板填写。字段标注"必填"的不可省略。
模板骨架
你扮演 dstalk 团队成员 <姓名> (<agent-id>) — <角色>。读 `agents/<agent-id>/profile.md` 了解你的人设。
**W<n>.<m> 任务**:<一句话目标>
**背景**:<2-4 句,说明为什么做这个、依赖什么前置工作、不做的后果是什么>
**请读**:
- <文件 1> ← 控制在 6 个以内,超过说明任务拆得不够细
- <文件 2>
- ...
**前序成果** (必填):
- `docs/reference/<某文档>` — W<x>.<y> <作者> 产出,<一句话关联>
- `agents/<id>/profile.md` — 前序任务记录,看历史决策
- <如无需依赖前序 Wave,写"无"并说明原因>
**任务范围** (必填):
- 必做: <具体、可验证的事情>
- 可做: <锦上添花但不强制的事>
- 不做: <明确排除的事情,即使看似相关也不碰>
**禁忌** (必填):
- 不要碰 `<某目录>/<某文件>` — <原因,如 "W<x>.<y> <人名> in-flight">
- 不要 <某行为> — <原因,如 "与 plugin-abi.md §3.2 冲突">
- <若当前无 in-flight 冲突,写"当前无 in-flight 工作区冲突"——但不能留空>
**交付清单** (必填,每条带验收标准):
1. <文件路径>: <具体改动内容> — 验收: <可观测的通过条件>
2. <文件路径>: <具体改动内容> — 验收: <可观测的通过条件>
3. `agents/<agent-id>/profile.md`: performance_log 追加 W<n>.<m> — 验收: 新条目出现在文件中
- **Finding 关联**(如有):Fixes: F-<Wave>-<N>
**验证步骤**:
cmake --build build --config Release && ctest --test-dir build -C Release
# 期望: 0 error, 0 warning, 100% smoke test pass
**字数上限**: 250 字(报告正文不含代码块,统一标准)
**profile.md 更新**: 必须追加,rating: <由执行者自评 (A/A-/B+/B/C)>
反模式案例
以下错误均来源于 Wave 1-9 实战总结:
反模式 1: "禁忌"为空
❌ 案例: W5.1 派陈风改 plugin_loader.cpp,同时派孙码改 host.cpp,
两人都改了 g_diag_callback 的声明方式,合并冲突导致回滚 40 分钟。
根因: CEO 没在 prompt 里写"不要碰 host.cpp 的 g_diag_callback"。
✅ 修复: 禁忌必须显式列出所有 in-flight 子代理的工作区文件。
格式: "不要碰 src/host.cpp — W5.1 孙码 in-flight,改 g_diag_callback"
反模式 2: "请读"列出 30 个文件
❌ 案例: W6.1 某次 prompt 列了 30 个文件要子代理读,
子代理上下文窗口超限,读完文件后只剩 2KB 预算用于实际工作,
输出质量断崖式下跌。
✅ 修复: "请读"控制在 6 个以内。超过说明任务粒度太粗,
CEO 应先拆成 2-3 个子任务再派。
反模式 3: "交付"用模糊词
❌ 案例: "改善错误处理"、"优化性能"、"增强可维护性"
— 子代理改了 5 个文件,CEO 验收时发现改的不是 CEO 想要的东西,
但 prompt 本身无法作为验收依据。
✅ 修复: 交付清单必须 numbered list + 每个条目有验收条件。
格式: "2. src/host.cpp: 增加 timeout 参数校验 — 验收: 传入 0 返回 -1"
反模式 4: 没说"前序成果"
❌ 案例: W8.1 子代理被要求"增加插件版本检查",
但 W1.1 林深已实现过类似的 compare_version(),
子代理重新实现了整个函数,逻辑还比原版少了一个边界检查。
✅ 修复: 前序成果字段必填。如果确实没有可依赖的前序工作,写"无"并说明原因。
反模式 5: 字数上限不统一
❌ 案例: W3 上限 200 字, W5.1 上限 300 字, W9.6 无上限,
子代理每次都要猜 CEO 想要多详细,报告质量波动大。
✅ 修复: 统一 250 字。如需更详细的内容(如大量 diff),
让子代理在报告末尾注明"详见 <文件>"即可。
反模式 6: 缺"任务范围"
❌ 案例: W2.1 陈风接到"修复跨 DLL 堆问题",任务只说改 plugin_loader.cpp,
但他顺便重构了 plugins/tools/file-io 的内存分配——
结果是好的但风险高,若当时 file-io 有 in-flight 子代理就冲突了。
✅ 修复: 任务范围给"必做/可做/不做"三档。
"可做"是子代理的自由发挥区,"不做"是硬边界。
反模式 7: 缺少 Finding 关联
❌ 案例: W14.3 曹武的修复任务修复了 F-13.5-1 (network_plugin TLS 证书验证),
但 prompt 和报告均未标注 Fixes: F-13.5-1,
导致 findings-registry 无法追踪修复进度,发现状态停留在 OPEN。
✅ 修复: 所有修复审计发现的任务必须在 prompt 交付清单中标注
Fixes: F-<Wave>-<N>(对应 findings-registry.md 中的发现 ID)。
示例:W14.3 曹武的修复任务应标注 `Fixes: F-13.5-1`。
正模式示例: W9.4 林深 (回写)
以下基于 W9.4 的实际交付成果回写 prompt,展示正确用法:
你扮演 dstalk 团队成员 林深 (architect-lin) — 架构师。读 `agents/architect-lin/profile.md` 了解你的人设。
**W9.4 任务**:撰写 `docs/reference/plugin-abi.md` Plugin ABI 契约文档
**背景**:跨 DLL 堆纪律在 W2.1 暴露问题后靠口头传递,需要一份规范性文档。
必须覆盖内存所有权、注册契约、生命周期、线程安全、依赖声明,
让插件作者和 host 维护者有统一的"法律文本"可查。
**请读**:
- dstalk-core/include/dstalk/dstalk_host.h
- dstalk-core/include/dstalk/dstalk_types.h
- dstalk-core/src/plugin_loader.cpp
- dstalk-core/src/host.cpp
- dstalk-core/src/service_registry.cpp
- dstalk-core/src/event_bus.cpp
**前序成果** (必填):
- W2.1 陈风: 跨 DLL 堆纪律的代码修复 (plugin_loader.cpp, host.cpp) — 作为 §3 的素材
- W1.1 林深: g_diag_callback atomic 修复 (host.cpp) — 作为 §6.1 的素材
- W2.2 曹武: api_key 安全清零模式 — 作为 §5 安全实践的参考
**任务范围** (必填):
- 必做: 覆盖 7 个契约要点 (DSTALK_API_VERSION / 内存所有权 / 跨DLL堆纪律 /
register_service / on_init-on_shutdown / 回调线程安全 / 依赖声明),
每个要点含代码示例 + 反例 + 设计理由
- 可做: 追加"变更历史"表格,风格参考现有 docs/ 文件
- 不做: 修改任何 .cpp / .hpp 源码文件。本任务只产出文档。
**禁忌** (必填):
- 不要碰 src/ 目录 — 这是纯文档任务
- 不要碰 agents/ 目录 — W9.3 杨帆 in-flight 改 WORKFLOW.md
- 不要改 dstalk_host.h 的 API_VERSION 值 — 这需要单独的 W 提案
**交付清单** (必填,每条带验收标准):
1. `docs/reference/plugin-abi.md`: 新建文件,约 200 行,7 个契约要点 — 验收: 文件存在且每个 § 有代码 snippet + 反例
2. `docs/README.md`: reference 区新增 plugin-abi.md 入口 — 验收: git diff 显示新增一行链接
3. `agents/architect-lin/profile.md`: performance_log 追加 W9.4 — 验收: 新条目出现在文件中
**验证步骤**:
cmake --build build --config Release && ctest --test-dir build -C Release
**字数上限**: 250 字
**profile.md 更新**: 必须追加,rating: <由执行者自评>
CEO 派活前 4 步检查
派活前逐项确认,缺一不可:
| # | 检查项 | 操作 | 写入模板字段 |
|---|---|---|---|
| 1 | 列 in-flight 工作区 | 查当前有哪些子代理在跑、他们各自改了哪些文件/目录 | 禁忌 |
| 2 | 找前序 Wave 产出 | 从 agents/*/profile.md 的 performance_log 追溯与本任务关联的之前 Wave 的产出文件 |
前序成果 |
| 3 | 设定任务范围三档 | 把需求拆成"必做/可做/不做",不做 = 硬边界 | 任务范围 |
| 4 | 统一字数上限 | 固定 250 字,不再按任务调整 | 字数上限 |
参考
- WORKFLOW.md §9 — 原始模板(历史备份)
- plugin-abi.md — 完整任务产出示例
- architect-lin/profile.md — W9.4 执行记录