合规规则(护栏)

合规规则是确定性检查,用于根据您的架构决策验证代码变更。它们强制执行命名约定、技术约束、层边界和安全模式——全程不涉及任何 AI。
在侧边栏中前往 代理中心 管理您的合规规则。
为什么需要合规规则?
AI 编程代理(Claude Code、Cursor、Copilot)生成代码时,并不了解您的架构决策。合规规则把这些决策编码为可执行的约束:
- 如果您的技术雷达规定使用 PostgreSQL,代理就不能使用 MongoDB
- 如果您的架构要求使用服务层,代理就不能在 HTTP handler 中直接调用数据库
- 如果您的团队使用结构化日志,代理就不能添加
fmt.Println
规则以确定性方式评估——没有 LLM,也没有概率性输出。相同的代码始终产生相同的结果。
规则类型
Archyl 支持七种合规规则类型:
必需模式
检查代码中必须存在或不得存在的模式。
| 用例 | 示例 |
|---|---|
| 禁止调试日志 | 禁止 fmt.Println、console.log、print() |
| 禁止安全隐患 | 禁止 eval()、innerHTML、硬编码密码 |
| 要求错误处理 | 要求 shell 脚本中使用 set -euo pipefail |
| 强制执行标准 | 禁止在 SQL 查询中使用 SELECT * |
配置:
- File glob — 仅检查匹配某个模式的文件(例如
*.go、*.{ts,tsx}) - Forbidden patterns — 一旦匹配即触发违规的正则表达式模式
- Required patterns — 缺失时触发违规的正则表达式模式
文件 glob 支持花括号展开:*.{js,jsx,ts,tsx} 可匹配所有 JavaScript 和 TypeScript 文件。
命名约定
验证文件、类型和函数的命名模式。
| 范围 | 示例 |
|---|---|
| 文件 | Go 文件必须为 snake_case.go |
| 类型 | 导出类型必须为 PascalCase |
| 函数 | 函数应以动词开头(Get、Create、Delete) |
配置:
- Patterns — 由范围(文件/类型/函数)+ 正则表达式 + 描述组成的列表
技术约束
限制容器中允许使用的语言和库。
| 用例 | 示例 |
|---|---|
| 锁定语言 | 后端只能使用 Go |
| 禁用依赖 | 不使用 lodash(改用原生 JS) |
| 强制迁移 | 不使用 moment.js(改用 date-fns) |
配置:
- Allowed languages — 以逗号分隔的列表(例如
go, typescript) - Forbidden imports — 每行一个导入
层边界
强制执行整洁架构、六边形架构或 DDD 的分层导入规则。
| 层 | 可以从以下层导入 |
|---|---|
| Domain | 无(纯业务逻辑) |
| Service | 仅 Domain |
| Adapter | Domain、Service |
| Infrastructure | 仅 Domain |
配置:
- Layers — 为每个层定义名称、路径模式(glob)以及允许的导入来源
- 点击层名称即可切换导入权限
契约合规
验证端点 handler 文件是否包含规范的 API 契约文档。
配置:
- Contract type — HTTP (OpenAPI)、gRPC、GraphQL 或 AsyncAPI
- Endpoint file patterns — 匹配包含端点定义的文件的 glob
- Strict mode — 启用后,任何缺少契约文档的匹配文件都会触发违规
依赖规则
禁止架构边界之间出现指定的导入路径。
配置:
- Scope — 容器级或组件级
- Forbidden pairs — 绝不能相互依赖的源路径与目标路径模式(例如
**/service/** -> **/handler/**)
事件通道合规
验证事件生产者/消费者模式是否遵循命名约定。
配置:
- Producer patterns — 识别事件生产代码的正则表达式模式(例如
kafka\.Send) - Consumer patterns — 识别事件消费代码的正则表达式模式
- Topic regex — 有效 topic 名称必须匹配的模式(例如
^[a-z]+\.[a-z]+\.[a-z]+$)
规则包
规则包是精心整理的规则集合,可一键安装。您无需逐条添加规则,只需安装一个规则包,即可获得适合您技术栈的完整规则集。
点击工具栏中的 Packs 浏览可用的规则包。
架构规则包
| 规则包 | 规则数 | 强制执行的内容 |
|---|---|---|
| Clean Architecture | 5 | domain/service/adapter/infra 层边界、模块隔离 |
| Hexagonal Architecture | 4 | 端口与适配器模式、核心隔离 |
| Domain-Driven Design | 3 | DDD 分层、CQRS 命令/查询分离 |
语言规则包
| 规则包 | 规则数 | 覆盖内容 |
|---|---|---|
| Go Backend | 26 | 错误包装、goroutine 安全、上下文传递、命名、禁止 panic、禁止 init() |
| React Frontend | 23 | TypeScript 严格性、组件模式、数据获取、禁止直接操作 DOM |
| Next.js Full-Stack | 20 | React 规则 + SSR 安全、window 守卫、localStorage 钩子 |
| Python Backend | 16 | 异常处理、async 模式、类型提示、禁止全局状态 |
| Java Backend | 11 | Spring 依赖注入模式、异常处理、禁止 System.exit |
| Rust Backend | 8 | 禁止 unwrap/unsafe、规范的错误类型、禁止 todo!() |
| Kotlin / Android | 5 | 空安全、不可变性、禁止 println |
| Vue Frontend | 10 | 禁止 v-html、TypeScript 严格性、禁止 innerHTML |
| .NET / C# Backend | 5 | async 模式、异常处理、ILogger |
| Swift / iOS | 3 | Optional 安全、禁止强制解包 |
领域规则包
| 规则包 | 规则数 | 覆盖内容 |
|---|---|---|
| Security Essentials | 17 | 硬编码密钥、注入、不安全的加密、TLS、CORS |
| DevOps & Infrastructure | 24 | Docker、Kubernetes、Terraform、GitHub Actions、shell 脚本 |
| API Best Practices | 9 | 状态码、SQL 安全、契约文档、禁止硬编码 URL |
| Testing & Reliability | 5 | 禁止跳过测试、禁止 .only()、禁止 sleep、禁止 TODO |
| Event-Driven Architecture | 3 | Kafka/RabbitMQ topic 命名、禁止硬编码 topic |
规则目录
Archyl 内置一个包含 169 条预置规则的目录,覆盖 23 种技术。在代理中心点击 浏览目录 即可查看。
覆盖的技术
Go、TypeScript、JavaScript、Python、Java、Kotlin、Rust、C#、C/C++、Ruby、PHP、Swift、React、Vue、Angular、Next.js、Docker、Kubernetes、Terraform、SQL、Shell、YAML、GitHub Actions
类别
| 类别 | 示例 |
|---|---|
| Architecture & Design | Clean Architecture、Hexagonal、DDD、MVC、CQRS、handler-service-repository |
| Security | 禁止硬编码密钥、禁止 eval()、防止 SQL 注入、不得禁用 TLS、禁止 CORS 通配符、防止命令注入 |
| Code Quality | 禁止调试日志、错误包装、禁止空 catch、禁止裸 except、禁止 any 类型、禁止 unwrap() |
| Infrastructure & DevOps | 固定 Docker 版本、K8s 资源限制、禁止特权容器、Terraform 标签、多阶段构建 |
| Naming Conventions | 按语言使用 snake_case、PascalCase、camelCase |
| Testing & Reliability | 禁止跳过测试、禁止 .only()、禁止 TODO/FIXME、测试中禁止 sleep |
| Performance | 禁止同步 sleep、goroutine 安全、禁止在循环中 await、Node.js 中禁止同步 I/O |
| API & Data | 禁止原始 SQL、规范的 HTTP 状态码、契约文档、禁止硬编码 URL |
| Event-Driven | Kafka/RabbitMQ topic 命名约定、禁止硬编码 topic 名称 |
点击目录中的任意规则即可添加——配置表单会自动预填。
严重级别
每条规则都有一个严重级别,决定其影响程度:
| 严重级别 | 含义 | 示例 |
|---|---|---|
| 严重 | 合并前必须修复 | 禁止硬编码密钥、禁止 eval()、违反层边界 |
| 高 | 合并前应当修复 | 禁止调试日志、固定 Docker 版本、Go 中禁止 panic |
| 中 | 方便时再修复 | 命名约定、禁止 any 类型、JS 中禁止 var |
| 低 | 仅供参考 | 禁止 TODO/FIXME、React 中禁止内联样式 |
只要发现任何严重或高级别的违规,合规检查即判定为失败。中、低级别的违规会被报告,但不会导致检查失败。
合规仪表板
代理中心的 仪表板 标签页实时汇总您所有项目的合规检查情况。
显示内容
- 统计卡片 — 检查总数、通过率(按颜色区分)、通过数、失败数
- 通过 / 失败比 — 直观的比例条,一眼看清两者占比
- 最新检查横幅 — 显示最近一次检查的状态,并附有完整报告的链接
- 最近检查列表 — 列出所有检查,包括状态、触发类型、项目名称、文件数、违规数以及距今时间
筛选
使用顶部的项目下拉菜单按项目筛选检查,或选择“所有项目”查看全部。
检查报告
点击任意检查即可深入查看完整报告:
- 严重级别分布条 — 按比例展示严重/高/中/低各级别的违规
- 按文件分组的违规 — 可折叠的分区,列出每条违规的严重级别、标题、描述和修复建议
- 检查元数据 — 触发类型、提交 SHA、开始时间、耗时
每份检查报告都有独立的可分享 URL(例如 /agent/dashboard/:checkId)。
删除检查
使用多选批量删除检查:
- 勾选单个检查旁的复选框,或使用“全选”
- 点击随之出现的红色 Delete 按钮
- 检查及其违规记录将被永久删除
CI/CD 集成
合规规则可以在每个拉取请求上自动运行。设置说明请参阅 GitHub Actions 集成。
工作原理
- 在 GitHub 上创建或更新 PR
- Archyl GitHub Action 获取变更的文件
- 文件被发送到 Archyl API 进行评估
- 结果以 PR 评论和提交状态检查的形式呈现
- 如果发现严重或高级别的违规,工作流将失败
PR 评论
发现违规时,Archyl 会在 PR 上发布一条详细评论:
- 按严重级别统计违规数量的摘要表
- 按文件列出的违规,附带描述和建议
- 后续推送时会更新这条评论(而不是重复发布)
管理规则
创建规则
- 点击 Packs 为您的技术栈安装精选规则集,或
- 点击 浏览目录 从 169 条预置规则中浏览并添加,或
- 点击 自定义规则 手动创建新规则
启用/禁用规则
切换任意规则旁的开关即可启用或禁用该规则。禁用的规则不会被评估。
编辑规则
点击任意规则上的编辑图标(铅笔)即可修改其名称、描述、严重级别或配置。
删除规则
点击删除图标(垃圾桶),然后确认。此操作无法撤销。
筛选规则
- 搜索 — 按规则名称或描述筛选
- 类型筛选 — 点击类型标签,仅显示特定类型的规则
MCP 集成
AI 代理可以通过 MCP 服务器访问合规规则:
可用的 MCP 工具
| 工具 | 描述 |
|---|---|
run_conformance_check |
针对提供的文件运行所有已启用的规则并返回违规 |
list_conformance_rules |
列出所有规则,可按项目筛选 |
create_conformance_rule |
创建新规则 |
update_conformance_rule |
更新规则的配置、严重级别或启用状态 |
delete_conformance_rule |
删除规则 |
get_agent_context |
获取完整的架构上下文,包括当前生效的护栏 |
从代理运行检查
run_conformance_check 工具让 AI 代理能够在提交前验证代码。代理会发送它正在处理的文件:
{
"projectId": "your-project-uuid",
"changedFiles": [
{ "path": "internal/handler/user.go", "status": "modified" }
],
"fileContents": {
"internal/handler/user.go": "package handler\nimport..."
}
}
响应包含:
passed— 检查是否通过(没有严重/高级别违规)violations— 违规列表,包含严重级别、文件路径、标题和建议rulesEvaluated— 评估了哪些规则filesAnalyzed— 分析了多少个文件checkId— 检查 ID(可在仪表板中查看)
代理可以根据这些反馈,在提交代码之前修复违规。
代理上下文
MCP 工具 get_agent_context 会将所有生效的合规规则作为架构简报的一部分返回。在开始工作前调用该工具的 AI 代理会知道需要遵守哪些护栏。
REST API
# Rules
GET /api/v1/conformance/rules # List rules
POST /api/v1/conformance/rules # Create rule
POST /api/v1/conformance/rules/bulk # Create multiple rules (used by packs)
GET /api/v1/conformance/rules/:id # Get rule
PUT /api/v1/conformance/rules/:id # Update rule
DELETE /api/v1/conformance/rules/:id # Delete rule
POST /api/v1/conformance/rules/:id/toggle # Enable/disable
# Checks
POST /api/v1/projects/:id/conformance/check # Trigger check with changed files
GET /api/v1/conformance/checks # List all checks (org-wide, ?projectId= filter)
GET /api/v1/conformance/checks/:id/report # Get check report with violations
POST /api/v1/conformance/checks/delete # Bulk delete checks { ids: [...] }
# Stats
GET /api/v1/conformance/stats # Org-wide statistics
GET /api/v1/projects/:id/conformance/stats # Project statistics
所有端点都需要身份验证(JWT,或在执行变更操作时使用具有写入权限范围的 API 密钥)。