BaseSkill-UniversalPatterns base

这个技能提供了一套全面的编程规则和最佳实践,旨在通过简化代码复杂性、强制执行严格的编码标准、采用测试驱动开发(TDD)工作流程和原子待办事项跟踪,来提高软件开发的质量和效率。关键词包括:代码简化、TDD工作流程、原子待办事项、架构模式、错误处理、测试哲学、安全要求、质量门、会话管理。

架构设计 0 次安装 0 次浏览 更新于 3/4/2026

name: base description: Universal coding patterns, constraints, TDD workflow, atomic todos

基础技能 - 通用编程模式

核心原则

复杂性是敌人。每一行代码都是负债。目标是软件足够简单,任何工程师(或AI)都能在一个会话中理解整个系统。


简单性规则(严格执行)

重要:这些限制是不可协商的。Claude 必须检查并强制执行每个创建或修改的文件的这些限制。

函数级别

  • 每函数最多20行 - 如果更长,请立即分解
  • 每函数最多3个参数 - 如果更多,请使用选项对象或分解
  • 最大嵌套层次2级 - 通过早期返回或提取函数来展平
  • 单一职责 - 每个函数只做一件事
  • 描述性名称优于注释 - 如果需要注释来解释,重命名它

文件级别

  • 每文件最多200行 - 如果更长,请在继续之前按职责拆分
  • 每文件最多10个函数 - 保持认知负荷可管理
  • 每文件一个导出焦点 - 文件应该有一个主要目的

模块级别

  • 目录嵌套最多3级 - 扁平比嵌套更好
  • 清晰的界限 - 每个模块有一个单一的公共接口
  • 无循环依赖 - 永远

执行协议

在完成任何文件之前:

  1. 计算总行数 - 如果超过200行,停止并拆分
  2. 计算函数数量 - 如果超过10个,停止并拆分
  3. 检查每个函数的长度 - 如果超过20行,停止并分解
  4. 检查参数数量 - 如果超过3个,停止并重构

如果在开发过程中超出限制:

⚠️ 文件大小违规检测

[filename]有[X]行(限制:200)

拆分为:
- [filename-a].ts - [responsibility A]
- [filename-b].ts - [responsibility B]

永远不要推迟重构。 立即修复违规行为,而不是“稍后”。


架构模式

函数核心,命令外壳

  • 纯函数用于业务逻辑 - 无副作用,确定性
  • 仅在边界处有副作用 - API调用,数据库,文件系统在边缘
  • 数据输入,数据输出 - 函数转换数据,它们不改变状态

组合优于继承

  • 继承不超过1级 - 优先使用接口/组合
  • 小型,可组合的实用程序 - 从简单构建复杂
  • 依赖注入 - 传递依赖,不直接导入

错误处理

  • 快速失败,大声失败 - 错误立即浮出水面
  • 无静默失败 - 每个错误都被记录或抛出
  • 设计API使得误用变得不可能

测试哲学

  • 业务逻辑100%覆盖 - 函数核心
  • 边界的集成测试 - API端点,数据库操作
  • 无未测试代码合并 - CI阻止未通过测试的合并
  • 测试行为,非实现 - 测试在重构后仍然存活
  • 每个测试独立运行 - 无相互依赖

反模式(永不这样做)

  • ❌ 全局状态
  • ❌ 魔术数字/字符串 - 使用命名常量
  • ❌ 深层嵌套 - 展平或提取
  • ❌ 长参数列表 - 使用对象
  • ❌ 解释“什么”的注释 - 代码应该是自文档化的
  • ❌ 死代码 - 删除它,git记得
  • ❌ 复制粘贴重复 - 提取到共享函数
  • ❌ 上帝对象/文件 - 按职责拆分
  • ❌ 循环依赖
  • ❌ 过早优化
  • ❌ 大型PR - 仅限小型,专注的更改
  • ❌ 混合重构与功能 - 分开提交

文档结构

每个项目必须在代码文档和项目规范之间有明确的分离:

project/
├── docs/                      # 代码文档
│   ├── architecture.md        # 系统设计决策
│   ├── api.md                 # API参考(如适用)
│   └── setup.md               # 开发设置指南
├── _project_specs/            # 项目规范
│   ├── overview.md            # 项目愿景和目标
│   ├── features/              # 功能规范
│   │   ├── feature-a.md
│   │   └── feature-b.md
│   ├── todos/                 # 原子待办事项跟踪
│   │   ├── active.md          # 当前冲刺/焦点
│   │   ├── backlog.md         # 未来工作
│   │   └── completed.md       # 完成项(供参考)
│   ├── session/               # 会话状态(见session-management.md)
│   │   ├── current-state.md   # 实时会话状态
│   │   ├── decisions.md       # 关键决策日志
│   │   ├── code-landmarks.md  # 重要代码位置
│   │   └── archive/           # 过去会话摘要
│   └── prompts/               # LLM提示规范(如果AI优先)
└── CLAUDE.md                  # Claude指令(引用技能)

什么放在哪里

位置 内容
docs/ 技术文档,API参考,设置指南
_project_specs/ 业务逻辑,功能,需求,待办事项
_project_specs/session/ 会话状态,决策,上下文用于可恢复性
CLAUDE.md Claude特定指令和技能引用

原子待办事项

所有工作都作为原子待办事项进行跟踪,具有验证和测试标准。

待办事项格式(必需)

## [TODO-001] 简短描述标题

**状态:** 待定 | 进行中 | 阻塞 | 完成
**优先级:** 高 | 中 | 低
**估计:** XS | S | M | L | XL

### 描述
一段描述需要完成的工作。

### 验收标准
- [ ] 标准1 - 具体,可衡量
- [ ] 标准2 - 具体,可衡量

### 验证
如何验证这项工作已完成:
- 手动:[手动测试步骤]
- 自动:[测试文件/命令,验证这一点]

### 测试用例
| 输入 | 预期输出 | 注释 |
|-------|-----------------|-------|
| ... | ... | ... |

### 依赖项
- 依赖于:[TODO-xxx](如果有)
- 阻塞:[TODO-yyy](如果有)

### TDD执行日志
| 阶段 | 命令 | 结果 | 时间戳 |
|-------|---------|--------|-----------|
| RED | `[test command]` | - | - |
| GREEN | `[test command]` | - | - |
| VALIDATE | `[lint && typecheck && test --coverage]` | - | - |
| COMPLETE | 移动到completed.md | - | - |

待办事项规则

  1. 原子 - 每个待办事项是一个单一的,可完成的工作单元
  2. 可测试 - 每个待办事项都有验证标准和测试用例
  3. 大小 - 如果大于"M",请进一步拆分
  4. 独立 - 最小化待办事项之间的依赖
  5. 跟踪 - 在完成时在active.md → completed.md之间移动

待办事项执行工作流程(TDD - 强制)

每个待办事项必须严格遵循这个确切的工作流程。没有例外。

┌─────────────────────────────────────────────────────────────┐
│  1. RED: 首先编写测试                                     │
│     └─ 根据测试用例表创建测试文件        │
│     └─ 测试应涵盖所有验收标准           │
│     └─ 运行测试 → 所有必须失败(证明测试有效)   │
├─────────────────────────────────────────────────────────────┤
│  2. GREEN: 实现功能                                     │
│     └─ 编写最少的代码以使测试通过                │
│     └─ 遵循简单性规则(每函数20行等)    │
│     └─ 运行测试 → 所有必须通过                            │
├─────────────────────────────────────────────────────────────┤
│  3. VALIDATE: 质量门                                     │
│     └─ 运行linter(如果可能则自动修复)                    │
│     └─ 运行类型检查器(tsc/mypy/pyright)                  │
│     └─ 运行完整的测试套件与覆盖度                    │
│     └─ 验证覆盖度阈值(≥80%)                     │
├─────────────────────────────────────────────────────────────┤
│  4. COMPLETE: 标记完成                                     │
│     └─ 只有在所有验证通过后才能完成                      │
│     └─ 将待办事项移动到completed.md                            │
│     └─ 检查点会话状态                             │
└─────────────────────────────────────────────────────────────┘

按堆栈执行命令

Node.js/TypeScript:

# 1. RED - 运行测试(预期失败)
npm test -- --grep "todo-description"

# 2. GREEN - 运行测试(预期通过)
npm test -- --grep "todo-description"

# 3. VALIDATE - 完整质量检查
npm run lint && npm run typecheck && npm test -- --coverage

Python:

# 1. RED - 运行测试(预期失败)
pytest -k "todo_description" -v

# 2. GREEN - 运行测试(预期通过)
pytest -k "todo_description" -v

# 3. VALIDATE - 完整质量检查
ruff check . && mypy . && pytest --cov --cov-fail-under=80

React/Next.js:

# 1. RED - 运行测试(预期失败)
npm test -- --testPathPattern="ComponentName"

# 2. GREEN - 运行测试(预期通过)
npm test -- --testPathPattern="ComponentName"

# 3. VALIDATE - 完整质量检查
npm run lint && npm run typecheck && npm test -- --coverage --watchAll=false

阻塞条件

如果因为失败而标记待办事项为完成:

  • ❌ 测试没有首先编写(跳过RED阶段)
  • ❌ 测试最初没有失败(无效测试)
  • ❌ 任何测试失败
  • ❌ Linter有错误(警告可能是可以接受的)
  • ❌ 类型检查器有错误
  • ❌ 覆盖度低于阈值

如果因失败而阻塞:

## [TODO-042] - BLOCKED

**阻塞原因:** [X中的Lint错误 / Y中的测试失败 / 覆盖度为75%]
**所需行动:** [需要的具体修复]

错误修复工作流程(TDD - 强制)

当用户报告错误时,永远不要直接跳到修复它。

┌─────────────────────────────────────────────────────────────┐
│  1. DIAGNOSE: 确定测试缺口                         │
│     └─ 运行现有测试 - 有失败吗?                    │
│     └─ 如果测试通过但错误存在 → 测试不完整  │
│     └─ 文档:"测试缺口:[错过什么]"              │
├─────────────────────────────────────────────────────────────┤
│  2. RED: 为错误编写失败测试                   │
│     └─ 创建测试以重现确切的错误            │
│     └─ 测试应该用当前代码失败                   │
│     └─ 这证明了测试捕捉到了错误                 │
├─────────────────────────────────────────────────────────────┤
│  3. GREEN: 修复错误                                      │
│     └─ 编写最少的代码以使测试通过             │
│     └─ 运行测试 → 现在必须通过                             │
├─────────────────────────────────────────────────────────────┤
│  4. VALIDATE: 完整质量检查                            │
│     └─ 运行所有测试(不仅仅是新的)                 │
│     └─ 运行linter和类型检查器                          │
│     └─ 验证没有回归覆盖度                     │
└─────────────────────────────────────────────────────────────┘

错误报告待办事项格式

## [BUG-001] 错误简短描述

**状态:** 待定
**优先级:** 高
**报告:** [用户如何报告它/重现步骤]

### 错误描述
发生了什么与应该发生的事情。

### 重现步骤
1. 第一步
2. 第二步
3. 观察:[错误行为]
4. 预期:[正确行为]

### 测试缺口分析
- 现有测试覆盖范围:[列出相关测试文件]
- 识别的缺口:[测试错过了什么]
- 需要的新测试:[描述要添加的测试]

### 错误测试用例
| 输入 | 当前(错误) | 预期(修复) |
|-------|---------------|------------------|
| ... | ... | ... |

### TDD执行日志
| 阶段 | 命令 | 结果 | 时间戳 |
|-------|---------|--------|-----------|
| DIAGNOSE | `npm test` | 所有通过(缺口!) | - |
| RED | `npm test -- --grep "bug description"` | 1测试失败 ✓ | - |
| GREEN | `npm test -- --grep "bug description"` | 1测试通过 ✓ | - |
| VALIDATE | `npm run lint && npm run typecheck && npm test -- --coverage` | 通过 ✓ | - |

错误修复反模式

  • 无测试修复 - 错误可能会再次出现
  • 修复后编写测试 - 不能证明测试捕捉到了错误
  • 跳过测试缺口分析 - 错过了为什么测试没有捕捉到
  • 仅测试修复 - 必须运行完整的测试套件以防止回归

示例原子待办事项

## [TODO-042] 在注册表单中添加电子邮件验证

**状态:** 待定
**优先级:** 高
**估计:** S

### 描述
在提交前在注册表单上验证电子邮件格式。如果无效,请显示内联错误。

### 验收标准
- [ ] 电子邮件字段显示无效格式错误
- [ ] 用户修复电子邮件时错误清除
- [ ] 表单不能用无效的电子邮件提交
- [ ] 有效电子邮件无错误通过

### 验证
- 手动:在注册表单中输入"notanemail",验证错误是否出现
- 自动:`npm test -- --grep "email validation"`

### 测试用例
| 输入 | 预期输出 | 注释 |
|-------|-----------------|-------|
| user@example.com | 有效,无错误 | 标准电子邮件 |
| user@sub.example.com | 有效,无错误 | 子域 |
| notanemail | 无效,显示错误 | 没有@符号 |
| user@ | 无效,显示错误 | 没有域 |
| @example.com | 无效,显示错误 | 没有本地部分 |

### 依赖项
- 依赖于:[TODO-041] 注册表单组件
- 阻塞:[TODO-045] 注册流程集成测试

### TDD执行日志
| 阶段 | 命令 | 结果 | 时间戳 |
|-------|---------|--------|-----------|
| RED | `npm test -- --grep "email validation"` | 5测试失败 ✓ | - |
| GREEN | `npm test -- --grep "email validation"` | 5测试通过 ✓ | - |
| VALIDATE | `npm run lint && npm run typecheck && npm test -- --coverage` | 通过,84%覆盖 ✓ | - |
| COMPLETE | 移动到completed.md | ✓ | - |

凭据管理(不可协商)

当项目需要API密钥时,始终首先询问用户的集中访问文件。

工作流程

1. 询问:"您有访问密钥文件吗?(例如,~/Documents/Access.txt)"
2. 读取并解析文件以获取已知的密钥模式
3. 验证密钥是否有效
4. 使用找到的密钥创建项目.env
5. 报告缺少的密钥以及如何获得它们

要检测的密钥模式

服务 模式 环境变量
OpenAI sk-proj-* OPENAI_API_KEY
Claude sk-ant-* ANTHROPIC_API_KEY
Render rnd_* RENDER_API_KEY
Replicate r8_* REPLICATE_API_TOKEN
Reddit 客户端ID + 密钥 REDDIT_CLIENT_ID, REDDIT_CLIENT_SECRET

查看credentials.md了解完整的解析逻辑和验证命令。


安全(不可协商)

每个项目都必须满足这些安全要求。查看security.md技能了解详细的模式。

基本安全检查

  1. 代码中无秘密 - 使用环境变量,永不提交秘密
  2. .env.gitignore - 总是,无例外
  3. 客户端暴露的环境变量中无秘密 - 永远不要使用VITE_*, NEXT_PUBLIC_*用于秘密
  4. 验证所有输入 - 在API边界使用Zod/Pydantic
  5. 仅参数化查询 - 不要为SQL进行字符串拼接
  6. 正确哈希密码 - 使用12+轮的bcrypt
  7. 依赖项扫描 - npm审计/安全检查必须通过

必需文件

  • .gitignore带有秘密模式
  • .env.example带有所有必需变量(无值)
  • scripts/security-check.sh用于预提交验证

CI中的安全

每个PR必须通过:

  • 秘密扫描(detect-secrets / trufflehog)
  • 依赖审计(npm审计/安全)
  • 静态分析(CodeQL)

质量门(不可协商)

覆盖度阈值

  • 最低80%代码覆盖度 - CI必须在此以下失败
  • 业务逻辑(core/)应瞄准100%
  • 集成测试覆盖边界

预提交钩子

所有项目必须有预提交钩子,运行:

  1. 代码检查(如果可能则自动修复)
  2. 类型检查
  3. 测试(至少,受影响的测试)

这在问题进入CI之前捕捉问题,节省时间并保持主线干净。


会话管理(不可协商)

保持上下文以恢复。查看session-management.md了解详细信息。

核心规则:在自然断点处检查点

完成任何任务后,询问:

  1. 决策做出? → 记录到_project_specs/session/decisions.md
  2. >10工具调用? → 完整检查点到current-state.md
  3. 主要功能完成? → 归档到session/archive/
  4. 否则 → 更新到current-state.md

会话开始

  1. 读取_project_specs/session/current-state.md
  2. 检查_project_specs/todos/active.md
  3. 从记录的"下一步"继续

会话结束

  1. 归档当前会话
  2. 更新current-state.md带有交接注释
  3. 确保下一步是具体且可操作的

响应格式

当实现功能(遵循TDD)时:

  1. 澄清要求 如果含糊不清
  2. 提出结构 - 在代码之前概述
  3. 首先编写测试 - 基于测试用例表(RED阶段)
  4. 运行测试以验证它们失败 - 证明测试有效
  5. 实现最少代码 以使测试通过(GREEN阶段)
  6. 运行完整验证 - 代码检查,类型检查,覆盖度(VALIDATE阶段)
  7. 标记复杂性 - 如果接近限制则警告
  8. 完成后检查点 - 更新会话状态,记录TDD执行

TDD是不可协商的。 在任何实现开始之前,测试必须存在并且失败。

当您注意到违反这些规则的代码时,停止并重构 然后再继续。


自动迭代模式(Ralph Wiggum)

对于任何非平凡任务,Claude必须自动使用迭代TDD循环。

何时自动调用Ralph循环

任务类型 行动
新功能(任何大小) /ralph-loop带有TDD模板
错误修复 /ralph-loop带有错误修复模板
重构 /ralph-loop带有重构模板
API开发 /ralph-loop带有API模板
简单问题/解释 正常响应(无循环)
一行修复(错别字等) 正常响应(无循环)

自动转换用户请求

当用户说:

  • “添加电子邮件验证”
  • “修复登录错误”
  • “为待办事项构建REST API”
  • “重构认证模块”

Claude必须自动:

  1. 从请求中提取要求
  2. 定义完成标准(测试通过,代码检查干净等)
  3. 作为Ralph提示结构化带有TDD工作流程
  4. 调用 /ralph-loop带有适当的--max-iterations--completion-promise

自动转换示例

用户说:

“添加一个忘记密码功能”

Claude自动调用:

/ralph-loop "
## 任务:添加忘记密码功能

### 要求(从用户请求中提取)
- 用户可以通过电子邮件请求密码重置
- 重置链接发送到注册的电子邮件
- 链接在24小时后过期
- 用户可以通过链接设置新密码

### TDD工作流程
1. 为每个要求编写失败的测试
2. 验证测试失败(RED)
3. 实现功能
4. 验证测试通过(GREEN)
5. 运行代码检查+类型检查
6. 如果失败则重复

### 完成标准
- [ ] 所有测试通过
- [ ] 覆盖度≥80%
- [ ] 代码检查干净
- [ ] 安全审查(URL参数中无令牌等)

### 退出条件
<promise>FORGOT PASSWORD COMPLETE</promise>
" --completion-promise "FORGOT PASSWORD COMPLETE" --max-iterations 25

默认设置

设置 默认 理由
--max-iterations 20-30 安全网,根据复杂性调整
--completion-promise 总是设置 基于任务(例如,“TESTS PASSING”)
TDD工作流程 总是包括 不可协商

选择退出

用户可以通过说:

  • “只是解释…”(仅解释)
  • “快速修复…”(一行修复)
  • “不要循环…”(明确选择退出)
  • “帮助我理解…”(学习/讨论) 退出自动Ralph循环