Files
gaoandClaude 87a1ebcca5 完善Claude执行管理体系
- 创建Process-Driven AI Execution核心框架
- 设计四层契约体系 (需求/技术/执行/验证)
- 实现Claude四种执行模式 (Design/Development/Review/Optimization)
- 构建Process Gatekeeper三层验证体系
- 建立完整的质量门禁和违规处理机制
- 提供可执行的JSON Schema和模板库

核心价值:
✅ 一键创建 → Claude执行 → 自动验证 → 审阅
✅ 将Claude从"代码助手"转变为"流程化工程执行体"
✅ 全程可控、可审、可追踪的AI执行管理

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <[email protected]>
2025-10-29 12:29:27 +08:00

726 lines
23 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Process Gatekeeper(流程守卫系统)
> **版本**: v1.0
> **定位**: Claude执行流程的自动验证和质量控制中心
> **严格度**: ★★★★★ (所有规则必须严格执行)
---
## 🛡️ 系统架构
```mermaid
graph TD
A[Claude执行开始] --> B[加载Execution Contract]
B --> C[预执行检查]
C --> D{预检查通过?}
D -->|否| E[拒绝执行,返回错误]
D -->|是| F[Claude执行任务]
F --> G[生成输出结果]
G --> H[实时违规检测]
H --> I{发现违规?}
I -->|是| J[触发违规处理]
I -->|否| K[执行后验证]
K --> L{验证通过?}
L -->|否| M[退回重新执行]
L -->|是| N[进入人工审核]
N --> O[审核结果]
O --> P{审核通过?}
P -->|否| Q[反馈修改意见]
P -->|是| R[任务完成]
Q --> F
J --> S[记录违规]
S --> T[通知管理员]
M --> F
```
---
## 🔍 验证层级
### 第一层:预执行检查(Pre-Execution Check)
#### 1.1 契约完整性验证
```python
def validate_execution_contract(contract: dict) -> ValidationResult:
"""验证执行契约的完整性和有效性"""
required_fields = [
'execution_id', 'phase', 'mode', 'requirement_id',
'process_standard', 'quality_gates', 'deliverables',
'constraints', 'verification'
]
# 检查必需字段
missing_fields = [field for field in required_fields if field not in contract]
if missing_fields:
return ValidationResult(
valid=False,
error_code="MISSING_REQUIRED_FIELDS",
message=f"缺少必需字段: {missing_fields}"
)
# 验证格式规范
if not re.match(r'^EXE-\d{4}-\d{4}$', contract['execution_id']):
return ValidationResult(
valid=False,
error_code="INVALID_EXECUTION_ID",
message="执行ID格式错误,应为 EXE-YYYY-NNNN"
)
# 验证阶段和模式一致性
phase_mode_validations = {
'requirement': ['design'],
'design': ['design'],
'development': ['development'],
'testing': ['review'],
'review': ['review', 'optimization']
}
if contract['mode'] not in phase_mode_validations.get(contract['phase'], []):
return ValidationResult(
valid=False,
error_code="PHASE_MODE_MISMATCH",
message=f"阶段 {contract['phase']} 与模式 {contract['mode']} 不匹配"
)
return ValidationResult(valid=True)
```
#### 1.2 权限验证
```python
def validate_permissions(contract: dict, user_context: dict) -> ValidationResult:
"""验证用户权限和操作范围"""
# 检查用户是否有执行该阶段的权限
user_role = user_context.get('role')
phase = contract.get('phase')
role_permissions = {
'architect': ['requirement', 'design'],
'developer': ['development'],
'tester': ['testing'],
'reviewer': ['review'],
'admin': ['requirement', 'design', 'development', 'testing', 'review']
}
if phase not in role_permissions.get(user_role, []):
return ValidationResult(
valid=False,
error_code="INSUFFICIENT_PERMISSIONS",
message=f"角色 {user_role} 无权限执行 {phase} 阶段"
)
# 检查操作范围限制
scope_limitations = contract.get('constraints', {}).get('scope_limitations', {})
allowed_dirs = scope_limitations.get('allowed_directories', [])
forbidden_dirs = scope_limitations.get('forbidden_directories', [])
# TODO: 实现目录权限检查逻辑
return ValidationResult(valid=True)
```
#### 1.3 资源可用性检查
```python
def check_resource_availability(contract: dict) -> ValidationResult:
"""检查执行所需资源是否可用"""
# 检查相关文档是否存在
context = contract.get('context', {})
related_docs = context.get('related_docs', [])
for doc_path in related_docs:
if not os.path.exists(doc_path):
return ValidationResult(
valid=False,
error_code="DOCUMENT_NOT_FOUND",
message=f"相关文档不存在: {doc_path}"
)
# 检查质量门禁工具可用性
required_gates = contract.get('quality_gates', {}).get('required_gates', [])
gate_tools = {
'lint': ['eslint', 'pylint'],
'typecheck': ['tsc', 'mypy'],
'unit_test': ['pytest', 'vitest'],
'security_scan': ['bandit', 'trivy']
}
for gate in required_gates:
tools = gate_tools.get(gate, [])
if not any(tool_available(tool) for tool in tools):
return ValidationResult(
valid=False,
error_code="QUALITY_GATE_UNAVAILABLE",
message=f"质量门禁 {gate} 的工具不可用"
)
return ValidationResult(valid=True)
```
### 第二层:实时违规检测(Real-time Violation Detection)
#### 2.1 输出内容监控
```python
class ContentMonitor:
"""实时监控Claude输出内容"""
def __init__(self, contract: dict):
self.contract = contract
self.forbidden_patterns = contract.get('constraints', {}).get('forbidden_patterns', [])
self.required_patterns = contract.get('constraints', {}).get('required_patterns', [])
self.forbidden_actions = contract.get('constraints', {}).get('forbidden_actions', [])
def monitor_output(self, content: str, file_path: str) -> List[Violation]:
"""监控输出内容,检测违规行为"""
violations = []
# 检查禁止模式
for pattern in self.forbidden_patterns:
if re.search(pattern, content, re.IGNORECASE):
violations.append(Violation(
type="FORBIDDEN_PATTERN",
severity="high",
pattern=pattern,
file_path=file_path,
message=f"检测到禁止模式: {pattern}"
))
# 检查跨阶段操作
phase = self.contract.get('phase')
if phase == 'design' and self._contains_code(content):
violations.append(Violation(
type="CROSS_PHASE_OPERATION",
severity="critical",
message="设计阶段禁止生成代码"
))
# 检查禁止操作
for action in self.forbidden_actions:
if action.lower() in content.lower():
violations.append(Violation(
type="FORBIDDEN_ACTION",
severity="high",
action=action,
file_path=file_path,
message=f"检测到禁止操作: {action}"
))
return violations
def _contains_code(self, content: str) -> bool:
"""检测内容是否包含可执行代码"""
code_indicators = [
r'function\s+\w+\s*\(',
r'class\s+\w+\s*:',
r'def\s+\w+\s*\(',
r'import\s+\w+',
r'const\s+\w+\s*=',
r'let\s+\w+\s*=',
r'var\s+\w+\s*='
]
return any(re.search(pattern, content) for pattern in code_indicators)
```
#### 2.2 交付物完整性检查
```python
class DeliverableTracker:
"""跟踪交付物生成状态"""
def __init__(self, contract: dict):
self.contract = contract
self.expected_deliverables = contract.get('deliverables', [])
self.generated_deliverables = {}
def track_deliverable(self, file_path: str, content: str) -> ValidationResult:
"""跟踪交付物生成"""
# 查找对应的交付物定义
expected = None
for deliverable in self.expected_deliverables:
if deliverable['path'] == file_path:
expected = deliverable
break
if not expected:
return ValidationResult(
valid=False,
error_code="UNEXPECTED_DELIVERABLE",
message=f"未预期的交付物: {file_path}"
)
# 验证内容类型
expected_type = expected.get('type')
if not self._validate_content_type(content, expected_type):
return ValidationResult(
valid=False,
error_code="INVALID_CONTENT_TYPE",
message=f"交付物 {file_path} 内容类型与预期不符"
)
# 验证Schema约束
schema = expected.get('schema')
if schema and not self._validate_schema(content, schema):
return ValidationResult(
valid=False,
error_code="SCHEMA_VALIDATION_FAILED",
message=f"交付物 {file_path} 不符合Schema约束"
)
self.generated_deliverables[file_path] = {
'content': content,
'type': expected_type,
'size': len(content),
'created_at': datetime.now().isoformat()
}
return ValidationResult(valid=True)
def check_completeness(self) -> ValidationResult:
"""检查交付物完整性"""
missing_deliverables = []
for expected in self.expected_deliverables:
if expected['path'] not in self.generated_deliverables:
missing_deliverables.append(expected['path'])
if missing_deliverables:
return ValidationResult(
valid=False,
error_code="INCOMPLETE_DELIVERABLES",
message=f"缺少交付物: {missing_deliverables}"
)
return ValidationResult(valid=True)
```
### 第三层:执行后验证(Post-Execution Validation)
#### 3.1 质量门禁执行
```python
class QualityGateExecutor:
"""执行质量门禁检查"""
def __init__(self, contract: dict):
self.contract = contract
self.quality_gates = contract.get('quality_gates', {})
self.required_gates = self.quality_gates.get('required_gates', [])
self.thresholds = self.quality_gates.get('thresholds', {})
async def execute_quality_gates(self, workspace_path: str) -> QualityGateResult:
"""执行所有质量门禁检查"""
results = {}
overall_passed = True
for gate in self.required_gates:
try:
if gate == 'lint':
result = await self._run_lint_check(workspace_path)
elif gate == 'typecheck':
result = await self._run_typecheck(workspace_path)
elif gate == 'unit_test':
result = await self._run_unit_tests(workspace_path)
elif gate == 'security_scan':
result = await self._run_security_scan(workspace_path)
elif gate == 'schema_validation':
result = await self._run_schema_validation(workspace_path)
else:
result = QualityGateResult(
gate=gate,
passed=False,
message=f"未知的质量门禁: {gate}"
)
results[gate] = result
if not result.passed:
overall_passed = False
except Exception as e:
results[gate] = QualityGateResult(
gate=gate,
passed=False,
message=f"执行质量门禁失败: {str(e)}"
)
overall_passed = False
# 计算质量分数
quality_score = self._calculate_quality_score(results)
return QualityGateResult(
gate="overall",
passed=overall_passed and quality_score >= self.thresholds.get('quality_score', 80),
message=f"整体质量分数: {quality_score}",
details=results,
quality_score=quality_score
)
async def _run_lint_check(self, workspace_path: str) -> QualityGateResult:
"""运行代码规范检查"""
# 检测项目类型和选择合适的linter
if os.path.exists(os.path.join(workspace_path, 'package.json')):
return await self._run_eslint(workspace_path)
elif os.path.exists(os.path.join(workspace_path, 'pyproject.toml')):
return await self._run_pylint(workspace_path)
else:
return QualityGateResult(
gate="lint",
passed=False,
message="无法确定项目类型,跳过lint检查"
)
async def _run_unit_tests(self, workspace_path: str) -> QualityGateResult:
"""运行单元测试"""
# 执行测试并收集覆盖率
try:
# 运行测试
test_result = subprocess.run(
['pytest', '--cov=.', '--cov-report=json'],
cwd=workspace_path,
capture_output=True,
text=True
)
if test_result.returncode != 0:
return QualityGateResult(
gate="unit_test",
passed=False,
message=f"测试失败: {test_result.stderr}"
)
# 读取覆盖率报告
coverage_data = self._parse_coverage_report(workspace_path)
coverage_percentage = coverage_data.get('totals', {}).get('percent_covered', 0)
required_coverage = self.thresholds.get('test_coverage', 80)
passed = coverage_percentage >= required_coverage
return QualityGateResult(
gate="unit_test",
passed=passed,
message=f"测试覆盖率: {coverage_percentage}% (要求: {required_coverage}%)",
metrics={'coverage_percentage': coverage_percentage}
)
except Exception as e:
return QualityGateResult(
gate="unit_test",
passed=False,
message=f"执行测试失败: {str(e)}"
)
```
#### 3.2 安全检查
```python
class SecurityScanner:
"""安全扫描器"""
def __init__(self):
self.security_rules = [
self._check_hardcoded_secrets,
self._check_sql_injection,
self._check_xss_vulnerabilities,
self._check_insecure_dependencies,
self._check_file_permissions
]
async def scan_security(self, workspace_path: str) -> SecurityResult:
"""执行安全扫描"""
vulnerabilities = []
severity_counts = {'critical': 0, 'high': 0, 'medium': 0, 'low': 0}
for rule in self.security_rules:
try:
rule_vulnerabilities = await rule(workspace_path)
vulnerabilities.extend(rule_vulnerabilities)
for vuln in rule_vulnerabilities:
severity_counts[vuln.severity] += 1
except Exception as e:
logging.error(f"安全规则执行失败: {str(e)}")
# 计算风险等级
risk_level = self._calculate_risk_level(severity_counts)
return SecurityResult(
passed=severity_counts['critical'] == 0 and severity_counts['high'] == 0,
risk_level=risk_level,
vulnerabilities=vulnerabilities,
summary=severity_counts
)
async def _check_hardcoded_secrets(self, workspace_path: str) -> List[Vulnerability]:
"""检查硬编码密钥"""
secret_patterns = [
(r'password\s*=\s*["\'][^"\']+["\']', 'hardcoded_password'),
(r'api_key\s*=\s*["\'][^"\']+["\']', 'hardcoded_api_key'),
(r'secret\s*=\s*["\'][^"\']+["\']', 'hardcoded_secret'),
(r'token\s*=\s*["\'][^"\']+["\']', 'hardcoded_token')
]
vulnerabilities = []
for root, dirs, files in os.walk(workspace_path):
# 跳过常见的非源码目录
dirs[:] = [d for d in dirs if d not in ['.git', 'node_modules', '__pycache__', '.venv']]
for file in files:
if file.endswith(('.py', '.js', '.ts', '.java', '.go', '.rs')):
file_path = os.path.join(root, file)
try:
with open(file_path, 'r', encoding='utf-8') as f:
content = f.read()
for pattern, vuln_type in secret_patterns:
matches = re.finditer(pattern, content, re.IGNORECASE)
for match in matches:
vulnerabilities.append(Vulnerability(
type=vuln_type,
severity="high",
file_path=file_path,
line_number=content[:match.start()].count('\n') + 1,
message=f"发现硬编码密钥: {vuln_type}",
recommendation="使用环境变量或配置管理工具存储敏感信息"
))
except Exception as e:
logging.warning(f"无法扫描文件 {file_path}: {str(e)}")
return vulnerabilities
```
---
## 🚨 违规处理机制
### 违规等级定义
| 等级 | 描述 | 处理方式 | 自动恢复 |
|------|------|----------|----------|
| **Critical** | 严重违规,如安全漏洞、跨阶段操作 | 立即停止执行,上报管理员 | 否 |
| **High** | 高风险违规,如违反核心约束 | 停止执行,需要人工干预 | 否 |
| **Medium** | 中等风险,如质量问题 | 记录违规,允许重试 | 是 |
| **Low** | 低风险,如格式问题 | 警告记录,继续执行 | 是 |
### 自动处理流程
```python
class ViolationHandler:
"""违规处理器"""
def __init__(self, notification_service: NotificationService):
self.notification_service = notification_service
async def handle_violation(self, violation: Violation, context: ExecutionContext) -> HandlingResult:
"""处理违规事件"""
# 记录违规
await self._log_violation(violation, context)
# 根据严重程度选择处理策略
if violation.severity == 'critical':
return await self._handle_critical_violation(violation, context)
elif violation.severity == 'high':
return await self._handle_high_violation(violation, context)
elif violation.severity == 'medium':
return await self._handle_medium_violation(violation, context)
else:
return await self._handle_low_violation(violation, context)
async def _handle_critical_violation(self, violation: Violation, context: ExecutionContext) -> HandlingResult:
"""处理严重违规"""
# 立即停止执行
await context.stop_execution()
# 清理已生成的文件
await context.cleanup_workspace()
# 通知管理员
await self.notification_service.send_alert(
level="critical",
message=f"严重违规: {violation.message}",
context=context.to_dict()
)
# 启动安全事故流程
await self._initiate_security_incident(violation, context)
return HandlingResult(
action="execution_stopped",
requires_manual_intervention=True,
message="执行已因严重违规而停止,等待管理员处理"
)
async def _handle_medium_violation(self, violation: Violation, context: ExecutionContext) -> HandlingResult:
"""处理中等风险违规"""
# 尝试自动修复
if await self._attempt_auto_fix(violation, context):
return HandlingResult(
action="auto_fixed",
requires_manual_intervention=False,
message="违规已自动修复,继续执行"
)
# 记录违规并允许重试
await self._record_warning(violation, context)
return HandlingResult(
action="warning_recorded",
requires_manual_intervention=False,
message="记录违规警告,允许重试"
)
```
---
## 📊 监控和报告
### 实时监控指标
```python
class GatekeeperMetrics:
"""守卫系统监控指标"""
def __init__(self):
self.execution_count = Counter('gatekeeper_executions_total')
self.violation_count = Counter('gatekeeper_violations_total', ['severity', 'type'])
self.quality_gate_results = Histogram('gatekeeper_quality_gate_duration')
self.success_rate = Gauge('gatekeeper_success_rate')
def record_execution_start(self, execution_id: str, phase: str, mode: str):
"""记录执行开始"""
self.execution_count.labels(phase=phase, mode=mode).inc()
def record_violation(self, violation: Violation):
"""记录违规"""
self.violation_count.labels(
severity=violation.severity,
type=violation.type
).inc()
def record_quality_gate_result(self, gate: str, duration: float, passed: bool):
"""记录质量门禁结果"""
self.quality_gate_results.labels(gate=gate).observe(duration)
def calculate_success_rate(self, time_window: int = 3600) -> float:
"""计算成功率"""
# 实现成功率计算逻辑
pass
```
### 生成执行报告
```python
class ExecutionReporter:
"""执行报告生成器"""
async def generate_execution_report(self, execution_id: str) -> ExecutionReport:
"""生成详细的执行报告"""
# 收集执行数据
execution_data = await self._collect_execution_data(execution_id)
# 生成质量评估
quality_assessment = await self._assess_quality(execution_data)
# 分析违规情况
violation_analysis = await self._analyze_violations(execution_data)
# 计算效率指标
efficiency_metrics = await self._calculate_efficiency(execution_data)
return ExecutionReport(
execution_id=execution_id,
summary=execution_data.get('summary'),
quality_assessment=quality_assessment,
violation_analysis=violation_analysis,
efficiency_metrics=efficiency_metrics,
recommendations=await self._generate_recommendations(execution_data),
generated_at=datetime.now().isoformat()
)
```
---
## 🔧 配置和部署
### 系统配置
```yaml
# gatekeeper-config.yaml
gatekeeper:
enabled: true
strict_mode: true
validation:
pre_execution_checks:
- contract_validation
- permission_check
- resource_availability
real_time_monitoring:
- content_monitoring
- deliverable_tracking
- violation_detection
post_execution_validation:
- quality_gates
- security_scan
- completeness_check
violations:
critical:
auto_stop: true
notification: ["admin", "security_team"]
high:
retry_limit: 1
notification: ["admin"]
medium:
retry_limit: 3
auto_fix: true
low:
log_only: true
quality_gates:
lint:
enabled: true
tools: ["eslint", "pylint", "gofmt"]
typecheck:
enabled: true
tools: ["tsc", "mypy", "go build"]
unit_test:
enabled: true
min_coverage: 80
tools: ["pytest", "vitest", "go test"]
security_scan:
enabled: true
tools: ["bandit", "trivy", "snyk"]
fail_on_high: true
```
---
**更新记录**:
| 版本 | 日期 | 更新内容 | 更新人 |
|------|------|----------|--------|
| v1.0 | 2025-10-29 | 初始版本,定义完整守卫系统 | Claude AI |
*Process Gatekeeper 是确保 Claude 严格执行流程标准的核心组件,通过多层次验证和实时监控,保证AI执行的质量和安全性。*