第 4 课:Rules(上)— 通用规则体系

所属阶段:第二阶段「组件精讲」(第 4-15 课) 前置条件:第 3 课 本课收获:掌握 10 个通用规则文件的内容,理解分层继承模型


一、本课概述

Rules 是 ECC 六大组件中最"安静"的一个 --- 它不执行任何操作,但所有操作都受它约束。本课我们将:

  1. 理解分层继承模型 --- Rules 如何从通用到语言到项目逐层覆盖
  2. 逐个讲解 10 个通用规则 --- 每个文件的核心要求和关键清单
  3. 建立规则全景视图 --- 用表格总结所有规则的要点

Rules 是 ECC 的"宪法"。理解了 Rules,才能理解 Agent 为什么这样做、Skill 为什么这样写。


二、分层继承模型

2.1 三层结构

ECC 的 Rules 采用三层继承架构:

bash 复制代码
优先级(从低到高):

第一层:rules/common/         ← 通用默认值(适用所有语言)
         │
         │  语言规则继承并覆盖
         ▼
第二层:rules/<language>/     ← 语言特定规则(如 golang/、typescript/)
         │
         │  项目规则继承并覆盖
         ▼
第三层:.claude/rules/        ← 项目级规则(最高优先级)

2.2 覆盖规则

当层级之间产生冲突时,更具体的层级优先(类似 CSS 的 specificity):

冲突场景 生效的规则 原因
common 说"不可变",golang 说"指针接收器可变" golang 的 语言 > 通用
common 说"80% 覆盖率",项目说"90% 覆盖率" 项目的 项目 > 语言 > 通用
common 说"函数 < 50 行",语言未提及 common 的 无覆盖则继承

2.3 安装注意事项

安装语言规则时,不能用 /* 扁平化复制

bash 复制代码
# 错误!同名文件会互相覆盖
cp rules/common/* ~/.claude/rules/
cp rules/golang/* ~/.claude/rules/    # coding-style.md 会覆盖 common 的!

# 正确!保持目录结构
cp -r rules/common ~/.claude/rules/common
cp -r rules/golang ~/.claude/rules/golang

这是因为 common/ 和语言目录下有同名文件(如 coding-style.md),扁平化复制会导致语言文件覆盖通用文件,而不是形成继承关系。


三、十大通用规则逐个讲解

rules/common/ 目录下有 10 个规则文件。以下逐个解析。

3.1 coding-style.md --- 编码风格

这是最核心的规则文件,定义了代码质量的底线要求。

核心要求

要求 级别 内容
不可变性 CRITICAL 创建新对象,永远不修改现有对象
文件大小 强烈建议 200-400 行典型,800 行为上限
函数大小 强烈建议 不超过 50 行
嵌套深度 建议 不超过 4 层
错误处理 必须 每一层都显式处理错误,不能静默吞掉
输入验证 必须 在系统边界验证所有外部输入

不可变性示例(伪代码):

scss 复制代码
// 错误:就地修改
modify(original, field, value)  → 改变了 original 本身

// 正确:返回新副本
update(original, field, value)  → 返回新对象,original 不变

代码质量清单(每次提交前检查):

  • 代码可读性好,命名清晰
  • 函数小于 50 行
  • 文件小于 800 行
  • 嵌套不超过 4 层
  • 错误处理完善
  • 无硬编码值(用常量或配置)
  • 使用不可变模式

设计哲学MANY SMALL FILES > FEW LARGE FILES。高内聚、低耦合。按功能/领域组织文件,而不是按类型。

3.2 testing.md --- 测试要求

核心要求:最低 80% 测试覆盖率。

三种必需的测试类型

类型 测试目标 必需程度
单元测试 独立函数、工具、组件 必需
集成测试 API 端点、数据库操作 必需
E2E 测试 关键用户流程 必需

TDD 强制流程(六步法)

markdown 复制代码
1. Write  --- 先写测试
2. Fail   --- 运行测试,确认失败(RED)
3. Implement --- 写最小实现
4. Pass   --- 运行测试,确认通过(GREEN)
5. Refactor --- 重构改善(IMPROVE)
6. Verify --- 验证覆盖率 >= 80%

测试命名规范:使用 AAA 模式(Arrange-Act-Assert):

javascript 复制代码
// 命名格式:should_<预期行为>_when_<条件>
test("should return error when input is empty", () => {
  // Arrange: 准备测试数据
  // Act: 执行被测函数
  // Assert: 验证结果
});

测试失败排查

  1. 使用 tdd-guide Agent
  2. 检查测试隔离性
  3. 验证 Mock 是否正确
  4. 修复实现,不要修复测试(除非测试本身有错)

3.3 security.md --- 安全准则

8 项提交前安全检查清单

  • 无硬编码密钥(API key、密码、Token)
  • 所有用户输入已验证
  • SQL 注入防护(参数化查询)
  • XSS 防护(HTML 已消毒)
  • CSRF 保护已启用
  • 身份验证/授权已验证
  • 所有端点有速率限制
  • 错误消息不泄露敏感数据

密钥管理三原则

  1. 永远不在源码中硬编码密钥
  2. 总是使用环境变量或密钥管理器
  3. 在应用启动时验证必需密钥存在

安全响应协议(发现安全问题时):

markdown 复制代码
1. STOP --- 立即停止当前工作
2. security-reviewer --- 调用安全审查 Agent
3. 修复 CRITICAL 问题
4. 轮换任何可能已暴露的密钥
5. 全库排查类似问题

3.4 git-workflow.md --- Git 工作流

Conventional Commits 格式

xml 复制代码
<type>: <description>

<optional body>

类型列表

类型 用途 示例
feat 新功能 feat: add user registration
fix 修复 fix: handle null input in parser
refactor 重构 refactor: extract auth middleware
docs 文档 docs: update API reference
test 测试 test: add integration tests for auth
chore 杂务 chore: update dependencies
perf 性能 perf: cache database queries
ci CI/CD ci: add coverage reporting

PR 流程

  1. 分析完整提交历史(不只是最新 commit)
  2. 使用 git diff [base-branch]...HEAD 查看所有变更
  3. 撰写全面的 PR 摘要
  4. 包含测试计划和 TODO
  5. 新分支用 -u 标志推送

3.5 performance.md --- 性能优化

模型选择策略

模型 能力定位 成本 适用场景
Haiku 4.5 Sonnet 的 90% 能力 Sonnet 的 1/3 轻量 Agent、高频调用、Worker Agent
Sonnet 4.6 最佳编码模型 中等 主力开发、复杂编码、流程编排
Opus 4.5 最深推理 最高 架构决策、复杂推理、深度分析

上下文窗口管理

避免在上下文的最后 20% 执行以下任务:

  • 大规模重构
  • 跨多文件的功能实现
  • 复杂交互的调试

低上下文敏感度的任务(可以在后期执行):

  • 单文件编辑
  • 独立工具创建
  • 文档更新
  • 简单 Bug 修复

Extended Thinking

  • 默认启用,保留最多 31,999 Token 用于内部推理
  • 快捷键:Option+T(macOS)/ Alt+T(Windows/Linux)
  • 复杂任务建议开启 Plan Mode 配合使用

3.6 patterns.md --- 设计模式

Skeleton Projects 模式

实现新功能时的推荐流程:

  1. 搜索经过实战验证的 Skeleton 项目
  2. 用并行 Agent 评估选项(安全、可扩展性、相关性、实现规划)
  3. 克隆最佳匹配作为基础
  4. 在已验证的结构中迭代开发

Repository Pattern

sql 复制代码
定义标准操作接口:findAll, findById, create, update, delete
        │
        ▼
具体实现处理存储细节(数据库、API、文件等)
        │
        ▼
业务逻辑依赖抽象接口,不依赖存储机制

好处:轻松切换数据源,简化测试(可用 Mock 替换)。

API 响应格式

统一的响应信封格式:

  • 成功/状态指示符
  • 数据载荷(错误时为 null)
  • 错误消息字段(成功时为 null)
  • 分页响应的元数据(total, page, limit)

3.7 agents.md --- Agent 编排

Agent 即时调用规则(无需用户提示):

场景 自动调用的 Agent
复杂功能请求 planner
代码写完/修改完 code-reviewer
Bug 修复或新功能 tdd-guide
架构决策 architect

并行执行原则

独立的操作必须并行执行,不能串行:

markdown 复制代码
# 正确:三个独立分析并行执行
同时启动:
  1. Agent 1: 安全分析 auth 模块
  2. Agent 2: 性能审查 cache 系统
  3. Agent 3: 类型检查 utilities

# 错误:不必要的串行
先 Agent 1,再 Agent 2,再 Agent 3

多视角分析: 对复杂问题使用 Split Role 子代理:事实审查者、高级工程师、安全专家、一致性审查者、冗余检查者。

3.8 hooks.md --- Hook 系统

三种 Hook 类型

类型 触发时机 用途
PreToolUse 工具执行前 验证参数、修改参数
PostToolUse 工具执行后 自动格式化、检查
Stop 会话结束时 最终验证

自动接受权限(allowedTools)

  • 对可信的、定义明确的计划启用
  • 对探索性工作禁用
  • 永远不要使用 dangerously-skip-permissions 标志
  • 通过 ~/.claude.json 中的 allowedTools 配置

TodoWrite 最佳实践: 用 TodoWrite 工具追踪多步任务进度。Todo 列表能暴露:乱序步骤、遗漏项、多余项、粒度错误、需求误解。

3.9 development-workflow.md --- 开发工作流

这是最完整的工作流定义,串联了多个规则:

markdown 复制代码
1. Plan First(规划)
   └─ 使用 planner Agent 创建实施计划
   └─ 识别依赖和风险
   └─ 拆解为阶段

2. TDD Approach(测试驱动)
   └─ 使用 tdd-guide Agent
   └─ RED → GREEN → IMPROVE
   └─ 验证 80%+ 覆盖率

3. Code Review(代码审查)
   └─ 使用 code-reviewer Agent
   └─ 修复 CRITICAL 和 HIGH 问题
   └─ 尽量修复 MEDIUM 问题

4. Commit & Push(提交推送)
   └─ 详细的 Commit Message
   └─ 遵循 Conventional Commits 格式

注意这个流程如何呼应五大原则:Plan → Agent-First → Test-Driven → Security → Immutability(通过 Git 的不可变提交记录体现)。

3.10 code-review.md --- 代码审查

定义了代码审查的标准和流程:

审查流程

  1. 收集上下文(git diff)
  2. 理解变更范围
  3. 阅读周围代码(不孤立审查变更)
  4. 应用审查清单
  5. 报告发现(按严重级别)

严重级别

级别 必须修复? 示例
CRITICAL 安全漏洞、数据丢失风险
HIGH 逻辑错误、缺少错误处理
MEDIUM 建议 性能问题、代码重复
LOW 可选 命名改进、注释完善

四、规则间的交叉引用

10 个规则文件不是孤立的,它们之间有明确的引用关系:

markdown 复制代码
development-workflow.md
    ├── 引用 → git-workflow.md(提交格式)
    ├── 引用 → testing.md(TDD 要求)
    └── 引用 → agents.md(Agent 调用时机)

coding-style.md
    └── 被引用于 → security.md(输入验证)
                  → testing.md(代码质量影响测试)

performance.md
    └── 引用 → agents.md(模型选择影响 Agent 配置)

development-workflow.md 是串联所有规则的"主线",理解它就理解了规则体系的全貌。


五、本课练习

练习 1:阅读全部 10 个文件(30 分钟)

逐个打开 rules/common/ 下的 10 个文件,完整阅读。

bash 复制代码
ls rules/common/
# 按顺序阅读每个文件

练习 2:用表格总结(15 分钟)

填写以下表格(可在纸上或文档中):

文件 一句话总结 最关键的一条规则 关联的 Agent
coding-style.md
testing.md
security.md
git-workflow.md
performance.md
patterns.md
agents.md
hooks.md
development-workflow.md
code-review.md

练习 3:识别覆盖点(10 分钟)

思考以下场景,哪条规则会被语言特定规则覆盖:

  1. Go 语言中使用指针接收器修改 struct --- 这与 coding-style.md 的哪条规则冲突?
  2. Rust 的所有权系统 --- 这与不可变性原则是什么关系?
  3. Python 的 PEP 8 --- 这会覆盖 coding-style.md 的哪些格式规范?

练习 4(选做):画规则关系图

在纸上画出 10 个规则文件之间的引用关系图。哪个文件被引用最多?哪个文件引用了最多其他文件?


六、本课小结

你应该记住的 内容
分层继承 common → language → project,越具体优先级越高
不可变性级别 CRITICAL --- 这是 coding-style 中优先级最高的规则
覆盖率要求 最低 80%,TDD 六步法强制执行
安全检查 8 项提交前清单,安全响应协议五步法
模型选择 Haiku(轻量)、Sonnet(主力)、Opus(深度推理)
开发工作流 Plan → TDD → Review → Commit,串联了多个规则
安装陷阱 不能扁平化复制 rules 目录,必须保持层级结构

七、下节预告

第 5 课:Rules(下)--- 语言特定规则与实战

下节课我们将从通用规则进入语言特定规则。你将看到 Go、TypeScript、Python 等语言如何继承和覆盖通用规则,学会为新语言草拟规则文件。

预习建议 :打开 rules/golang/coding-style.md,与 rules/common/coding-style.md 对比阅读,找出 3 个不同之处。

相关推荐
王小酱2 小时前
第 8 课:Skills(上)— 结构与本质
openai·ai编程·aiops
王小酱2 小时前
第 5 课:Rules(下)— 语言特定规则与实战
openai·ai编程·aiops
王小酱2 小时前
第 6 课:Agents(上)— 文件格式与 Frontmatter
openai·ai编程·aiops
王小酱2 小时前
第 3 课:上手体验 — 安装与目录漫游
openai·ai编程·aiops
王小酱2 小时前
第 9 课:Skills(下)— 编程 Skill 地图与编写实战
openai·ai编程·aiops
王小酱2 小时前
第 7 课:Agents(下)— 系统提示词设计
openai·ai编程·aiops
孟健2 小时前
对不起,OpenClaw,我选择 Hermes!
ai编程
王小酱2 小时前
第 1 课:设计哲学 — ECC 为什么存在
openai·ai编程·aiops
Bigger2 小时前
CodeWalkers:让 AI 助手化身桌面宠物,陪你敲代码的赛博伙伴!
前端·app·ai编程