W15: conflict resolution — E7 CRITICAL gate, T11/T18 audit refs, §5 metadata check, PROMPT_TEMPLATE Fixes (W15.4-W15.9)
Some checks failed
CI / Determine matrix (push) Has been cancelled
CI / ${{ matrix.os }} / ${{ matrix.build_type }} (push) Has been cancelled

- 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>
This commit is contained in:
2026-05-27 18:33:02 +08:00
parent 0e41c8c6f6
commit f010af6c07
7 changed files with 62 additions and 11 deletions

View File

@@ -38,6 +38,7 @@
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
@@ -118,6 +119,18 @@ cmake --build build --config Release && ctest --test-dir build -C Release
"可做"是子代理的自由发挥区,"不做"是硬边界。
```
### 反模式 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 林深 (回写)

View File

@@ -45,6 +45,7 @@
- **每波结束**:跑一次完整 `cmake --build build --config Release` + `ctest -R smoke`
- **预存 bug**:发现编译错时先 `git stash` 试 master 是否干净——区分"子代理引入"和"预存 bug"。预存 bug CEO 自己改不甩锅
- **stale obj 问题**clang-cl 增量构建偶尔不识别源文件修改lsp_plugin/tools_plugin 踩过坑),症状是编译报告的行号源码内容与磁盘不符。解法:`rm -f build/**/<file>.cpp.obj` 强制重编
- **元数据完整性**:每波开始前运行 `python scripts/check_agents_metadata.py` 验证 agents/ 元数据完整性YAML / rating / 引用一致性0 error 才能进入执行阶段
- **CEO 验收通过后立刻 commit + push**(用户硬规则:"别忘了每次通过ceo验收的提交git并推送"
## 6. 关键技术约束(已踩坑,全员必读)
@@ -195,7 +196,7 @@
### 11.2.1 EXPRESS 快跳路径
快跳EXPRESS是将 PROPOSE&rarr;VOTE&rarr;OPTIMIZE&rarr;INTEGRATE 压缩为 PROPOSE&rarr;EXECUTE 的合法短路径。快跳适用条件为以下 **全部 6** 同时满足:
快跳EXPRESS是将 PROPOSE&rarr;VOTE&rarr;OPTIMIZE&rarr;INTEGRATE 压缩为 PROPOSE&rarr;EXECUTE 的合法短路径。快跳适用条件为以下 **全部 7** 同时满足:
| # | 条件 | 验证方式 |
|---|------|----------|
@@ -205,8 +206,9 @@
| E4 | 不新增公共 API 面:无新 `dstalk_` 前缀函数声明、无新插件接口结构体 | diff 中公共头文件无新增函数声明 |
| E5 | 不涉及跨模块依赖变更:改动文件涉及 &le; 2 个顶层目录(如 `dstalk-core/`、单个 `plugins/<name>/` | `git diff --dirstat HEAD` 目录数 &le; 2 |
| E6 | CEO 在 WORKFLOW.md &sect;7 任务条目中显式标注 `[EXPRESS]` | 人工核对 &sect;7 |
| E7 | 无 OPEN 状态的 CRITICAL 发现(见 §14.3 CRITICAL 阻塞规则) | `grep "CRITICAL.*OPEN" agents/audits/findings-registry.md` 输出为空 |
满足全部 E1-E6 &rarr; CEO 可声明 EXPRESS 快跳,任务直接进入 EXECUTE跳过 VOTE / OPTIMIZE / INTEGRATE对应转换规则 **T17**
满足全部 E1-E7 &rarr; CEO 可声明 EXPRESS 快跳,任务直接进入 EXECUTE跳过 VOTE / OPTIMIZE / INTEGRATE对应转换规则 **T17**
**EXPRESS 升级**:若执行者在 EXECUTE 阶段发现任务实际超出 EXPRESS 条件E1-E5 任一条不再成立),须立即报告 CEO。CEO 核实后移除 `[EXPRESS]` 标签并替换为 `[ESCALATED]`,任务从 EXECUTE 退回 VOTE 走完整治理路径,对应转换规则 **T18**
@@ -224,13 +226,13 @@
| T8 | EXECUTE | INSPECT | 所有指派的执行者子代理均已返回 done 报告(含 cmake build 0 error + ctest 100% pass 自述) | 自动(全员 done |
| T9 | EXECUTE | ROLLBACK | 任一执行者报告以下任一情况且 CEO 判定不可原地修复:段错误 / ABI 破坏 / CMake 无法 configure / 数据文件损坏 | CEO |
| T10 | EXECUTE | ABORT | CEO 判定需求不再成立 OR 外部依赖不可用 | CEO |
| T11 | INSPECT | SUCCESS | §12 验收清单全部通过cmake configure 0 error AND cmake build 0 error 0 warning(改动文件) AND ctest 100% pass AND 测试目标数 &ge; 上一波 AND profile.md 已更新 AND 无未跟踪临时文件 AND git diff 无无关改动 | CEO |
| T11 | INSPECT | SUCCESS | §12 验收清单 + §14.4 A1-A4 全部通过cmake configure 0 error AND cmake build 0 error 0 warning(改动文件) AND ctest 100% pass AND 测试目标数 &ge; 上一波 AND profile.md 已更新 AND 无未跟踪临时文件 AND git diff 无无关改动 | CEO |
| T12 | INSPECT | EXECUTE | 验收失败但满足全部:根因可定位到具体文件+行号 AND &le;2 个文件 AND &le;30 行改动 AND 不需重新设计 | CEO |
| T13 | INSPECT | OPTIMIZE | 验收暴露以下任一设计问题:接口不兼容(编译通过但运行时错)/ 性能偏差 &gt;50% / 架构假设被证伪(如单线程假设在多线程场景崩溃) | CEO |
| T14 | INSPECT | ROLLBACK | 验收发现不可逆副作用:文件错误删除或覆盖 / 二进制损坏 / .git 目录状态异常 | CEO |
| T15 | INSPECT | ABORT | CEO 判定继续修复成本 &gt; 重新执行成本(需改 &gt;5 个文件且涉及多个执行者重新协调) | CEO |
| T16 | ANY | ABORT | 用户明确指令中止 OR 触发安全红线(凭证泄露、未加密敏感数据落盘) | CEO |
| T17 | PROPOSE | EXECUTE | EXPRESS 快跳:同时满足 E1-E6(见 &sect;11.2.1 EXPRESS 条件表AND CEO 在 &sect;7 任务条目标注 `[EXPRESS]` | CEO |
| T17 | PROPOSE | EXECUTE | EXPRESS 快跳:同时满足 E1-E7(见 &sect;11.2.1 EXPRESS 条件表AND CEO 在 &sect;7 任务条目标注 `[EXPRESS]` | CEO |
| T18 | EXECUTE | VOTE | EXPRESS 升级:执行者报告任务实际范围超出 EXPRESS 条件E1-E5 任一条不再成立AND CEO 核实后将 `[EXPRESS]` 改为 `[ESCALATED]` | CEO |
### 11.4 状态进入/退出动作
@@ -439,6 +441,8 @@ CRITICAL 阻塞规则:
- 如果进入 EXECUTE 阶段时仍有 OPEN 状态的 CRITICAL 发现CEO 必须明确决策:(a) 本波优先修 CRITICAL或 (b) 标记 WONTFIX附理由或 (c) 降级为 HIGH附降级理由
- 不允许带着 OPEN CRITICAL 发现进入 SUCCESS
**历史发现时限计算**:对于在本机制建立之前已存在的审计发现(如 F-11.x 系列),时限从 findings-registry.md 初始化日期2026-05-27开始计算而非从原始审计日期计算。即 F-11.1-1 (HIGH) 的修复期限为 2026-05-27 + 2 Wave = W17 前。
### 14.4 CEO 审查协议(新增验收项)
在 §12 验收清单基础上INSPECT 阶段追加以下检查项:
@@ -468,6 +472,7 @@ CRITICAL 阻塞规则:
| INSPECT | 1. 执行 §14.4 A1-A4 检查 2. 通过的发现 FIXED → VERIFIED → CLOSED 3. 失败的发现退回 ASSIGNEDREOPEN | CEO |
| SUCCESS | 1. 本波 CLOSED 的发现从 Open 分区移到 Closed 分区 2. 记录关闭日期和 Fix Wave | CEO |
| ABORT | 本波 ASSIGNED 的发现回退到 OPEN修复未发生 | CEO |
| (T18) | 本波 ASSIGNED 的 finding 保留 ASSIGNED 状态,不回退 OPEN升级不是中止 | CEO |
### 14.6 审计人职责
@@ -479,6 +484,8 @@ CRITICAL 阻塞规则:
审计人完成登记后通知 CEO 或 QA 组长进行 triage。
**存量审计报告**`agents/audits/` 中已有的审计报告W11.1-W13.6)缺少 Findings Summary 小节。QA 组长应在每个存量报告被引用时补充该小节,优先级为 MEDIUM不阻塞当前工作。
### 14.7 关联文档
- [findings-registry.md](audits/findings-registry.md) — 发现注册表(单一事实来源)

View File

@@ -29,5 +29,11 @@ performance_log:
- date: 2026-05-27
event: "W15.1: 为 WORKFLOW.md §11 协作状态机设计 EXPRESS 快跳路径。定义 E1-E6 六项客观准入条件,新增 T17(快跳入口) + T18(升级回退) 两条转换规则§11.2 图增加快跳边标注,新增 §11.2.1 完整说明。建议将 EXPRESS 作为正式快跳标签(非新增状态,避免状态爆炸)"
rating: completed
- date: 2026-05-27
event: "W15.4: 交叉审查 §11 EXPRESS 快跳与 §14 审计闭环集成。发现 2 处程序性遗漏EXPRESS 准入缺 §14.3 CRITICAL 阻断检查、T18 升级缺少 ASSIGNED finding 状态处置)和 1 处措辞不一致T11 未引用 §14.4 A1-A4。结论 PASS-WITH-NOTES建议追加 E7 条件 + §14.5 补充 T18 行 + 修正 T11 措辞"
rating: completed
- date: 2026-05-27
event: "W15.7: 根据 W15.4 审查发现修复 WORKFLOW.md 3 处交叉引用。Fix1: §11.2.1 新增 E7 条件(CRITICAL 发现清零) + 正文 6→7 条 + E1-E6→E1-E7 + T17 同步更新。Fix2: §11.3 T11 验收标准追加 §14.4 A1-A4。Fix3: §14.5 集成点表新增 (T18) 行(ASSIGNED finding 不回退 OPEN)。无源代码修改,无 §13 变动"
rating: completed
current_groups: []
---

View File

@@ -25,7 +25,9 @@
## Closed Findings
| ID | Severity | Source | Title | Closed Date | Fix Wave | Verified By |
> Closed Findings 表必须包含 Close Date 字段(格式 YYYY-MM-DD记录发现关闭日期。字段定义见 WORKFLOW.md §14.1。
| ID | Severity | Source | Title | Close Date | Fix Wave | Verified By |
|----|----------|--------|-------|-------------|----------|-------------|
| — | — | — | 暂无已关闭发现 | — | — | — |

View File

@@ -42,6 +42,23 @@ performance_log:
${CMAKE_BINARY_DIR}/bin 作为防御性显式声明;删除陈旧 build/dstalk-cli/dstalk-cli.exe。
验证: clean rebuild 后仅 build/bin/dstalk-cli.exe 存在ctest 4/4 pass。
rating: done
- date: 2026-05-27
event: "W15.6: 验证 check_agents_metadata.py 运行结果 + 集成分析 + YAML 解析确认"
detail: >
运行结果: default/json 模式 0 error 1 warning (audits/ 目录无 profile.md, 假阳性);
--strict 模式 exit code 2 (warning 升格为 error)。
YAML 验证: engineer-sun + security-cao 的 profile.md 均被 yaml.safe_load 正确解析。
集成建议: refresh_status.py 可 import 调用 check 函数作为前置门禁, 发现 error 时拒绝生成 STATUS.md。
WORKFLOW.md §5 缺少元数据自查项, 建议新增 "每波开始前运行 check_agents_metadata.py"。
rating: done
- date: 2026-05-27
event: "W15.9: 修复 check_agents_metadata.py 假阳性 warning + 更新 WORKFLOW.md §5"
detail: >
Fix 1: check_agents_metadata.py 目录扫描跳过 agents/audits/ (非 agent 目录),将所有
`child.name == 'groups'` 改为 `child.name in ('groups', 'audits')`
Fix 2: WORKFLOW.md §5 新增 "元数据完整性" 条目,要求每波开始前运行 check_agents_metadata.py 验证。
Fix 3: 修复后运行 0 errors 0 warnings5 checks passed。
rating: done
- date: 2026-05-27
event: "W15.3: 设计 agents/ 目录元数据自检机制 (scripts/check_agents_metadata.py)"
detail: >

View File

@@ -39,6 +39,12 @@ performance_log:
- date: 2026-05-27
event: "W15.2: 设计审计→修复闭环机制。定义 findings-registry.md 格式 + OPEN→ASSIGNED→FIXED→VERIFIED→CLOSED 状态生命周期 + 4级严重度自动转化规则 + WORKFLOW.md §14 完整草案。从 W11.1/W11.7 提取 10 条历史发现初始化注册表"
rating: A
- date: 2026-05-27
event: "W15.5: §14 审计闭环内部一致性检查。发现 5 项不一致Closed Date 未定义/C3 历史发现时限歧义/8 份审计报告缺 Findings Summary/PROMPT_TEMPLATE 缺 Fixes 标注/findings-registry L4 引用偏差。结论 PASS-WITH-NOTES4 项修复建议已提交。"
rating: A
- date: 2026-05-27
event: "W15.8: 根据 W15.5 审查发现修复 §14 内部问题 + PROMPT_TEMPLATE 缺失标注。Fix1: findings-registry.md Closed Date→Close Date + 字段定义补注。Fix2: WORKFLOW.md §14.3 新增历史发现时限计算说明。Fix3: WORKFLOW.md §14.6 新增存量审计报告缺失 Findings Summary 处理指南。Fix4: PROMPT_TEMPLATE.md 交付清单新增 Finding 关联行 + 反模式7。4项全部完成。"
rating: A
current_groups:
- grp-quality-core (组长)
---

View File

@@ -116,7 +116,7 @@ def check_yaml_parse(agents_dir):
# Profile files
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
pf = child / 'profile.md'
if not pf.is_file():
@@ -158,7 +158,7 @@ def check_rating_range(agents_dir):
findings = []
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
pf = child / 'profile.md'
if not pf.is_file():
@@ -206,7 +206,7 @@ def check_group_refs(agents_dir):
valid_groups.add(str(gid).strip())
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
pf = child / 'profile.md'
if not pf.is_file():
@@ -243,7 +243,7 @@ def check_member_refs(agents_dir):
# Collect valid agent_ids
valid_agents = set()
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
if (child / 'profile.md').is_file():
valid_agents.add(child.name)
@@ -286,7 +286,7 @@ def check_duplicate_ids(agents_dir):
agent_ids = {}
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
pf = child / 'profile.md'
if not pf.is_file():
@@ -306,7 +306,7 @@ def check_duplicate_ids(agents_dir):
# Also verify dir name matches agent_id
for child in sorted(agents_dir.iterdir()):
if not child.is_dir() or child.name.startswith('.') or child.name == 'groups':
if not child.is_dir() or child.name.startswith('.') or child.name in ('groups', 'audits'):
continue
pf = child / 'profile.md'
if not pf.is_file():