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.

807 lines (619 loc) 21 kB
# Approval Workflow Engine - Documentation **Version:** 1.0.0 **Status:** Production Ready **Last Updated:** 2025-11-15 --- ## Table of Contents 1. [Overview](#overview) 2. [State Machine Architecture](#state-machine-architecture) 3. [Components](#components) 4. [Database Schema](#database-schema) 5. [Usage Guide](#usage-guide) 6. [SLA Management](#sla-management) 7. [Audit Trail](#audit-trail) 8. [Integration Guide](#integration-guide) 9. [Troubleshooting](#troubleshooting) --- ## Overview The Approval Workflow Engine manages the lifecycle of auto-generated skills from detection through deployment, ensuring human expert oversight through a robust state machine with audit trails and SLA tracking. ### Key Features - **State Machine:** Enforces valid state transitions with transaction safety - **Expert Review:** CLI for approve/reject/correct actions - **SLA Tracking:** 48h for high priority, 7 days for medium/low - **Audit Logging:** Complete history of all state changes and expert actions - **Notifications:** Email and Slack templates for expert alerts - **Rollback Support:** Safe rollback to previous states - **Concurrent Safety:** PostgreSQL row-level locking prevents race conditions ### Business Value - **60-80% cost reduction** for codified workflows - **95% faster execution** (scripts vs AI agents) - **Expert oversight** maintains quality standards - **Complete audit trail** for compliance and debugging --- ## State Machine Architecture ### States ``` DETECTED GENERATING PENDING_REVIEW {APPROVED, REJECTED, NEEDS_CORRECTION} DEPLOYED ``` #### State Descriptions | State | Description | Next States | |-------|-------------|-------------| | **DETECTED** | Workflow pattern detected by analyzer | GENERATING | | **GENERATING** | AI agent generating skill code | PENDING_REVIEW, DETECTED (rollback) | | **PENDING_REVIEW** | Awaiting expert review | APPROVED, REJECTED, NEEDS_CORRECTION | | **NEEDS_CORRECTION** | Expert requested changes | GENERATING, REJECTED | | **APPROVED** | Expert approved, ready for deployment | DEPLOYED, REJECTED (rollback) | | **REJECTED** | Expert or system rejected | (terminal state) | | **DEPLOYED** | Deployed to production | APPROVED (rollback) | ### Valid Transitions ```bash DETECTED GENERATING # Pattern detection complete GENERATING PENDING_REVIEW # Skill generation complete GENERATING DETECTED # Generation failed, retry PENDING_REVIEW APPROVED # Expert approved PENDING_REVIEW REJECTED # Expert rejected PENDING_REVIEW NEEDS_CORRECTION # Expert wants changes NEEDS_CORRECTION GENERATING # Re-generate with feedback NEEDS_CORRECTION REJECTED # Give up after multiple corrections APPROVED DEPLOYED # Deploy to production APPROVED REJECTED # Rollback approval (rare) DEPLOYED APPROVED # Rollback deployment ``` ### Concurrency Control The state machine uses PostgreSQL row-level locking to prevent race conditions: ```sql -- Lock pattern row for update SELECT status FROM workflow_patterns WHERE id = 'pattern-id' FOR UPDATE; -- Verify current state matches expected state -- Update only if state matches -- Commit transaction ``` This ensures that concurrent state transitions are serialized and conflicting updates fail gracefully. --- ## Components ### 1. approval-workflow.sh **Purpose:** Core state machine implementation **Commands:** - `transition` - Perform state transition with validation - `get-state` - Query current state - `rollback` - Safe rollback to previous state - `history` - View state transition history - `init` - Initialize database schema **Features:** - Transaction safety (BEGIN/COMMIT/ROLLBACK) - Row-level locking for concurrency - Validation of state transitions - Audit logging for all changes - Metadata support for context **Example:** ```bash # Transition skill from PENDING_REVIEW to APPROVED ./approval-workflow.sh transition \ --pattern-id "123e4567-e89b-12d3-a456-426614174000" \ --from-state PENDING_REVIEW \ --to-state APPROVED \ --metadata '{"approved_by": "expert@example.com"}' # Rollback deployment due to bug ./approval-workflow.sh rollback \ --pattern-id "123e4567-e89b-12d3-a456-426614174000" \ --to-state APPROVED \ --reason "Critical bug found in production" ``` --- ### 2. review-skill.sh **Purpose:** Expert review CLI for skill approval workflow **Commands:** - `--action approve` - Approve skill for deployment - `--action reject` - Reject skill with reason - `--action correct` - Request corrections with feedback - `--list-pending` - List all pending reviews - `--check-sla` - Check SLA compliance status - `--init` - Initialize skill_approvals table **Features:** - Three-way review actions (approve/reject/correct) - Mandatory feedback for reject/correct - SLA status tracking - Team-based filtering - Automatic audit logging **Example:** ```bash # Approve a skill ./review-skill.sh \ --skill-id "123e4567-e89b-12d3-a456-426614174000" \ --action approve \ --feedback "Code looks good, tests pass" # Reject with reason ./review-skill.sh \ --skill-id "123e4567-e89b-12d3-a456-426614174000" \ --action reject \ --feedback "Security vulnerability: SQL injection in line 45" # Request corrections ./review-skill.sh \ --skill-id "123e4567-e89b-12d3-a456-426614174000" \ --action correct \ --feedback "Add input validation for email parameter. Use regex pattern." # List pending reviews for frontend team ./review-skill.sh --list-pending --team frontend # Check SLA status ./review-skill.sh --check-sla ``` --- ### 3. Notification Templates #### Email Template (templates/email-notification.txt) **Purpose:** Notify experts of new skills awaiting review **Placeholders:** - `{{SKILL_NAME}}` - Skill pattern name - `{{PATTERN_ID}}` - UUID of the pattern - `{{PRIORITY}}` - high/medium/low - `{{PRIMARY_TEAM}}` - Team responsible for review - `{{ESTIMATED_SAVINGS}}` - Monthly cost savings estimate - `{{OCCURRENCE_COUNT}}` - Number of workflow occurrences - `{{TEAMS_AFFECTED}}` - Comma-separated team list - `{{CONFIDENCE_SCORE}}` - Pattern detection confidence - `{{SIMILARITY_SCORE}}` - Workflow similarity score - `{{WORKFLOW_STEPS}}` - Formatted workflow steps - `{{SKILL_ID}}` - UUID for review commands - `{{TEST_COUNT}}` - Number of test cases - `{{EDGE_CASE_COUNT}}` - Number of edge cases - `{{SLA_DEADLINE}}` - Review deadline - `{{SLA_HOURS}}` - Hours until SLA breach #### Slack Template (templates/slack-notification.md) **Purpose:** Send Slack notifications for skill reviews **Format:** Markdown with emoji support **Additional Placeholders:** - `{{PRIORITY_EMOJI}}` - Visual priority indicator (🔴/🟡/🟢) - `{{EXPERT_SLACK_HANDLE}}` - Slack @mention for expert - `{{WORKFLOW_STEP_N}}` - Individual workflow steps - `{{TEAMS_AFFECTED_COUNT}}` - Number of teams affected --- ## Database Schema ### workflow_patterns **Purpose:** Core table for workflow patterns and skill metadata ```sql CREATE TABLE workflow_patterns ( id UUID PRIMARY KEY, pattern_name VARCHAR(255) NOT NULL, workflow_steps JSONB NOT NULL, occurrence_count INTEGER NOT NULL, teams_affected TEXT[] NOT NULL, similarity_score DECIMAL(3,2) NOT NULL, deterministic BOOLEAN DEFAULT FALSE, confidence_score DECIMAL(3,2) NOT NULL, estimated_savings_usd DECIMAL(10,2), priority VARCHAR(20), created_at TIMESTAMP DEFAULT NOW(), updated_at TIMESTAMP DEFAULT NOW(), status VARCHAR(50) DEFAULT 'DETECTED' ); CREATE INDEX idx_pattern_status ON workflow_patterns(status); ``` ### pattern_state_history **Purpose:** Track all state transitions for audit trail ```sql CREATE TABLE pattern_state_history ( id SERIAL PRIMARY KEY, pattern_id UUID REFERENCES workflow_patterns(id) ON DELETE CASCADE, from_state VARCHAR(50) NOT NULL, to_state VARCHAR(50) NOT NULL, metadata JSONB DEFAULT '{}', timestamp TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_pattern_state_history_pattern_id ON pattern_state_history(pattern_id); ``` ### skill_approvals **Purpose:** Log all expert review actions ```sql CREATE TABLE skill_approvals ( id SERIAL PRIMARY KEY, skill_id UUID REFERENCES workflow_patterns(id) ON DELETE CASCADE, expert_id VARCHAR(255) NOT NULL, action VARCHAR(50) NOT NULL, feedback TEXT, timestamp TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_skill_approvals_skill_id ON skill_approvals(skill_id); CREATE INDEX idx_skill_approvals_expert_id ON skill_approvals(expert_id); CREATE INDEX idx_skill_approvals_timestamp ON skill_approvals(timestamp); ``` ### workflow_audit_log **Purpose:** General audit log for all workflow events ```sql CREATE TABLE workflow_audit_log ( id SERIAL PRIMARY KEY, pattern_id UUID, event_type VARCHAR(100) NOT NULL, description TEXT, metadata JSONB DEFAULT '{}', timestamp TIMESTAMP DEFAULT NOW() ); CREATE INDEX idx_audit_log_pattern_id ON workflow_audit_log(pattern_id); ``` --- ## Usage Guide ### Setup #### 1. Configure Database Connection Create `.env` file in project root: ```bash # PostgreSQL Configuration CFN_DB_HOST=localhost CFN_DB_PORT=5432 CFN_DB_NAME=cfn_workflow CFN_DB_USER=postgres CFN_DB_PASSWORD=your_secure_password # Expert Configuration CFN_EXPERT_ID=$(whoami) CFN_EXPERT_EMAIL=expert@example.com ``` #### 2. Initialize Database Schema ```bash # Initialize workflow_patterns and related tables ./approval-workflow.sh init # Initialize skill_approvals table ./review-skill.sh --init ``` #### 3. Verify Setup ```bash # Check database connection psql -h localhost -U postgres -d cfn_workflow -c "SELECT COUNT(*) FROM workflow_patterns;" # Verify schema psql -h localhost -U postgres -d cfn_workflow -c "\dt" ``` --- ### Workflow Example #### Scenario: Auto-generated skill needs review **Step 1: Pattern Detected** ```bash # System detects pattern and creates record # Status: DETECTED ``` **Step 2: Skill Generation** ```bash # Transition to GENERATING ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state DETECTED \ --to-state GENERATING # AI agent generates skill... # Transition to PENDING_REVIEW ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state GENERATING \ --to-state PENDING_REVIEW ``` **Step 3: Expert Notification** ```bash # System sends email using templates/email-notification.txt # System sends Slack message using templates/slack-notification.md ``` **Step 4: Expert Review** ```bash # Expert lists pending reviews ./review-skill.sh --list-pending # Expert reviews code, runs tests cd .claude/skills/staging/codified-abc123/ ./test.sh # Expert approves ./review-skill.sh \ --skill-id "abc123..." \ --action approve \ --feedback "All tests pass, code looks secure" ``` **Step 5: Deployment** ```bash # Transition to DEPLOYED ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state APPROVED \ --to-state DEPLOYED ``` --- ### Rollback Example #### Scenario: Bug found in production skill ```bash # Step 1: Rollback deployment ./approval-workflow.sh rollback \ --pattern-id "abc123..." \ --to-state APPROVED \ --reason "Critical bug: fails on empty input" # Step 2: Request correction ./review-skill.sh \ --skill-id "abc123..." \ --action correct \ --feedback "Add null check before processing input parameter" # Step 3: Re-generate skill ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state NEEDS_CORRECTION \ --to-state GENERATING # (AI regenerates with feedback) # Step 4: Re-review and re-deploy ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state GENERATING \ --to-state PENDING_REVIEW ./review-skill.sh \ --skill-id "abc123..." \ --action approve ./approval-workflow.sh transition \ --pattern-id "abc123..." \ --from-state APPROVED \ --to-state DEPLOYED ``` --- ## SLA Management ### SLA Thresholds | Priority | SLA | Description | |----------|-----|-------------| | High | 48 hours | Critical workflows, high savings potential | | Medium | 7 days | Standard workflows, moderate savings | | Low | 7 days | Nice-to-have workflows, low savings | ### SLA Tracking ```bash # Check current SLA status ./review-skill.sh --check-sla # Example output: # High Priority Breaches (>48h): 2 # Medium/Low Priority Breaches (>7d): 1 # Total Pending Reviews: 15 ``` ### SLA Breach Handling 1. **Automated Alerts:** System sends reminder emails at 75% of SLA 2. **Escalation:** Product Owner notified at 100% SLA breach 3. **Metrics:** SLA compliance tracked in dashboard ### Monitoring Query ```sql SELECT wp.id, wp.pattern_name, wp.priority, ROUND(EXTRACT(EPOCH FROM (NOW() - wp.created_at))/3600, 1) as hours_pending, CASE WHEN wp.priority = 'high' AND EXTRACT(EPOCH FROM (NOW() - wp.created_at))/3600 > 48 THEN 'BREACH' WHEN wp.priority IN ('medium', 'low') AND EXTRACT(EPOCH FROM (NOW() - wp.created_at))/3600 > 168 THEN 'BREACH' ELSE 'OK' END as sla_status FROM workflow_patterns wp WHERE wp.status IN ('PENDING_REVIEW', 'NEEDS_CORRECTION') ORDER BY hours_pending DESC; ``` --- ## Audit Trail ### Complete History Tracking Every action in the approval workflow is logged: 1. **State Transitions:** `pattern_state_history` table 2. **Expert Actions:** `skill_approvals` table 3. **System Events:** `workflow_audit_log` table ### Querying Audit Trail #### Get full history for a skill ```sql SELECT psh.from_state, psh.to_state, psh.timestamp, psh.metadata FROM pattern_state_history psh WHERE psh.pattern_id = 'abc123...' ORDER BY psh.timestamp ASC; ``` #### Get expert actions for a skill ```sql SELECT sa.expert_id, sa.action, sa.feedback, sa.timestamp FROM skill_approvals sa WHERE sa.skill_id = 'abc123...' ORDER BY sa.timestamp ASC; ``` #### Get all audit events for a skill ```sql SELECT wal.event_type, wal.description, wal.metadata, wal.timestamp FROM workflow_audit_log wal WHERE wal.pattern_id = 'abc123...' ORDER BY wal.timestamp ASC; ``` ### Compliance Reports Generate compliance reports for audits: ```bash # Export audit trail for date range psql -h localhost -U postgres -d cfn_workflow -c " SELECT wp.pattern_name, sa.expert_id, sa.action, sa.feedback, sa.timestamp FROM skill_approvals sa JOIN workflow_patterns wp ON wp.id = sa.skill_id WHERE sa.timestamp BETWEEN '2025-01-01' AND '2025-12-31' ORDER BY sa.timestamp DESC; " -o audit_report_2025.csv -A -F ',' ``` --- ## Integration Guide ### Email Integration **Setup:** 1. Configure SMTP server in `.env` 2. Update `send_approval_notification()` in `review-skill.sh` 3. Replace placeholders in `templates/email-notification.txt` **Example Integration (using sendmail):** ```bash send_email() { local to="$1" local subject="$2" local body="$3" echo -e "Subject: ${subject}\n\n${body}" | sendmail "$to" } ``` ### Slack Integration **Setup:** 1. Create Slack webhook URL 2. Update `send_approval_notification()` in `review-skill.sh` 3. Format message using `templates/slack-notification.md` **Example Integration (using curl):** ```bash send_slack() { local webhook_url="$SLACK_WEBHOOK_URL" local message="$1" curl -X POST "$webhook_url" \ -H 'Content-Type: application/json' \ -d "{\"text\": \"${message}\"}" } ``` ### CI/CD Integration **GitHub Actions Example:** ```yaml name: Skill Approval Workflow on: schedule: - cron: '0 */6 * * *' # Check every 6 hours jobs: check-sla: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Check SLA Status run: | ./.claude/skills/workflow-codification/review-skill.sh --check-sla if [ $? -ne 0 ]; then echo "SLA breaches detected!" exit 1 fi ``` --- ## Troubleshooting ### Common Issues #### 1. Database Connection Failed **Symptom:** ``` ERROR: Database connection failed ``` **Solution:** ```bash # Verify .env configuration cat .env | grep CFN_DB_ # Test connection psql -h $CFN_DB_HOST -p $CFN_DB_PORT -U $CFN_DB_USER -d $CFN_DB_NAME -c "SELECT 1;" # Check PostgreSQL is running systemctl status postgresql ``` #### 2. Invalid State Transition **Symptom:** ``` ERROR: Invalid state transition: PENDING_REVIEW DEPLOYED. Allowed transitions: APPROVED,REJECTED,NEEDS_CORRECTION ``` **Solution:** - Cannot skip states in the workflow - Must transition through intermediate states - Use `get-state` to verify current state - Example: PENDING_REVIEW APPROVED DEPLOYED #### 3. SLA Breach Alert **Symptom:** ``` SLA breaches detected! Please review pending skills urgently. High Priority Breaches (>48h): 3 ``` **Solution:** ```bash # List pending reviews by priority ./review-skill.sh --list-pending # Prioritize high-priority reviews # Escalate to Product Owner if necessary ``` #### 4. Concurrent Modification Error **Symptom:** ``` ERROR: State mismatch: expected PENDING_REVIEW, got APPROVED ``` **Solution:** - Another expert already reviewed the skill - Check state history: `./approval-workflow.sh history --pattern-id "abc123..."` - Verify current state before retrying --- ## Best Practices ### For Experts 1. **Review Code Thoroughly:** - Check for security vulnerabilities - Verify input validation - Test edge cases - Run shellcheck validation 2. **Provide Clear Feedback:** - Be specific about what needs correction - Reference line numbers when applicable - Suggest solutions, not just problems 3. **Meet SLA Deadlines:** - Check pending reviews daily - Prioritize high-priority skills - Escalate blockers early 4. **Use Meaningful Approval Comments:** - Document why you approved/rejected - Note any concerns for future reference - Suggest improvements for next iteration ### For System Administrators 1. **Monitor SLA Compliance:** - Run `--check-sla` daily - Set up automated alerts - Track trends over time 2. **Review Audit Logs:** - Weekly audit of expert actions - Identify patterns in rejections - Improve skill generation based on feedback 3. **Backup Database:** - Daily backups of workflow database - Test restore procedures - Retain audit trail for compliance 4. **Optimize Performance:** - Monitor database query performance - Add indexes as needed - Archive old patterns (>90 days) --- ## Metrics and KPIs ### Success Metrics - **Approval Rate:** % of skills approved on first review - **SLA Compliance:** % of reviews completed within SLA - **Cost Savings:** Monthly savings from deployed skills - **Cycle Time:** Average time from DETECTED to DEPLOYED - **Correction Rate:** % of skills requiring corrections ### Monitoring Queries ```sql -- Approval rate (last 30 days) SELECT COUNT(*) FILTER (WHERE action = 'approve') * 100.0 / COUNT(*) as approval_rate FROM skill_approvals WHERE timestamp > NOW() - INTERVAL '30 days'; -- SLA compliance (last 30 days) SELECT COUNT(*) FILTER (WHERE (priority = 'high' AND EXTRACT(EPOCH FROM (completed_at - created_at))/3600 <= 48) OR (priority IN ('medium', 'low') AND EXTRACT(EPOCH FROM (completed_at - created_at))/3600 <= 168) ) * 100.0 / COUNT(*) as sla_compliance FROM workflow_patterns WHERE created_at > NOW() - INTERVAL '30 days' AND status IN ('APPROVED', 'DEPLOYED'); -- Total cost savings SELECT SUM(estimated_savings_usd) as total_monthly_savings FROM workflow_patterns WHERE status = 'DEPLOYED'; ``` --- ## Version History - **1.0.0** (2025-11-15): Initial release - State machine implementation - Expert review CLI - Email and Slack templates - Complete audit trail - SLA tracking --- ## Support For issues or questions: - **Documentation:** This file - **Bug Reports:** Create issue in project repository - **Feature Requests:** Submit via project backlog - **Emergency:** Contact CFN System Administrator --- **End of Documentation**