一键导入
harness-enforce-architecture-guardrails
架构护栏技能,强制执行分层架构约束,防止跨层调用和架构违规
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
架构护栏技能,强制执行分层架构约束,防止跨层调用和架构违规
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
EnjoyHarness 唯一强制入口,初始化全局状态、文件体系、技能注册表
配置文件读取和验证技能,确保用户配置正确且完整
全流程自动执行超级组合技能,编排所有16个基础技能,从用户需求到完整交付的全自动化流程
头脑风暴技能,在实现前探索用户意图、需求和设计,防止返工
实施计划执行技能,逐任务执行实施计划,支持检查点、错误恢复和进度跟踪
10倍产能提效超级组合技能,通过并行执行、智能调度、优化策略实现10倍开发效率提升
| name | harness-enforce-architecture-guardrails |
| description | 架构护栏技能,强制执行分层架构约束,防止跨层调用和架构违规 |
| trigger_words | ["harness-enforce-architecture-guardrails","架构护栏","architecture-guardrails","架构约束"] |
| priority | HIGH |
| dependencies | ["harness-build-core-manifest"] |
| version | v3.0.0 |
使用 Read 工具读取:.EnjoyHarness/SKILL_REGISTRY.md
检查条件:
如果未完成:
❌ 错误: 核心规则未构建
💡 请先运行: harness-build-core-manifest
使用 Write 工具创建文件:.EnjoyHarness/ARCHITECTURE_GUARDRAILS.md
内容:
---
version: v3.0.0
created_at: 2026-03-28T10:50:00+08:00
total_rules: 15
---
# EnjoyHarness 架构护栏规则
## 分层架构定义
Layer 1: Types(类型定义层)
Layer 2: Config(配置层)
Layer 3: Repo(数据访问层)
Layer 4: Service(业务逻辑层)
Layer 5: Runtime(运行时层)
Layer 6: UI(展示层)
## 架构约束规则(15条)
### 约束 1: 单向依赖原则
**规则**: 每层只能依赖直接下层,禁止向上依赖
**检测**: AST 分析 import 关系
**违规示例**:
```go
// ❌ 违规: Service 层直接导入 Runtime 层
import "myapp/runtime/server"
// ✅ 正确: Service 层仅依赖 Repo 层
import "myapp/repo/user"
规则: 禁止跨层调用(跳过中间层) 检测: AST 分析调用链 违规示例:
// ❌ 违规: UI 层直接调用 Repo 层(跳过 Service)
user := repo.GetUser(id)
// ✅ 正确: UI 层调用 Service 层
user := service.GetUser(id)
规则: 跨层使用的接口必须定义在 Types 层 检测: 接口位置检查 违规示例:
// ❌ 违规: Service 层定义公共接口
package service
type UserRepository interface { ... }
// ✅ 正确: Types 层定义接口
package types
type UserRepository interface { ... }
规则: 所有配置读取必须通过 Config 层 检测: os.Getenv 调用位置 违规示例:
// ❌ 违规: Service 层直接读取环境变量
port := os.Getenv("PORT")
// ✅ 正确: 通过 Config 层读取
port := config.GetPort()
规则: 业务逻辑不能散落在 UI 或 Runtime 层 检测: 函数复杂度和位置分析 违规示例:
// ❌ 违规: UI 层包含业务逻辑
func HandleCreateUser(w http.ResponseWriter, r *http.Request) {
if user.Age < 18 { // 业务逻辑
return Error("年龄必须≥18岁")
}
...
}
// ✅ 正确: 业务逻辑在 Service 层
func HandleCreateUser(w http.ResponseWriter, r *http.Request) {
err := service.CreateUser(user)
...
}
规则: UI 层不能包含数据处理逻辑 检测: 函数职责分析 违规示例:
// ❌ 违规: UI 层处理数据转换
func HandleGetUser(w http.ResponseWriter, r *http.Request) {
user := service.GetUser(id)
response := map[string]interface{}{
"name": user.FirstName + " " + user.LastName, // 数据处理
}
}
// ✅ 正确: UI 层仅格式化响应
func HandleGetUser(w http.ResponseWriter, r *http.Request) {
user := service.GetUser(id)
json.NewEncoder(w).Encode(user)
}
规则: 包之间不能有循环导入 检测: import 图环检测 违规示例:
A imports B
B imports C
C imports A // ❌ 循环依赖
规则: 所有可能失败的函数必须返回 error 检测: 函数签名分析 违规示例:
// ❌ 违规: 可能失败但不返回 error
func GetUser(id int) *User {
return db.Find(id)
}
// ✅ 正确: 返回 error
func GetUser(id int) (*User, error) {
return db.Find(id)
}
规则: 禁止跨层共享可变全局变量 检测: 全局变量声明检查 违规示例:
// ❌ 违规: 全局变量
var DB *sql.DB
func GetUser() {
DB.Query(...) // 隐式依赖
}
规则: 所有依赖必须通过函数参数传递 检测: 参数分析 违规示例:
// ❌ 违规: 隐式依赖
func CreateUser() {
db := GetDB() // 隐式获取
}
// ✅ 正确: 显式依赖
func CreateUser(db *sql.DB) {
...
}
规则: Types 层必须完全独立 检测: Types 层 import 检查 违规示例:
// ❌ 违规: Types 层导入 Service 层
package types
import "myapp/service"
规则: 单元测试必须与被测代码同层 检测: 测试文件位置检查 违规示例:
// ❌ 违规: Service 测试放在 UI 层
ui/user_handler_test.go // 测试 service.CreateUser
规则: Repo 层仅负责数据访问 检测: 函数职责分析 违规示例:
// ❌ 违规: Repo 层包含业务逻辑
func (r *UserRepo) Create(user *User) error {
if user.Age < 18 { // 业务逻辑
return errors.New("年龄必须≥18岁")
}
return r.db.Create(user)
}
规则: UI 层不能直接调用 Repo 层 检测: 调用链分析 违规示例:
// ❌ 违规: UI 层直接访问数据库
func HandleGetUser(w http.ResponseWriter, r *http.Request) {
user := repo.GetUser(id) // 跳过 Service 层
}
规则: 外部服务地址、密钥等必须在 Config 层 检测: 硬编码字符串检查 违规示例:
// ❌ 违规: 硬编码外部服务地址
client := http.Client{}
resp, _ := client.Get("https://api.example.com")
// ✅ 正确: 从 Config 读取
apiURL := config.GetAPIURL()
resp, _ := client.Get(apiURL)
# 检测跨层调用
grep -r "import.*service" ui/
# 检测全局变量
grep -r "^var.*=" --include="*.go" | grep -v "_test.go"
# 检测循环依赖
go list -f '{{.ImportPath}}: {{.Imports}}' ./... | detect_cycles.py
违规代码:
// ui/handler.go
func HandleGetUser(w http.ResponseWriter, r *http.Request) {
user := repo.GetUser(id) // ❌ 跳过 Service 层
json.NewEncoder(w).Encode(user)
}
自动修复:
// ui/handler.go
func HandleGetUser(w http.ResponseWriter, r *http.Request) {
user := service.GetUser(id) // ✅ 通过 Service 层
json.NewEncoder(w).Encode(user)
}
违规代码:
// ui/handler.go
func HandleCreateUser(w http.ResponseWriter, r *http.Request) {
if user.Age < 18 { // ❌ UI 层包含业务逻辑
return Error("年龄必须≥18岁")
}
service.CreateUser(user)
}
自动修复:
// service/user.go
func CreateUser(user *User) error {
if user.Age < 18 { // ✅ 业务逻辑在 Service 层
return errors.New("年龄必须≥18岁")
}
return repo.Create(user)
}
| 错误码 | 违规类型 | 严重程度 | 自动修复 |
|---|---|---|---|
| ARCH-001 | 循环依赖 | 高 | ✅ |
| ARCH-002 | 跨层调用 | 高 | ✅ |
| ARCH-003 | 业务逻辑散落 | 中 | ⚠️ |
| ARCH-004 | 错误处理缺失 | 中 | ⚠️ |
| ARCH-005 | 全局变量使用 | 中 | ❌ |
| ARCH-006 | 隐式依赖 | 低 | ❌ |
# 运行架构护栏检查
./scripts/check-architecture.sh
# 或使用 harness-enforce-architecture-guardrails 技能
# .github/workflows/ci.yml
- name: Architecture Check
run: |
./scripts/check-architecture.sh
if [ $? -ne 0 ]; then
echo "架构违规,请修复后再提交"
exit 1
fi
### Step 3: 更新事件日志
使用 Edit 工具追加内容到:`.EnjoyHarness/EVENT_LOG.md`
追加内容:
```markdown
2026-03-28T10:50:00+08:00 | SKILL_START | harness-enforce-architecture-guardrails | 开始构建架构护栏 | SUCCESS
2026-03-28T10:50:00+08:00 | SKILL_COMPLETE | harness-enforce-architecture-guardrails | 架构护栏构建完成 | SUCCESS
使用 Edit 工具更新:.EnjoyHarness/EVENT_LOG.md
old_string: total_events: 6
new_string: total_events: 8
使用 Edit 工具更新:.EnjoyHarness/SKILL_REGISTRY.md
old_string: - [ ] harness-enforce-architecture-guardrails - 架构护栏技能
new_string: - [x] harness-enforce-architecture-guardrails - 架构护栏技能 ✅
使用 Bash 工具输出:
echo ""
echo "✅ harness-enforce-architecture-guardrails 完成!"
echo ""
echo "📋 架构护栏文件:"
echo " - .EnjoyHarness/ARCHITECTURE_GUARDRAILS.md"
echo ""
echo "📊 规则统计:"
echo " - 分层架构: 6层 (Types → Config → Repo → Service → Runtime → UI)"
echo " - 约束规则: 15条"
echo " - 错误码: 6个 (ARCH-001 到 ARCH-006)"
echo ""
echo "🔧 自动修复能力:"
echo " - 循环依赖: ✅ 自动修复"
echo " - 跨层调用: ✅ 自动修复"
echo " - 业务逻辑散落: ⚠️ 提示修复"
echo " - 错误处理缺失: ⚠️ 提示修复"
echo ""
echo "🎯 Phase 1 核心基础层已全部完成!"
echo ""
本技能执行预计迭代次数: 约 5 次(Write 1次 + Edit 3次 + Read 1次)
输入: 在核心规则未构建时运行 期望输出: 错误提示"核心规则未构建" 验证方式: 删除 AGENTS_MANIFEST.md 后运行
输入: 执行 harness-enforce-architecture-guardrails
期望输出: ARCHITECTURE_GUARDRAILS.md 包含15条约束规则
验证方式: grep -c "约束" .EnjoyHarness/ARCHITECTURE_GUARDRAILS.md
输入: 读取 ARCHITECTURE_GUARDRAILS.md
期望输出: 包含6层架构(Types → Config → Repo → Service → Runtime → UI)
验证方式: grep -c "Layer" .EnjoyHarness/ARCHITECTURE_GUARDRAILS.md
输入: 读取 SKILL_REGISTRY.md
期望输出: harness-enforce-architecture-guardrails 标记为完成
验证方式: grep "harness-enforce-architecture-guardrails" .EnjoyHarness/SKILL_REGISTRY.md
输入: 读取 EVENT_LOG.md
期望输出: 包含 harness-enforce-architecture-guardrails 启动和完成事件
验证方式: grep "harness-enforce-architecture-guardrails" .EnjoyHarness/EVENT_LOG.md
输入: 创建一个跨层调用的代码示例 期望输出: 检测到 ARCH-002 错误码 验证方式: 手动测试跨层调用检测逻辑