UNPKG

claude-flow-novice

Version:

Claude Flow Novice - Advanced orchestration platform for multi-agent AI workflows with CFN Loop architecture Includes Local RuVector Accelerator and all CFN skills for complete functionality.

764 lines (659 loc) 20.9 kB
# Skills Database v2 Implementation Guide ## Approval Workflow & Phase 4 Integration **Version:** 1.0.0 **Date:** 2025-11-16 **Status:** Production Ready **Audience:** Backend developers, DBAs, DevOps engineers --- ## Table of Contents 1. [Architecture Overview](#architecture-overview) 2. [Approval Workflow Implementation](#approval-workflow-implementation) 3. [TDD Integration](#tdd-integration) 4. [Phase 4 Codification Integration](#phase-4-codification-integration) 5. [Query Patterns](#query-patterns) 6. [Monitoring & Analytics](#monitoring--analytics) 7. [Troubleshooting](#troubleshooting) --- ## Architecture Overview ### Three-Tier Approval System ```text ┌────────────────────────────────────────────────────────────┐ │ NEW SKILL SUBMISSION │ └────────────────────────────────────────────────────────────┘ │ ▼ ┌──────────────────────────────┐ │ Determine Risk Profile │ │ - Category (domain, infra) │ │ - Complexity │ │ - External dependencies │ └──────────────────────────────┘ │ ┌──────────┼──────────┐ │ │ │ ▼ ▼ ▼ ┌──────┐ ┌────────┐ ┌─────────┐ │ AUTO │ │ESCALATE│ │ HUMAN │ └──────┘ └────────┘ └─────────┘ │ │ │ │ │ │ [Auto-Check] [Expert] [Expert] Risk<0.3 Review Review Tests≥95% Required Required Simple Medium High │ │ ▼ ▼ ┌──────────────────────┐ │ Approval Decision │ │ - Approved │ │ - Escalated │ │ - Rejected │ │ - Needs Correction │ └──────────────────────┘ │ ▼ ┌──────────────────────┐ │ Production Deployment│ └──────────────────────┘ ``` ### Database Relationships ```text skills (Core) ├─ approval_history (Audit Trail) │ └─ Links to: skill_id, approval decision, approver ├─ approval_criteria_templates (Rules) │ └─ Defines: approval_level, category, criteria_json ├─ agent_skill_mappings (Usage) │ └─ Links to: agent_type, priority, conditions ├─ skill_usage_log (Analytics) │ └─ Tracks: execution_time, confidence_impact, test_results └─ phase4_skill_generation (Phase 4 Integration) └─ Links to: phase4_pattern_id, edge_case_tracking ``` --- ## Approval Workflow Implementation ### 1. Add New Skill with Approval Metadata ```sql -- Insert new skill with approval workflow metadata INSERT INTO skills ( name, category, team, content_path, content_hash, tags, version, status, approval_level, approval_criteria, test_coverage, test_suite_path, required_test_pass_rate, owner ) VALUES ( 'redis-coordination-v3', 'coordination', 'cfn', '.claude/skills/coordination/redis-v3/SKILL.md', 'sha256_hash_of_content', '["redis", "async", "coordination"]', '3.0.0', 'active', 'escalate', -- Requires expert review (medium risk) json_object( 'risk_score_max', 0.4, 'test_coverage_min', 0.85, 'complexity_min', 'medium', 'requires_security_review', true ), 0.92, -- 92% test coverage '.claude/skills/coordination/redis-v3/test.sh', 0.95, -- Requires 95%+ test pass rate 'alice@example.com' ); ``` ### 2. Configure Approval Criteria ```sql -- Define custom approval criteria for specific category INSERT OR IGNORE INTO approval_criteria_templates ( approval_level, category, criteria_json, description, enabled ) VALUES ( 'escalate', 'coordination', json_object( 'risk_score_min', 0.3, 'risk_score_max', 0.6, 'test_coverage_min', 0.85, 'complexity_min', 'medium', 'affects_loop_orchestration', true, 'requires_expert_validation', true, 'expert_email', 'coordinator@example.com' ), 'Medium-risk coordination skills affecting loop orchestration', 1 ); ``` ### 3. Automatic Approval Decision ```bash #!/bin/bash # Auto-approval evaluation script DB_PATH="${DB_PATH:-./.claude/skills-database/skills.db}" SKILL_ID="${SKILL_ID:?Required: SKILL_ID}" echo "=== Auto-Approval Evaluation ===" # Get skill and criteria SKILL=$(sqlite3 "$DB_PATH" << EOF SELECT s.id, s.name, s.approval_level, s.test_coverage, s.approval_criteria FROM skills s WHERE s.id = $SKILL_ID; EOF ) # Get template criteria for this skill's level and category TEMPLATE=$(sqlite3 "$DB_PATH" << EOF SELECT s.approval_level, act.criteria_json FROM skills s JOIN approval_criteria_templates act ON s.category = act.category AND s.approval_level = act.approval_level WHERE s.id = $SKILL_ID; EOF ) echo "Skill: $SKILL" echo "Criteria Template: $TEMPLATE" # Evaluate auto-approval criteria (if approval_level = 'auto') if [[ "$SKILL" == *"auto"* ]]; then # Extract test coverage from skill TEST_COVERAGE=$(echo "$SKILL" | jq '.test_coverage') # Check template minimum MIN_COVERAGE=$(echo "$TEMPLATE" | jq '.test_coverage_min') if (( $(echo "$TEST_COVERAGE >= $MIN_COVERAGE" | bc -l) )); then echo "✓ Auto-approved: Test coverage meets requirement ($TEST_COVERAGE >= $MIN_COVERAGE)" DECISION="approved" else echo "✗ Auto-approval failed: Test coverage below minimum" DECISION="escalated" fi fi # Record approval decision sqlite3 "$DB_PATH" << EOF INSERT INTO approval_history ( skill_id, version, approval_level, approver, decision, reasoning ) VALUES ( $SKILL_ID, (SELECT version FROM skills WHERE id = $SKILL_ID), (SELECT approval_level FROM skills WHERE id = $SKILL_ID), 'system', '$DECISION', 'Automatic evaluation: criteria check' ); EOF echo "Decision recorded: $DECISION" ``` ### 4. Escalation to Expert Review ```bash #!/bin/bash # Escalate skill to expert review DB_PATH="${DB_PATH:-./.claude/skills-database/skills.db}" SKILL_ID="${SKILL_ID:?Required: SKILL_ID}" EXPERT_EMAIL="${EXPERT_EMAIL:?Required: EXPERT_EMAIL}" echo "=== Escalating to Expert Review ===" # Update approval history with escalation sqlite3 "$DB_PATH" << EOF INSERT INTO approval_history ( skill_id, version, approval_level, approver, decision, reasoning, escalated_to, escalation_reason ) VALUES ( $SKILL_ID, (SELECT version FROM skills WHERE id = $SKILL_ID), (SELECT approval_level FROM skills WHERE id = $SKILL_ID), 'system', 'escalated', 'Automatic escalation: criteria requirements not met or manual escalation requested', '$EXPERT_EMAIL', 'Medium risk profile requires expert domain knowledge' ); EOF echo "✓ Skill escalated to: $EXPERT_EMAIL" echo "Expert review required for deployment" # Send notification (integration point) # notify_expert "$EXPERT_EMAIL" "Skill $SKILL_ID requires your review" ``` ### 5. Expert Approval Decision ```bash #!/bin/bash # Expert makes final approval decision DB_PATH="${DB_PATH:-./.claude/skills-database/skills.db}" SKILL_ID="${SKILL_ID:?Required: SKILL_ID}" DECISION="${DECISION:?Required: DECISION (approved|rejected|needs_correction)}" EXPERT_EMAIL="${EXPERT_EMAIL:?Required: EXPERT_EMAIL}" REASONING="${REASONING:?Required: REASONING}" echo "=== Expert Approval Decision ===" # Validate decision if [[ ! "$DECISION" =~ ^(approved|rejected|needs_correction)$ ]]; then echo "ERROR: Invalid decision. Must be: approved, rejected, or needs_correction" exit 1 fi # Record decision sqlite3 "$DB_PATH" << EOF INSERT INTO approval_history ( skill_id, version, approval_level, approver, decision, reasoning, timestamp ) VALUES ( $SKILL_ID, (SELECT version FROM skills WHERE id = $SKILL_ID), (SELECT approval_level FROM skills WHERE id = $SKILL_ID), '$EXPERT_EMAIL', '$DECISION', '$REASONING', datetime('now') ); -- Update last approval metadata if approved UPDATE skills SET last_approved_by = '$EXPERT_EMAIL', last_approval_date = datetime('now') WHERE id = $SKILL_ID AND '$DECISION' = 'approved'; EOF echo "✓ Decision recorded: $DECISION" echo "Approver: $EXPERT_EMAIL" echo "Reasoning: $REASONING" ``` --- ## TDD Integration ### 1. Track Test Coverage ```sql -- Update skill with test coverage information UPDATE skills SET test_coverage = 0.95, -- 95% of code is tested test_suite_path = '.claude/skills/coordination/redis-v3/test.sh', required_test_pass_rate = 0.95 WHERE id = 1; ``` ### 2. Execute Test Suite During Approval ```bash #!/bin/bash # Run test suite and record results DB_PATH="${DB_PATH:-./.claude/skills-database/skills.db}" SKILL_ID="${SKILL_ID:?Required: SKILL_ID}" echo "=== TDD Validation ===" # Get test suite path TEST_SUITE=$(sqlite3 "$DB_PATH" << EOF SELECT test_suite_path FROM skills WHERE id = $SKILL_ID; EOF ) if [[ -z "$TEST_SUITE" ]]; then echo "No test suite configured for this skill" exit 1 fi # Run tests echo "Running tests: $TEST_SUITE" TEST_OUTPUT=$("$TEST_SUITE" 2>&1) TEST_EXIT=$? # Parse test results PASS_COUNT=$(echo "$TEST_OUTPUT" | grep -c "PASS" || echo 0) FAIL_COUNT=$(echo "$TEST_OUTPUT" | grep -c "FAIL" || echo 0) TOTAL=$((PASS_COUNT + FAIL_COUNT)) PASS_RATE=$(echo "scale=2; $PASS_COUNT / $TOTAL" | bc) echo "Test Results:" echo " Passed: $PASS_COUNT" echo " Failed: $FAIL_COUNT" echo " Pass Rate: $PASS_RATE" # Record in approval history TEST_RESULTS=$(cat <<EOF { "pass_count": $PASS_COUNT, "fail_count": $FAIL_COUNT, "total_count": $TOTAL, "pass_rate": $PASS_RATE } EOF ) sqlite3 "$DB_PATH" << EOF INSERT INTO approval_history ( skill_id, version, approval_level, decision, test_results ) VALUES ( $SKILL_ID, (SELECT version FROM skills WHERE id = $SKILL_ID), (SELECT approval_level FROM skills WHERE id = $SKILL_ID), 'approved', '$TEST_RESULTS' ); EOF # Return exit code based on pass rate requirement REQUIRED_RATE=$(sqlite3 "$DB_PATH" "SELECT required_test_pass_rate FROM skills WHERE id = $SKILL_ID;") if (( $(echo "$PASS_RATE >= $REQUIRED_RATE" | bc -l) )); then echo "✓ Test pass rate meets requirement: $PASS_RATE >= $REQUIRED_RATE" exit 0 else echo "✗ Test pass rate below requirement: $PASS_RATE < $REQUIRED_RATE" exit 1 fi ``` ### 3. Log Test Coverage Impact ```sql -- Record in skill usage log with test metrics INSERT INTO skill_usage_log ( agent_id, agent_type, skill_id, task_id, phase, confidence_before, confidence_after, execution_time_ms, test_suite_executed, test_pass_rate, success_indicator ) VALUES ( 'backend-developer-1', 'backend-developer', 1, 'cfn-loop-task-123', 'loop3', 0.82, 0.91, 145, 1, -- Tests were executed 0.95, -- 95% pass rate 1 -- Skill helped (confidence increased) ); ``` --- ## Phase 4 Codification Integration ### 1. Record Generated Skill ```sql -- Register Phase 4-generated skill INSERT INTO skills ( name, category, team, content_path, content_hash, version, approval_level, generated_by, is_auto_generated, created_at ) VALUES ( 'npm-install-build-test-codified', 'infrastructure', 'frontend', '.claude/skills/codified/npm-build-workflow/SKILL.md', 'sha256_hash', '1.0.0', 'escalate', -- Medium risk, requires expert validation 'phase4', 1, -- Auto-generated from pattern datetime('now') ); -- Link to Phase 4 pattern INSERT INTO phase4_skill_generation ( skill_id, phase4_pattern_id, pattern_name, generated_by, source_reflection_ids, generation_status ) VALUES ( (SELECT id FROM skills WHERE name = 'npm-install-build-test-codified'), 42, -- PostgreSQL workflow_patterns.id 'npm-install-build-test-workflow', 'phase4-codification-agent', '["uuid-1", "uuid-2", "uuid-3"]', -- Source reflections 'generated' -- Status: generated → approved → deployed ); ``` ### 2. Track Edge Cases ```sql -- Record edge case encountered during skill execution INSERT INTO edge_case_tracking ( skill_id, edge_case_description, failure_reason, input_parameters, expected_output, actual_output, severity, resolved ) VALUES ( (SELECT id FROM skills WHERE name = 'npm-install-build-test-codified'), 'npm install fails with workspace hoisting conflict', 'Package dependency conflict in monorepo workspace', '{"workspace": "frontend/ui", "node_version": "18.0"}', 'npm install completes successfully', 'npm ERR! code ERESOLVE\nnpm ERR! ERESOLVE unable to resolve dependency tree', 'medium', 0 -- Not yet resolved ); -- Propose fix UPDATE edge_case_tracking SET proposed_fix = json_object( 'action', 'update_criteria', 'parameter', 'npm_legacy_peer_deps', 'value', true, 'reasoning', 'Enable legacy peer dependency resolution for monorepos' ), requires_approval = 1 WHERE id = (SELECT MAX(id) FROM edge_case_tracking); ``` ### 3. Deploy Approved Skill ```sql -- After expert approval, update status to deployed UPDATE phase4_skill_generation SET generation_status = 'deployed', deployment_timestamp = datetime('now') WHERE skill_id = 1 AND generation_status = 'approved'; -- Update skills table UPDATE skills SET status = 'active', last_approved_by = 'expert@example.com', last_approval_date = datetime('now') WHERE id = 1; ``` --- ## Query Patterns ### Query 1: Find Skills Pending Approval ```sql -- Get all skills that need approval decisions SELECT s.id, s.name, s.category, s.approval_level, s.version, s.created_at, COUNT(ah.id) as review_attempts FROM skills s LEFT JOIN approval_history ah ON s.id = ah.skill_id WHERE s.status = 'active' AND ( SELECT COUNT(*) FROM approval_history WHERE skill_id = s.id AND decision = 'approved' ) = 0 GROUP BY s.id ORDER BY s.created_at ASC; ``` ### Query 2: Get Skills by Approval Level ```sql -- Distribution of skills by approval tier SELECT s.approval_level, s.category, COUNT(*) as skill_count, AVG(s.test_coverage) as avg_test_coverage, COUNT(CASE WHEN ah.decision = 'approved' THEN 1 END) as approved_count FROM skills s LEFT JOIN approval_history ah ON s.id = ah.skill_id AND ah.decision = 'approved' WHERE s.status = 'active' GROUP BY s.approval_level, s.category ORDER BY s.approval_level, s.category; ``` ### Query 3: Find Phase 4-Generated Skills ```sql -- Get all Phase 4-generated skills with their status SELECT s.id, s.name, p.pattern_name, p.generation_status, p.deployment_timestamp, COUNT(ec.id) as edge_case_count, COUNT(CASE WHEN ec.resolved = 1 THEN 1 END) as resolved_cases FROM skills s JOIN phase4_skill_generation p ON s.id = p.skill_id LEFT JOIN edge_case_tracking ec ON s.id = ec.skill_id WHERE s.is_auto_generated = 1 GROUP BY s.id, s.name, p.pattern_name, p.generation_status ORDER BY p.deployment_timestamp DESC; ``` ### Query 4: Skill Effectiveness Metrics ```sql -- Calculate skill effectiveness based on usage impact SELECT s.name, COUNT(sul.id) as usage_count, AVG(sul.confidence_after - sul.confidence_before) as avg_confidence_boost, COUNT(CASE WHEN sul.success_indicator = 1 THEN 1 END) * 100.0 / COUNT(*) as success_rate, AVG(sul.test_pass_rate) as avg_test_pass_rate, AVG(sul.execution_time_ms) as avg_execution_time_ms FROM skills s LEFT JOIN skill_usage_log sul ON s.id = sul.skill_id WHERE s.status = 'active' GROUP BY s.id, s.name ORDER BY avg_confidence_boost DESC; ``` --- ## Monitoring & Analytics ### 1. Approval Workflow SLA Monitoring ```sql -- SLA: Reviews should complete within 48 hours SELECT s.name, s.approval_level, ah.timestamp as submitted_at, datetime('now') as current_time, julianday('now') - julianday(ah.timestamp) as days_pending, CASE WHEN julianday('now') - julianday(ah.timestamp) > 2 THEN 'OVERDUE' WHEN julianday('now') - julianday(ah.timestamp) > 1 THEN 'WARNING' ELSE 'OK' END as sla_status FROM skills s LEFT JOIN approval_history ah ON s.id = ah.skill_id WHERE s.status = 'active' AND ( SELECT COUNT(*) FROM approval_history WHERE skill_id = s.id AND decision IN ('approved', 'rejected') ) = 0 ORDER BY days_pending DESC; ``` ### 2. Risk Assessment Dashboard ```sql -- Overall approval workflow health SELECT 'Total Active Skills' as metric, COUNT(*) as value FROM skills WHERE status = 'active' UNION ALL SELECT 'Auto-Approved', COUNT(*) FROM skills WHERE approval_level = 'auto' AND status = 'active' UNION ALL SELECT 'Escalated for Review', COUNT(*) FROM skills WHERE approval_level = 'escalate' AND status = 'active' UNION ALL SELECT 'Human Review Required', COUNT(*) FROM skills WHERE approval_level = 'human' AND status = 'active' UNION ALL SELECT 'Pending Approval', COUNT(DISTINCT s.id) FROM skills s WHERE s.status = 'active' AND NOT EXISTS (SELECT 1 FROM approval_history ah WHERE ah.skill_id = s.id AND ah.decision = 'approved') UNION ALL SELECT 'Average Test Coverage %', CAST(AVG(test_coverage) * 100 AS INTEGER) FROM skills WHERE status = 'active' UNION ALL SELECT 'Phase 4 Generated Skills', COUNT(*) FROM skills WHERE is_auto_generated = 1 AND status = 'active'; ``` --- ## Troubleshooting ### Issue: Skill Stuck in Escalation ```sql -- Find skills escalated but not reviewed SELECT s.id, s.name, s.approval_level, MAX(ah.escalated_to) as escalated_to, MAX(ah.timestamp) as last_escalated, julianday('now') - julianday(MAX(ah.timestamp)) as days_since_escalation FROM skills s JOIN approval_history ah ON s.id = ah.skill_id WHERE ah.decision = 'escalated' GROUP BY s.id HAVING julianday('now') - julianday(MAX(ah.timestamp)) > 2 ORDER BY days_since_escalation DESC; -- Auto-escalate to higher authority if SLA exceeded -- INSERT notification and update escalation tracking ``` ### Issue: Test Coverage Below Requirement ```bash #!/bin/bash # Identify skills with insufficient test coverage DB_PATH="${DB_PATH:-./.claude/skills-database/skills.db}" sqlite3 "$DB_PATH" << EOF SELECT s.id, s.name, s.approval_level, s.test_coverage, s.required_test_pass_rate, CASE WHEN s.test_coverage < 0.80 THEN 'CRITICAL - Add tests' WHEN s.test_coverage < 0.90 THEN 'WARNING - Improve coverage' ELSE 'OK' END as action_required FROM skills s WHERE s.status = 'active' AND s.test_coverage < s.required_test_pass_rate ORDER BY s.test_coverage ASC; EOF ``` ### Issue: Orphaned Approvals ```sql -- Find approval records with deleted skills (data integrity issue) SELECT ah.id, ah.skill_id, ah.decision, ah.timestamp FROM approval_history ah WHERE ah.skill_id NOT IN (SELECT id FROM skills) LIMIT 10; -- Clean up orphaned records DELETE FROM approval_history WHERE skill_id NOT IN (SELECT id FROM skills); ``` --- ## Next Steps 1. **Deploy schema-v2.sql** to production SQLite database 2. **Run migration script** to populate approval data for existing skills 3. **Configure approval criteria** per team and category 4. **Set up expert review workflow** with notifications 5. **Integrate with Phase 4 codification** for automatic skill generation 6. **Monitor approval SLAs** and adjust escalation rules 7. **Track TDD metrics** and improve test coverage requirements ---