Wave 7: collaboration framework hardening (W10.1-W10.4)
Some checks failed
CI / Determine matrix (push) Has been cancelled
CI / ${{ matrix.os }} / ${{ matrix.build_type }} (push) Has been cancelled

Pure agents/ documentation work — first contributions from 4
previously-idle members (yang/li/zhu/xu).

- W10.1 yang: WORKFLOW §11-§13 — collaboration state machine
  (9 states / 16 transitions), 10-item acceptance checklist,
  7-scenario failure rollback playbook (+227 lines)
- W10.2 li: agents/STATUS.md — live roster + group + Wave
  progress snapshot (65 lines)
- W10.3 zhu: agents/PROMPT_TEMPLATE.md — subagent prompt
  template with 6 anti-patterns + 1 worked example +
  4-step pre-dispatch checklist (193 lines)
- W10.4 xu: agents/POSTMORTEM.md — 5 incident records
  (PM-001 stale-obj, PM-002 boost-json, PM-003 cross-DLL-heap,
  PM-004 loader-fail-fast, PM-005 push-force) + 7 defensive
  rules (172 lines)

No code changes. WORKFLOW.md §9 has a pointer to the new
PROMPT_TEMPLATE.md. STATUS.md updated to reflect W10.1
completion (yang status flipped working→idle).

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
2026-05-27 05:52:02 +08:00
parent 5766938524
commit 004a81db96
8 changed files with 674 additions and 1 deletions

193
agents/PROMPT_TEMPLATE.md Normal file
View File

@@ -0,0 +1,193 @@
# 子代理 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> — 验收: 新条目出现在文件中
**验证步骤**:
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 子代理就冲突了。
✅ 修复: 任务范围给"必做/可做/不做"三档。
"可做"是子代理的自由发挥区,"不做"是硬边界。
```
---
## 正模式示例: 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](./WORKFLOW.md) — 原始模板(历史备份)
- [plugin-abi.md](../docs/reference/plugin-abi.md) — 完整任务产出示例
- [architect-lin/profile.md](./architect-lin/profile.md) — W9.4 执行记录