mirror of
https://github.com/catlog22/Claude-Code-Workflow.git
synced 2026-02-15 02:42:45 +08:00
Add quality gates and tuning strategies documentation
- 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.
This commit is contained in:
164
.claude/skills/skill-tuning/phases/actions/action-abort.md
Normal file
164
.claude/skills/skill-tuning/phases/actions/action-abort.md
Normal file
@@ -0,0 +1,164 @@
|
||||
# Action: Abort
|
||||
|
||||
Abort the tuning session due to unrecoverable errors.
|
||||
|
||||
## Purpose
|
||||
|
||||
- Safely terminate on critical failures
|
||||
- Preserve diagnostic information for debugging
|
||||
- Ensure backup remains available
|
||||
- Notify user of failure reason
|
||||
|
||||
## Preconditions
|
||||
|
||||
- [ ] state.error_count >= state.max_errors
|
||||
- [ ] OR critical failure detected
|
||||
|
||||
## Execution
|
||||
|
||||
```javascript
|
||||
async function execute(state, workDir) {
|
||||
console.log('Aborting skill tuning session...');
|
||||
|
||||
const errors = state.errors;
|
||||
const targetSkill = state.target_skill;
|
||||
|
||||
// Generate abort report
|
||||
const abortReport = `# Skill Tuning Aborted
|
||||
|
||||
**Target Skill**: ${targetSkill?.name || 'Unknown'}
|
||||
**Aborted At**: ${new Date().toISOString()}
|
||||
**Reason**: Too many errors or critical failure
|
||||
|
||||
---
|
||||
|
||||
## Error Log
|
||||
|
||||
${errors.length === 0 ? '_No errors recorded_' :
|
||||
errors.map((err, i) => `
|
||||
### Error ${i + 1}
|
||||
- **Action**: ${err.action}
|
||||
- **Message**: ${err.message}
|
||||
- **Time**: ${err.timestamp}
|
||||
- **Recoverable**: ${err.recoverable ? 'Yes' : 'No'}
|
||||
`).join('\n')}
|
||||
|
||||
---
|
||||
|
||||
## Session State at Abort
|
||||
|
||||
- **Status**: ${state.status}
|
||||
- **Iteration Count**: ${state.iteration_count}
|
||||
- **Completed Actions**: ${state.completed_actions.length}
|
||||
- **Issues Found**: ${state.issues.length}
|
||||
- **Fixes Applied**: ${state.applied_fixes.length}
|
||||
|
||||
---
|
||||
|
||||
## Recovery Options
|
||||
|
||||
### Option 1: Restore Original Skill
|
||||
If any changes were made, restore from backup:
|
||||
\`\`\`bash
|
||||
cp -r "${state.backup_dir}/${targetSkill?.name || 'backup'}-backup"/* "${targetSkill?.path || 'target'}/"
|
||||
\`\`\`
|
||||
|
||||
### Option 2: Resume from Last State
|
||||
The session state is preserved at:
|
||||
\`${workDir}/state.json\`
|
||||
|
||||
To resume:
|
||||
1. Fix the underlying issue
|
||||
2. Reset error_count in state.json
|
||||
3. Re-run skill-tuning with --resume flag
|
||||
|
||||
### Option 3: Manual Investigation
|
||||
Review the following files:
|
||||
- Diagnosis results: \`${workDir}/diagnosis/*.json\`
|
||||
- Error log: \`${workDir}/errors.json\`
|
||||
- State snapshot: \`${workDir}/state.json\`
|
||||
|
||||
---
|
||||
|
||||
## Diagnostic Information
|
||||
|
||||
### Last Successful Action
|
||||
${state.completed_actions.length > 0 ? state.completed_actions[state.completed_actions.length - 1] : 'None'}
|
||||
|
||||
### Current Action When Failed
|
||||
${state.current_action || 'Unknown'}
|
||||
|
||||
### Partial Diagnosis Results
|
||||
- Context: ${state.diagnosis.context ? 'Completed' : 'Not completed'}
|
||||
- Memory: ${state.diagnosis.memory ? 'Completed' : 'Not completed'}
|
||||
- Data Flow: ${state.diagnosis.dataflow ? 'Completed' : 'Not completed'}
|
||||
- Agent: ${state.diagnosis.agent ? 'Completed' : 'Not completed'}
|
||||
|
||||
---
|
||||
|
||||
*Skill tuning aborted - please review errors and retry*
|
||||
`;
|
||||
|
||||
// Write abort report
|
||||
Write(`${workDir}/abort-report.md`, abortReport);
|
||||
|
||||
// Save error log
|
||||
Write(`${workDir}/errors.json`, JSON.stringify(errors, null, 2));
|
||||
|
||||
// Notify user
|
||||
await AskUserQuestion({
|
||||
questions: [{
|
||||
question: `Skill tuning aborted due to ${errors.length} errors. Would you like to restore the original skill?`,
|
||||
header: 'Restore',
|
||||
multiSelect: false,
|
||||
options: [
|
||||
{ label: 'Yes, restore', description: 'Restore original skill from backup' },
|
||||
{ label: 'No, keep changes', description: 'Keep any partial changes made' }
|
||||
]
|
||||
}]
|
||||
}).then(async response => {
|
||||
if (response['Restore'] === 'Yes, restore') {
|
||||
// Restore from backup
|
||||
if (state.backup_dir && targetSkill?.path) {
|
||||
Bash(`cp -r "${state.backup_dir}/${targetSkill.name}-backup"/* "${targetSkill.path}/"`);
|
||||
console.log('Original skill restored from backup.');
|
||||
}
|
||||
}
|
||||
}).catch(() => {
|
||||
// User cancelled, don't restore
|
||||
});
|
||||
|
||||
return {
|
||||
stateUpdates: {
|
||||
status: 'failed',
|
||||
completed_at: new Date().toISOString()
|
||||
},
|
||||
outputFiles: [`${workDir}/abort-report.md`, `${workDir}/errors.json`],
|
||||
summary: `Tuning aborted: ${errors.length} errors. Check abort-report.md for details.`
|
||||
};
|
||||
}
|
||||
```
|
||||
|
||||
## State Updates
|
||||
|
||||
```javascript
|
||||
return {
|
||||
stateUpdates: {
|
||||
status: 'failed',
|
||||
completed_at: '<timestamp>'
|
||||
}
|
||||
};
|
||||
```
|
||||
|
||||
## Output
|
||||
|
||||
- **File**: `abort-report.md`
|
||||
- **Location**: `${workDir}/abort-report.md`
|
||||
|
||||
## Error Handling
|
||||
|
||||
This action should not fail - it's the final error handler.
|
||||
|
||||
## Next Actions
|
||||
|
||||
- None (terminal state)
|
||||
Reference in New Issue
Block a user