mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-05 01:50:27 +08:00
- Introduced quality gates specification for skill tuning, detailing quality dimensions, scoring, and gate definitions. - Added comprehensive tuning strategies for various issue categories, including context explosion, long-tail forgetting, data flow, and agent coordination. - Created templates for diagnosis reports and fix proposals to standardize documentation and reporting processes.
7.0 KiB
7.0 KiB
Action: Generate Consolidated Report
Generate a comprehensive tuning report merging all diagnosis results with prioritized recommendations.
Purpose
- Merge all diagnosis results into unified report
- Prioritize issues by severity and impact
- Generate actionable recommendations
- Create human-readable markdown report
Preconditions
- state.status === 'running'
- All diagnoses in focus_areas are completed
- state.issues.length > 0 OR generate summary report
Execution
async function execute(state, workDir) {
console.log('Generating consolidated tuning report...');
const targetSkill = state.target_skill;
const issues = state.issues;
// 1. Group issues by type
const issuesByType = {
context_explosion: issues.filter(i => i.type === 'context_explosion'),
memory_loss: issues.filter(i => i.type === 'memory_loss'),
dataflow_break: issues.filter(i => i.type === 'dataflow_break'),
agent_failure: issues.filter(i => i.type === 'agent_failure')
};
// 2. Group issues by severity
const issuesBySeverity = {
critical: issues.filter(i => i.severity === 'critical'),
high: issues.filter(i => i.severity === 'high'),
medium: issues.filter(i => i.severity === 'medium'),
low: issues.filter(i => i.severity === 'low')
};
// 3. Calculate overall health score
const weights = { critical: 25, high: 15, medium: 5, low: 1 };
const deductions = Object.entries(issuesBySeverity)
.reduce((sum, [sev, arr]) => sum + arr.length * weights[sev], 0);
const healthScore = Math.max(0, 100 - deductions);
// 4. Generate report content
const report = `# Skill Tuning Report
**Target Skill**: ${targetSkill.name}
**Path**: ${targetSkill.path}
**Execution Mode**: ${targetSkill.execution_mode}
**Generated**: ${new Date().toISOString()}
---
## Executive Summary
| Metric | Value |
|--------|-------|
| Health Score | ${healthScore}/100 |
| Total Issues | ${issues.length} |
| Critical | ${issuesBySeverity.critical.length} |
| High | ${issuesBySeverity.high.length} |
| Medium | ${issuesBySeverity.medium.length} |
| Low | ${issuesBySeverity.low.length} |
### User Reported Issue
> ${state.user_issue_description}
### Overall Assessment
${healthScore >= 80 ? '✅ Skill is in good health with minor issues.' :
healthScore >= 60 ? '⚠️ Skill has significant issues requiring attention.' :
healthScore >= 40 ? '🔶 Skill has serious issues affecting reliability.' :
'❌ Skill has critical issues requiring immediate fixes.'}
---
## Diagnosis Results
### Context Explosion Analysis
${state.diagnosis.context ?
`- **Status**: ${state.diagnosis.context.status}
- **Severity**: ${state.diagnosis.context.severity}
- **Issues Found**: ${state.diagnosis.context.issues_found}
- **Key Findings**: ${state.diagnosis.context.details.recommendations.join('; ') || 'None'}` :
'_Not analyzed_'}
### Long-tail Memory Analysis
${state.diagnosis.memory ?
`- **Status**: ${state.diagnosis.memory.status}
- **Severity**: ${state.diagnosis.memory.severity}
- **Issues Found**: ${state.diagnosis.memory.issues_found}
- **Key Findings**: ${state.diagnosis.memory.details.recommendations.join('; ') || 'None'}` :
'_Not analyzed_'}
### Data Flow Analysis
${state.diagnosis.dataflow ?
`- **Status**: ${state.diagnosis.dataflow.status}
- **Severity**: ${state.diagnosis.dataflow.severity}
- **Issues Found**: ${state.diagnosis.dataflow.issues_found}
- **Key Findings**: ${state.diagnosis.dataflow.details.recommendations.join('; ') || 'None'}` :
'_Not analyzed_'}
### Agent Coordination Analysis
${state.diagnosis.agent ?
`- **Status**: ${state.diagnosis.agent.status}
- **Severity**: ${state.diagnosis.agent.severity}
- **Issues Found**: ${state.diagnosis.agent.issues_found}
- **Key Findings**: ${state.diagnosis.agent.details.recommendations.join('; ') || 'None'}` :
'_Not analyzed_'}
---
## Critical & High Priority Issues
${issuesBySeverity.critical.length + issuesBySeverity.high.length === 0 ?
'_No critical or high priority issues found._' :
[...issuesBySeverity.critical, ...issuesBySeverity.high].map((issue, i) => `
### ${i + 1}. [${issue.severity.toUpperCase()}] ${issue.description}
- **ID**: ${issue.id}
- **Type**: ${issue.type}
- **Location**: ${typeof issue.location === 'object' ? issue.location.file : issue.location}
- **Root Cause**: ${issue.root_cause}
- **Impact**: ${issue.impact}
- **Suggested Fix**: ${issue.suggested_fix}
**Evidence**:
${issue.evidence.map(e => `- \`${e}\``).join('\n')}
`).join('\n')}
---
## Medium & Low Priority Issues
${issuesBySeverity.medium.length + issuesBySeverity.low.length === 0 ?
'_No medium or low priority issues found._' :
[...issuesBySeverity.medium, ...issuesBySeverity.low].map((issue, i) => `
### ${i + 1}. [${issue.severity.toUpperCase()}] ${issue.description}
- **ID**: ${issue.id}
- **Type**: ${issue.type}
- **Suggested Fix**: ${issue.suggested_fix}
`).join('\n')}
---
## Recommended Fix Order
Based on severity and dependencies, apply fixes in this order:
${[...issuesBySeverity.critical, ...issuesBySeverity.high, ...issuesBySeverity.medium]
.slice(0, 10)
.map((issue, i) => `${i + 1}. **${issue.id}**: ${issue.suggested_fix}`)
.join('\n')}
---
## Quality Gates
| Gate | Threshold | Current | Status |
|------|-----------|---------|--------|
| Critical Issues | 0 | ${issuesBySeverity.critical.length} | ${issuesBySeverity.critical.length === 0 ? '✅ PASS' : '❌ FAIL'} |
| High Issues | ≤ 2 | ${issuesBySeverity.high.length} | ${issuesBySeverity.high.length <= 2 ? '✅ PASS' : '❌ FAIL'} |
| Health Score | ≥ 60 | ${healthScore} | ${healthScore >= 60 ? '✅ PASS' : '❌ FAIL'} |
**Overall Quality Gate**: ${
issuesBySeverity.critical.length === 0 &&
issuesBySeverity.high.length <= 2 &&
healthScore >= 60 ? '✅ PASS' : '❌ FAIL'}
---
*Report generated by skill-tuning*
`;
// 5. Write report
Write(`${workDir}/tuning-report.md`, report);
// 6. Calculate quality gate
const qualityGate = issuesBySeverity.critical.length === 0 &&
issuesBySeverity.high.length <= 2 &&
healthScore >= 60 ? 'pass' :
healthScore >= 40 ? 'review' : 'fail';
return {
stateUpdates: {
quality_score: healthScore,
quality_gate: qualityGate,
issues_by_severity: {
critical: issuesBySeverity.critical.length,
high: issuesBySeverity.high.length,
medium: issuesBySeverity.medium.length,
low: issuesBySeverity.low.length
}
},
outputFiles: [`${workDir}/tuning-report.md`],
summary: `Report generated: ${issues.length} issues, health score ${healthScore}/100, gate: ${qualityGate}`
};
}
State Updates
return {
stateUpdates: {
quality_score: <0-100>,
quality_gate: '<pass|review|fail>',
issues_by_severity: { critical: N, high: N, medium: N, low: N }
}
};
Error Handling
| Error Type | Recovery |
|---|---|
| Write error | Retry to alternative path |
| Empty issues | Generate summary with no issues |
Next Actions
- If issues.length > 0: action-propose-fixes
- If issues.length === 0: action-complete