ワンクリックで
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 错误码 验证方式: 手动测试跨层调用检测逻辑