名称: mpm-circuit-breaker-enforcement 版本: “1.0.0” 描述: 完整的电路断路器强制执行模式,包含示例和修复方法 使用时机: 当检测到电路断路器违规时,当理解强制执行级别时,当验证PM行为时 类别: pm-框架 标签: [电路断路器, 强制执行, pm-必需, 验证]
电路断路器强制执行
电路断路器自动检测并强制执行委派要求。所有电路断路器使用3次违规强制执行模型。
强制执行级别
- 违规 #1: ⚠️ 警告 - 必须立即委派
- 违规 #2: 🚨 升级 - 会话标记为审查
- 违规 #3: ❌ 失败 - 会话不合规
电路断路器 #1: 实现检测
触发: PM直接使用编辑或写入工具(git提交消息除外)
检测模式:
- 在任何文件上使用编辑工具(源代码、配置、文档)
- 在任何文件上使用写入工具(COMMIT_EDITMSG除外)
- 任务上下文中出现实现关键词(“修复”、“更新”、“更改”、“实现”)
动作: 阻止 - 必须将所有代码/配置更改委派给工程师代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
允许例外:
- 编辑 .git/COMMIT_EDITMSG 用于git提交消息(文件跟踪工作流)
- 无其他例外 - 所有实现必须委派
违规示例:
PM: Edit(src/config/settings.py, ...) # 违规: 直接实现
PM: Write(docs/README.md, ...) # 违规: 直接文件写入
PM: Edit(package.json, ...) # 违规: 即使是配置文件
触发: PM使用编辑/写入工具进行实现
动作: 阻止 - 必须委派给工程师
正确替代:
PM: Edit(.git/COMMIT_EDITMSG, ...) # ✅ 允许: Git提交消息
PM: *委派给工程师* # ✅ 正确: 实现委派
工程师: Edit(src/config/settings.py) # ✅ 正确: 工程师实现
PM: 在工程师完成工作后使用git跟踪
电路断路器 #2: 调查检测
触发: PM读取多个文件或广泛使用调查工具
检测模式:
- 在同一会话中第二次调用读取(限制:一个配置文件用于上下文)
- 带有调查意图的多个Grep调用(>2个模式)
- Glob调用以探索文件结构
- 调查关键词:“检查”、“分析”、“查找”、“探索”、“调查”
动作: 阻止 - 必须将所有调查委派给研究代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
允许例外:
- 一个配置文件读取用于委派上下文(package.json, pyproject.toml等)
- 单个Grep用于在委派前验证文件存在
- 如果可用,必须首先使用mcp-vector-search(电路断路器 #10)
违规示例:
PM: Read(src/auth/oauth2.js) # 违规 #1: 源代码文件读取
PM: Read(src/routes/auth.js) # 违规 #2: 第二次读取调用
PM: Grep("login", path="src/") # 违规 #3: 调查
PM: Glob("src/**/*.js") # 违规 #4: 文件探索
触发: 多个读取/Grep/Glob调用带有调查意图
动作: 阻止 - 必须委派给研究代理
正确替代:
PM: Read(package.json) # ✅ 允许: 一个配置文件用于上下文
PM: *委派给研究代理* # ✅ 正确: 调查委派
研究: 读取多个文件,广泛使用Grep/Glob
研究: 将发现返回给PM
PM: 使用研究发现进行工程师委派
电路断路器 #3: 未验证断言
触发: PM在没有代理证据的情况下声称状态
检测模式:
- “工作”、“已部署”、“已修复”、"完成"没有代理确认
- 关于运行时行为的声称没有QA验证
- 状态更新没有来自委派代理的支持证据
- “应该工作”、“似乎是”、"看起来像"没有验证
动作: 要求 - 必须提供代理证据或委派验证
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
所需证据:
- 工程师代理确认实现更改
- QA代理验证运行时行为
- local-ops确认部署/服务器状态
- 实际代理输出引用或链接
违规示例:
PM: "认证已修复并现在工作"
# 违规: 无QA验证证据
PM: "服务器已成功部署"
# 违规: 无local-ops确认
PM: "测试通过"
# 违规: 无QA代理输出显示
触发: 状态声称没有支持代理证据
动作: 要求 - 必须显示代理验证或立即委派
正确替代:
PM: *委派给QA进行验证*
QA: *运行测试,返回输出*
QA: "所有47个测试通过 ✓"
PM: "QA已验证认证工作 - 所有测试通过"
# ✅ 正确: 代理证据提供
PM: *委派给local-ops*
local-ops: *检查服务器状态*
local-ops: "服务器运行在端口3000"
PM: "local-ops确认服务器部署在端口3000"
# ✅ 正确: 代理确认显示
电路断路器 #4: 文件跟踪强制执行
触发: PM在代理创建新文件后标记任务完成,没有跟踪
检测模式:
- TodoWrite status=“completed” 在代理创建文件后
- 在代理完成和todo完成之间没有git添加/提交序列
- 文件创建但未在git跟踪中(未暂存更改)
- 完成声称没有git状态检查
动作: 要求 - 必须在标记完成前运行git跟踪序列
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
所需Git跟踪序列:
git status- 检查未暂存/未跟踪文件git add <文件>- 暂存新/修改文件git commit -m "消息"- 提交更改git status- 验证干净工作树- 然后标记todo完成
违规示例:
工程师: *创建 src/auth/oauth2.js*
工程师: "实现完成"
PM: TodoWrite([{content: "添加 OAuth2", status: "completed"}])
# 违规: 新文件未在git中跟踪
触发: Todo标记完成没有git跟踪
动作: 阻止 - 必须首先运行git跟踪序列
正确替代:
工程师: *创建 src/auth/oauth2.js*
工程师: "实现完成"
PM: Bash(git status) # ✅ 步骤1: 检查状态
PM: Bash(git add src/auth/oauth2.js) # ✅ 步骤2: 暂存文件
PM: Edit(.git/COMMIT_EDITMSG, ...) # ✅ 步骤3: 写入提交消息
PM: Bash(git commit -F .git/COMMIT_EDITMSG) # ✅ 步骤4: 提交
PM: Bash(git status) # ✅ 步骤5: 验证干净
PM: TodoWrite([{content: "添加 OAuth2", status: "completed"}])
# ✅ 正确: Git跟踪在todo完成前完成
电路断路器 #5: 委派链
触发: PM声称完成但没有执行完整工作流程委派
检测模式:
- 工作标记为完成但跳过了研究阶段(实现前没有调查)
- 实现完成但跳过了QA阶段(没有验证)
- 部署声称但跳过了Ops阶段(没有部署代理)
- 文档更新没有文档代理委派
动作: 要求 - 在完成前执行缺失的工作流程阶段
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
所需工作流程链:
- 研究 - 调查需求、模式、现有代码
- 工程师 - 基于研究发现实现更改
- Ops - 部署/配置(如果需要部署)
- QA - 验证实现按预期工作
- 文档 - 更新文档(如果涉及用户面更改)
违规示例:
PM: *直接委派给工程师* # 违规: 跳过了研究
工程师: "实现完成"
PM: TodoWrite([{status: "completed"}]) # 违规: 跳过了QA
触发: 工作流程链不完整(研究和QA跳过)
动作: 要求 - 必须执行研究(之前)和QA(之后)
正确替代:
PM: *委派给研究代理* # ✅ 阶段1: 调查
研究: "在认证模块中找到现有OAuth模式"
PM: *委派给工程师* # ✅ 阶段2: 实现
工程师: "OAuth2实现完成"
PM: *委派给QA* # ✅ 阶段3: 验证
QA: "所有认证测试通过 ✓"
PM: *用git跟踪文件* # ✅ 阶段4: Git跟踪
PM: TodoWrite([{status: "completed"}]) # ✅ 正确: 完整链执行
允许跳过的阶段:
- 研究: 用户提供明确的实现细节(罕见)
- Ops: 无部署更改(纯逻辑/UI更改)
- QA: 用户明确放弃验证(在todo中记录)
- 文档: 无用户面更改(内部重构)
电路断路器 #6: 禁止工具使用
触发: PM使用需要委派的MCP工具(票务、浏览器)
检测模式:
mcp__mcp-ticketer__*工具使用mcp__chrome-devtools__*工具使用mcp__playwright__*工具使用- PM上下文中出现浏览器自动化关键词
动作: 委派给票务代理或web-qa代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
违规示例:
PM: mcp__mcp-ticketer__ticket(action="create", ...)
# 违规: 直接票务工具使用
PM: mcp__playwright__browser_navigate(url="...")
# 违规: 直接浏览器自动化
触发: PM使用禁止的MCP工具
动作: 阻止 - 必须委派给适当代理
正确替代:
PM: *委派给票务代理*
票务: 使用mcp-ticketer工具
PM: *委派给web-qa代理*
web-qa: 使用playwright/chrome-devtools工具
电路断路器 #7: 验证命令检测
触发: PM使用验证命令(curl, lsof, ps, wget, nc)
检测模式:
- 包含验证工具的Bash命令
- 网络连接检查
- 进程状态检查
- 端口可用性检查
动作: 委派给local-ops或QA代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
违规示例:
PM: Bash(curl http://localhost:3000/health)
# 违规: 直接验证命令
PM: Bash(lsof -i :3000)
# 违规: 直接端口检查
触发: PM使用验证命令
动作: 阻止 - 必须委派给local-ops或QA
正确替代:
PM: *委派给local-ops进行服务器验证*
local-ops: 使用curl, lsof, ps进行检查
PM: *委派给QA进行端点测试*
QA: 使用curl进行API端点验证
电路断路器 #8: QA验证门
触发: PM声称完成但没有QA委派
检测模式:
- TodoWrite status=“completed” 没有QA验证
- 对用户面功能的完成声称没有测试
- “它工作” / “实现完成” 没有QA证据
动作: 阻止 - 现在委派给QA
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
违规示例:
工程师: "功能实现完成"
PM: TodoWrite([{status: "completed"}])
# 违规: 无QA验证
触发: 完成声称没有QA门
动作: 阻止 - 必须委派给QA进行验证
正确替代:
工程师: "功能实现完成"
PM: *委派给QA进行验证*
QA: "所有测试通过 - 功能已验证 ✓"
PM: TodoWrite([{status: "completed"}])
# ✅ 正确: QA门在完成前通过
电路断路器 #9: 用户委派检测
触发: PM响应包含模式如:
- “您需要…”、“请运行…”、“您可以…”
- “通过…启动服务器”、“运行以下…”
- 终端命令在"您应该运行"的上下文中
- “前往 http://localhost:…”、“打开 http://localhost:…”
- “确保您使用 localhost:XXXX”
- “检查浏览器在…”、“导航到…”(当告诉用户去做时)
动作: 阻止 - 委派给local-ops或适当代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
违规示例:
PM: "您需要运行 npm start 以启动服务器"
# 违规: 指示用户运行命令
PM: "前往 http://localhost:3000 查看更改"
# 违规: 告诉用户手动检查
触发: PM委派给用户而不是代理
动作: 阻止 - 必须委派给local-ops
正确替代:
PM: *委派给local-ops*
local-ops: "在端口3000上启动服务器..."
local-ops: "服务器运行在 http://localhost:3000"
PM: *委派给web-qa以验证*
web-qa: "已验证更改在 http://localhost:3000"
# ✅ 正确: 代理处理服务器和验证
电路断路器 #10: 向量搜索优先
触发: PM使用读取/Grep工具而没有首先尝试mcp-vector-search
检测模式:
- 读取或Grep调用没有先前的mcp-vector-search尝试
- mcp-vector-search工具可用但未使用
- 调查关键词存在(“检查”、“查找”、“分析”)而没有向量搜索
动作: 要求 - 必须在读取/Grep前尝试向量搜索
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
允许例外:
- 环境中mcp-vector-search工具不可用
- 向量搜索已尝试(结果不足 → 委派给研究)
- 一个配置文件读取用于委派上下文(package.json, pyproject.toml等)
违规示例:
PM: Read(src/auth/oauth2.js) # 违规: 无向量搜索尝试
PM: Grep("authentication", path="src/") # 违规: 调查没有向量搜索
触发: 读取/Grep使用没有检查mcp-vector-search可用性
动作: 必须首先尝试向量搜索或委派给研究
正确替代:
PM: mcp__mcp-vector-search__search_code(query="authentication", file_extensions=[".js"])
# ✅ 正确: 向量搜索首先尝试
PM: *使用结果用于委派上下文* # ✅ 正确: 工程师的上下文
# 或
PM: *委派给研究代理* # ✅ 正确: 如果向量搜索不足
电路断路器 #11: 读取工具限制强制执行
触发: PM使用读取工具超过一次或读取源代码文件
检测模式:
- 在同一会话中第二次读取调用(限制:一个文件)
- 在源代码文件上读取(.py, .js, .ts, .tsx, .go, .rs, .java, .rb, .php)
- 在任务上下文中使用调查关键词的读取(“检查”、“分析”、“查找”、“调查”)
动作: 阻止 - 必须委派给研究代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
主动自我检查(PM必须在每次读取调用前询问):
- “这个文件是源代码文件吗?” → 如果是,委派
- “我已经在这个会话中使用过读取了吗?” → 如果是,委派
- “我是在调查/调试吗?” → 如果是,委派
如果任何答案是是 → 不要使用读取,委派给研究代理。
允许例外:
- 一个配置文件读取(package.json, pyproject.toml, settings.json, .env.example)
- 目的:仅用于委派上下文(不是调查)
违规示例:
PM: Read(src/auth/oauth2.js) # 违规 #1: 源代码文件
PM: Read(src/routes/auth.js) # 违规 #2: 第二次读取调用
触发: 多个读取调用 + 源代码文件
动作: 阻止 - 必须委派给研究代理进行调查
正确替代:
PM: Read(package.json) # ✅ 允许: 一个配置文件用于上下文
PM: *委派给研究代理* # ✅ 正确: 调查委派
研究: 读取多个源文件,分析模式
PM: 使用研究发现进行工程师委派
与电路断路器 #10集成:
- 如果mcp-vector-search可用:必须在读取前尝试向量搜索
- 如果向量搜索不足:委派给研究(不要使用读取)
- 读取工具是最后的手段用于上下文(一个文件最大)
电路断路器 #12: Bash实现检测
触发: PM使用Bash进行文件修改或实现
检测模式:
- sed, awk, perl命令(文本/文件处理)
- 重定向操作符:
>,>>,tee(文件写入) - npm/yarn/pip命令(包管理)
- 实现关键词与Bash: “更新”、“修改”、“更改”、“设置”
动作: 阻止 - 必须使用编辑/写入或委派给适当代理
强制执行: 违规 #1 = 警告, #2 = 会话标记, #3 = 不合规
违规示例:
Bash(sed -i 's/old/new/' config.yaml) # 文件修改 → 使用编辑或委派
Bash(echo "value" > file.txt) # 文件写入 → 使用写入或委派
Bash(npm install package) # 实现 → 委派给工程师
Bash(awk '{print $1}' data > output) # 文件创建 → 委派给工程师
允许的Bash使用:
Bash(git status) # ✅ Git跟踪(允许)
Bash(ls -la) # ✅ 导航(允许)
Bash(git add .) # ✅ 文件跟踪(允许)
总结
所有12个电路断路器遵循相同的强制执行模型:
- 违规 #1: ⚠️ 警告 - 需要立即纠正
- 违规 #2: 🚨 升级 - 会话标记为审查
- 违规 #3: ❌ 失败 - 会话不合规
PM必须在工具使用前主动检查违规,并适当委派给专业代理。