name: sop-rfc2119 description: 用于编写需要精确要求级别的SOP,使用RFC 2119约束关键词(MUST、SHOULD、MAY)。涵盖为确定性代理行为正确使用要求关键词。 allowed-tools:
- 读取
- 写入
- 编辑
- Bash
- Grep
- Glob
SOP中的RFC 2119关键词
RFC 2119定义了在规范中指示要求级别的关键词。在SOP中使用这些关键词创建精确、无歧义的指令,以便AI代理能够确定性执行。
关键概念
RFC 2119关键词
RFC 2119定义了这些用于要求级别的关键词:
| 关键词 | 含义 | 用法 |
|---|---|---|
| MUST | 绝对要求 | 必须执行的不可协商步骤 |
| MUST NOT | 绝对禁止 | 被禁止的操作 |
| SHOULD | 强烈推荐 | 首选方法,但可能存在替代方案 |
| SHOULD NOT | 强烈劝阻 | 不鼓励,但在特定情况下可接受 |
| MAY | 可选 | 真正可选的操作,由代理自行决定 |
为什么在SOP中使用RFC 2119
- 消除歧义:明确区分必需步骤与可选步骤
- 可预测执行:代理确切知道什么是强制性的与推荐的
- 更好的错误处理:违反MUST/MUST NOT触发立即失败
- 一致解释:标准关键词在各种实现中都能理解
最佳实践
使用MUST
MUST表示绝对要求。用于:
- 关键安全或安全步骤
- 影响数据完整性的步骤
- 阻止后续步骤的先决条件
- 防止错误的验证
## 步骤
1. 您MUST在部署前验证所有测试通过
2. 您MUST在运行迁移前备份数据库
3. 您MUST在处理前验证用户输入
4. 您MUST在访问资源前检查身份验证
何时不使用MUST:
- ❌ 风格偏好:“您MUST使用单引号”
- ❌ 次要优化:“您MUST使用const而不是let”
- ✅ 对于偏好,使用SHOULD代替
使用MUST NOT
MUST NOT表示绝对禁止。用于:
- 安全违规
- 数据损坏风险
- 无迁移的破坏性更改
- 违反不变量的操作
## 步骤
1. 您MUST NOT将密钥提交到版本控制
2. 您MUST NOT在没有备份的情况下修改生产数据
3. 您MUST NOT在部署前跳过类型检查
4. 您MUST NOT在验证失败时继续
示例:
## 安全要求
- 您MUST NOT记录敏感用户数据(密码、令牌、PII)
- 您MUST NOT在生产中禁用安全功能
- 您MUST NOT向用户暴露内部错误详情
- 您MUST NOT在SQL查询中直接使用用户输入
## 数据完整性
- 您MUST NOT在没有备份验证的情况下删除数据
- 您MUST NOT在没有迁移路径的情况下修改模式
- 您MUST NOT在错误时跳过事务回滚
- 您MUST NOT在没有过期时间的情况下缓存数据
使用SHOULD
SHOULD表示强烈推荐。用于:
- 提高质量的最佳实践
- 性能优化
- 代码风格偏好
- 推荐但非必需的步骤
## 步骤
1. 您SHOULD为调试添加日志记录
2. 您SHOULD在文档中包含使用示例
3. 您SHOULD在提交前运行linter
4. 您SHOULD使用有意义的变量名
SHOULD vs. MUST:
## 类型安全(MUST - 影响正确性)
- 您MUST为公共API添加类型注释
- 您MUST在运行时边界验证类型
## 代码质量(SHOULD - 提高可维护性)
- 您SHOULD为内部函数添加类型注释
- 您SHOULD使用严格的TypeScript配置
使用SHOULD NOT
SHOULD NOT表示劝阻。用于:
- 要避免的反模式
- 次优但有时必要的方法
- 正在淘汰的过时模式
## 步骤
1. 您SHOULD NOT使用全局变量(使用依赖注入)
2. 您SHOULD NOT捕获所有错误(捕获特定异常)
3. 您SHOULD NOT使用魔法数字(定义常量)
4. 您SHOULD NOT深度嵌套回调(使用async/await)
附带理由:
## 代码模式
- 您SHOULD NOT使用eval()进行解析(安全风险)
- 例外:如果必须使用eval(),清理输入并在沙箱中运行
- 您SHOULD NOT使用var(使用const或let)
- 例外:支持旧版浏览器可能需要var
- 您SHOULD NOT在TypeScript中使用any类型(破坏类型安全)
- 例外:与未类型化库接口可能需要any
使用MAY
MAY表示真正可选的操作。用于:
- 可选增强
- 用户偏好
- 非关键添加
- 上下文相关选择
## 步骤
1. 您MAY为复杂逻辑添加代码注释
2. 您MAY包括性能基准
3. 您MAY为常见操作使用辅助实用程序
4. 您MAY添加超出最低覆盖范围的额外测试用例
MAY vs. SHOULD:
## 文档(SHOULD - 推荐)
- 您SHOULD记录公共API
- 您SHOULD包含带有设置说明的README
## 额外文档(MAY - 可选)
- 您MAY添加架构图
- 您MAY包括设计决策记录
- 您MAY创建视频教程
示例
示例1:使用RFC 2119的代码审查SOP
# 审查拉取请求的安全性
## 步骤
1. 分析身份验证和授权
- 您MUST验证保护路由需要身份验证
- 您MUST检查授权逻辑防止权限提升
- 您SHOULD使用基于角色的访问控制(RBAC)
- 您MAY建议额外的安全层
2. 审查输入验证
- 您MUST验证所有用户输入已验证
- 您MUST确认SQL查询使用参数化
- 您MUST NOT允许未转义的用户输入在模板中
- 您SHOULD在客户端和服务器端都验证输入
3. 检查密钥管理
- 您MUST NOT批准包含硬编码密钥的代码
- 您MUST验证密钥使用环境变量
- 您SHOULD检查密钥未被记录
- 您MAY推荐密钥轮换策略
4. 评估错误处理
- 您MUST验证错误不暴露敏感信息
- 您SHOULD检查错误适当记录
- 您SHOULD NOT允许通用捕获所有错误处理器
- 您MAY建议特定的错误恢复策略
示例2:使用RFC 2119的TDD实施SOP
# 使用测试驱动开发实施功能
## 步骤
1. 编写失败测试(RED)
- 您MUST在实现代码前编写测试
- 您MUST运行测试以验证它失败
- 您MUST确认失败消息描述预期行为
- 您SHOULD使用描述性测试名称
- 您MAY为边缘情况添加多个测试用例
2. 编写最小实现(GREEN)
- 您MUST编写最简单的代码以通过测试
- 您MUST运行测试以验证它通过
- 您MUST NOT添加超出测试要求的功能
- 您SHOULD NOT过早优化
- 您MAY为复杂逻辑添加代码注释
3. 重构(REFACTOR)
- 您MUST在重构期间保持所有测试通过
- 您MUST在每个重构步骤后运行测试
- 您SHOULD提取重复代码
- 您SHOULD改进命名和结构
- 您SHOULD NOT改变测试行为
- 您MAY根据需要添加性能优化
4. 重复循环
- 您MUST为每个要求完成red-green-refactor循环
- 您SHOULD在每个完整循环后提交
- 您MAY组合相关测试用例
示例3:使用RFC 2119的部署SOP
# 将应用程序部署到生产环境
## 先决条件
- 您MUST配置生产凭据
- 您MUST验证所有测试在暂存环境通过
- 您SHOULD审查最近的更改
- 您MAY通知团队部署
## 步骤
1. 预部署验证
- 您MUST验证暂存部署健康
- 您MUST检查数据库迁移就绪
- 您MUST确认回滚计划已记录
- 您SHOULD审查监控仪表板
- 您MAY运行额外的冒烟测试
2. 执行部署
- 您MUST备份生产数据库
- 您MUST在代码部署前应用数据库迁移
- 您MUST NOT在滚动过程中跳过健康检查
- 您SHOULD在低流量窗口部署
- 您MAY使用金丝雀部署策略
3. 部署后验证
- 您MUST在生产环境运行冒烟测试
- 您MUST监控错误率15分钟
- 您MUST验证关键用户流程工作
- 您SHOULD检查性能指标
- 您SHOULD NOT在验证完成前关闭部署
- 您MAY运行额外的集成测试
4. 错误处理
- 您MUST在错误率超过阈值时执行回滚
- 您MUST NOT忽略失败的健康检查
- 您SHOULD捕获日志进行调试
- 您MAY尝试安全的针对性修复
常见模式
组合要求
## 验证步骤
1. 输入验证
- 您MUST验证所有必需字段存在
- 您MUST检查数据类型匹配模式
- 您SHOULD验证格式(电子邮件、电话等)
- 您SHOULD NOT接受格式错误的输入
- 您MAY提供用户友好的错误消息
2. 如果验证失败:
- 您MUST将验证错误返回给用户
- 您MUST NOT进行下一步
- 您SHOULD记录验证失败
- 您MAY建议修正
条件要求
## 条件步骤
1. 检查功能标志状态
- 如果功能标志启用:
- 您MUST使用新实现
- 您SHOULD监控采用指标
- 如果功能标志禁用:
- 您MUST使用遗留实现
- 您MUST NOT访问新功能代码路径
渐进增强
## 实施级别
### 最低可行(MUST)
- 您MUST实施核心功能
- 您MUST添加错误处理
- 您MUST包括基本测试
### 推荐(SHOULD)
- 您SHOULD添加日志记录
- 您SHOULD记录公共API
- 您SHOULD优化常见路径
### 可选(MAY)
- 您MAY添加性能监控
- 您MAY包括使用分析
- 您MAY创建详细示例
反模式
避免这些RFC 2119错误:
-
过度使用MUST
- ❌ “您MUST使用2空格缩进”
- ✅ “您SHOULD遵循项目代码风格”
-
弱MUST语句
- ❌ “您MUST尝试编写好代码”
- ✅ “您MUST通过所有linter检查”
-
缺少否定形式
- ❌ “您SHOULD避免使用eval()”
- ✅ “您SHOULD NOT使用eval(),除非在沙箱环境中”
-
模糊MAY语句
- ❌ “您MAY改进代码”
- ✅ “如果指标显示瓶颈,您MAY添加性能优化”
-
冲突要求
- ❌ “您MUST验证输入” + “您MAY为提高性能跳过验证”
- ✅ “您MUST验证不受信任的输入” + “您MAY缓存验证结果”
关键词选择指南
使用MUST当
- ✅ 跳过步骤导致错误或数据损坏
- ✅ 安全或隐私受到威胁
- ✅ 步骤是后续步骤的先决条件
- ✅ 违反要求破坏系统不变量
使用SHOULD当
- ✅ 遵循指南提高质量或可维护性
- ✅ 最佳实践但存在替代方案
- ✅ 强烈推荐但上下文可能变化
- ✅ 性能或可读性好处
使用MAY当
- ✅ 真正可选增强
- ✅ 用户偏好或风格选择
- ✅ 上下文相关决策
- ✅ 对正确性或质量无影响
相关技能
- sop-authoring:学习编写有效的SOP指令
- sop-structure:用适当部分组织SOP
- sop-maintenance:保持SOP准确和最新