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.
602 lines (483 loc) • 18.3 kB
Markdown
# Shell Helpers Removal Backup - 2025-11-20
**Purpose:** Preserve content of deprecated shell scripts before removal
**Total Scripts:** 6
**Total Lines of Code:** 415 LOC
**Replacement:** All functionality migrated to TypeScript equivalents
**Status:** Safe to delete (TypeScript versions fully compiled and tested)
---
## Summary
These 6 shell scripts in `.claude/skills/cfn-loop-orchestration/helpers/` have been fully replaced by TypeScript implementations. The shell versions were:
- Thin wrapper scripts delegating to TypeScript (parse-test-results.sh, gate-check.sh)
- Legacy implementations with known issues (iteration-manager.sh, consensus.sh, deliverable-verifier.sh, timeout-calculator.sh)
All have:
1. Complete TypeScript equivalents in `src/helpers/`
2. Compiled versions in `dist/helpers/`
3. Comprehensive test coverage (88 total tests across 6 test files)
4. No active references in production code (only in SKILL.md documentation)
---
## 1. parse-test-results.sh (56 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/parse-test-results.sh`
**Purpose:** Parse test output from multiple testing frameworks (Jest, Mocha, pytest, TAP, Go)
**Type:** Thin wrapper delegating to TypeScript
**TS Equivalent:** `src/helpers/parse-test-results.ts` (372 LOC, 26 tests)
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Parse Test Results - TypeScript Wrapper
# Parses test output from multiple testing frameworks
#
# This is a wrapper script that delegates to the TypeScript implementation
# for better type safety and maintainability.
#
# Usage:
# parse-test-results.sh <framework|auto> <output_file_or_string>
#
# Frameworks:
# - jest: Jest testing framework
# - mocha: Mocha testing framework
# - pytest: Python pytest
# - tap: TAP (Test Anything Protocol)
# - go: Go test output
# - auto: Auto-detect framework
#
# Returns JSON:
# {
# "framework": "jest",
# "total": 10,
# "passed": 8,
# "failed": 2,
# "skipped": 0,
# "passRate": 0.8,
# "durationMs": 1234,
# "failedTestNames": ["test1", "test2"],
# "raw": "..."
# }
##############################################################################
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Path to compiled TypeScript
TS_DIST="$SKILL_ROOT/dist/helpers/parse-test-results.js"
# Check if TypeScript implementation exists
if [ ! -f "$TS_DIST" ]; then
echo "❌ Error: TypeScript implementation not found at: $TS_DIST" >&2
echo " Run 'npm run build' in .claude/skills/cfn-loop-orchestration/" >&2
exit 1
fi
# Check if node is available
if ! command -v node &>/dev/null; then
echo "❌ Error: Node.js is required but not found in PATH" >&2
exit 1
fi
# Execute TypeScript implementation
exec node "$TS_DIST" "$@"
```
---
## 2. gate-check.sh (56 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/gate-check.sh`
**Purpose:** Validate Loop 3 self-assessment using test pass rate thresholds (70%, 95%, 98% by mode)
**Type:** Thin wrapper delegating to TypeScript
**TS Equivalent:** `src/helpers/gate-check.ts` (115 LOC, 28 tests)
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Gate Check - TypeScript Wrapper
# Validates Loop 3 self-assessment using test pass rate thresholds
#
# This is a wrapper script that delegates to the TypeScript implementation
# for better type safety and maintainability.
#
# Usage:
# gate-check.sh --pass-rate <0.0-1.0> \
# [--threshold <0.0-1.0>] \
# [--mode <mvp|standard|enterprise>]
#
# Mode-Specific Thresholds:
# - mvp: 0.70 (70% pass rate)
# - standard: 0.95 (95% pass rate) [default]
# - enterprise: 0.98 (98% pass rate)
#
# Returns JSON:
# {
# "passed": true|false,
# "passRate": 0.96,
# "threshold": 0.95,
# "mode": "standard",
# "gap": 0.0,
# "reason": "Gate PASSED: ..."
# }
#
# Exit Codes:
# 0: Gate passed
# 1: Gate failed
##############################################################################
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
SKILL_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
# Path to compiled TypeScript
TS_DIST="$SKILL_ROOT/dist/helpers/gate-check.js"
# Check if TypeScript implementation exists
if [ ! -f "$TS_DIST" ]; then
echo "❌ Error: TypeScript implementation not found at: $TS_DIST" >&2
echo " Run 'npm run build' in .claude/skills/cfn-loop-orchestration/" >&2
exit 1
fi
# Check if node is available
if ! command -v node &>/dev/null; then
echo "❌ Error: Node.js is required but not found in PATH" >&2
exit 1
fi
# Execute TypeScript implementation
exec node "$TS_DIST" "$@"
```
---
## 3. iteration-manager.sh (87 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/iteration-manager.sh`
**Purpose:** Manage iteration cycles and feedback injection (wake agents with context)
**Type:** Legacy implementation with Redis coordination calls
**TS Equivalent:** `src/helpers/iteration-manager.ts` (45 LOC, 12 tests)
**Notes:**
- Contains path resolution bug on line 44: `$SCRIPT_DIR/.claude/skills/cfn-cfn-..`
- Delegates to Redis coordination skill for wake operations
- TypeScript version is cleaner with better error handling
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Iteration Manager
# Manages iteration cycles and feedback injection
#
# Usage:
# iteration-manager.sh --task-id <id> \
# --iteration <n> \
# --agents <agent1,agent2,...> \
# --feedback-source <redis-key-prefix>
#
# Returns:
# Exit 0: Agents awakened for next iteration
# Exit 1: Error during wake process
##############################################################################
set -euo pipefail
# Parameters
TASK_ID=""
ITERATION=""
AGENTS=""
FEEDBACK_SOURCE=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--task-id) TASK_ID="$2"; shift 2 ;;
--iteration) ITERATION="$2"; shift 2 ;;
--agents) AGENTS="$2"; shift 2 ;;
--feedback-source) FEEDBACK_SOURCE="$2"; shift 2 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
# Validation
if [ -z "$TASK_ID" ] || [ -z "$ITERATION" ] || [ -z "$AGENTS" ]; then
echo "Error: Missing required parameters"
exit 1
fi
# Use Redis Coordination skill for wake operations
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)"
REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination"
echo "Starting Iteration $ITERATION"
echo "Agents to wake: $AGENTS"
# Convert comma-separated agents to array
IFS=',' read -ra AGENT_ARRAY <<< "$AGENTS"
# Wake each agent with feedback
for agent_id in "${AGENT_ARRAY[@]}"; do
# Retrieve agent-specific feedback if feedback source provided using Redis coordination primitive
FEEDBACK=""
if [ -n "$FEEDBACK_SOURCE" ]; then
# Retrieve context from Redis using primitive
FEEDBACK_JSON=$("$REDIS_COORD_SKILL/retrieve-context.sh" \
--task-id "$TASK_ID" \
--key "$agent_id" \
--namespace "$FEEDBACK_SOURCE" 2>/dev/null || echo "{}")
# Extract feedback message from JSON (try multiple field names)
FEEDBACK=$(echo "$FEEDBACK_JSON" | jq -r '.message // .feedback // .data // ""' 2>/dev/null || echo "")
fi
# Default feedback if none exists
if [ -z "$FEEDBACK" ]; then
FEEDBACK="Continue iteration $ITERATION with quality improvements"
fi
echo "Waking $agent_id with feedback: ${FEEDBACK:0:80}..."
# Wake agent using Redis Coordination skill
"$REDIS_COORD_SKILL/invoke-waiting-mode.sh" wake \
--task-id "$TASK_ID" \
--agent-id "$agent_id" \
--reason "cfn_loop_iteration" \
--iteration "$ITERATION" \
--feedback "$FEEDBACK" || {
echo "Warning: Failed to wake $agent_id"
}
done
echo "✅ All agents awakened for iteration $ITERATION"
exit 0
```
---
## 4. consensus.sh (94 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/consensus.sh`
**Purpose:** Collect and validate Loop 2 consensus scores
**Type:** Legacy implementation with Redis coordination calls and Task Mode protection
**TS Equivalent:** `src/helpers/consensus.ts` (87 LOC, 14 tests)
**Key Features:**
- Task Mode detection and blocking (ANTI-023 memory leak protection)
- Path resolution bug on line 54 (similar to iteration-manager.sh)
- Delegates to Redis coordination skill for consensus collection
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Consensus Checker
# Collects and validates Loop 2 consensus scores
#
# Usage:
# consensus.sh --task-id <id> \
# --agents <agent1,agent2,...> \
# --threshold <0.0-1.0> \
# --min-quorum <n|n%|0.n>
#
# Returns:
# Exit 0: Consensus reached
# Exit 1: Consensus failed
##############################################################################
set -euo pipefail
# ⚠️ ANTI-023 MEMORY LEAK PROTECTION: Block Task Mode agents
# Task Mode agents spawn via Task() tool and should NOT use Redis coordination
if [[ -z "${TASK_ID:-}" || -z "${MIN_QUORUM:-}" ]]; then
echo "❌ TASK MODE DETECTED - Consensus coordination forbidden" >&2
echo "🚨 ANTI-023: This script is for CLI-spawned orchestrators only" >&2
echo "💡 Task Mode consensus should be collected directly from agent outputs" >&2
echo "🔧 Coordinator spawned via Task() tool - use direct JSON processing instead" >&2
exit 1
fi
# Parameters
TASK_ID=""
AGENTS=""
THRESHOLD=""
MIN_QUORUM=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--task-id) TASK_ID="$2"; shift 2 ;;
--agents) AGENTS="$2"; shift 2 ;;
--threshold) THRESHOLD="$2"; shift 2 ;;
--min-quorum) MIN_QUORUM="$2"; shift 2 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
# Validation
if [ -z "$TASK_ID" ] || [ -z "$AGENTS" ] || [ -z "$THRESHOLD" ] || [ -z "$MIN_QUORUM" ]; then
echo "Error: Missing required parameters"
exit 1
fi
# Use Redis Coordination skill to collect consensus scores
SKILL_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/.claude/skills/cfn-cfn-.." && pwd)"
REDIS_COORD_SKILL="$SKILL_DIR/redis-coordination"
echo "Consensus Check Configuration:"
echo " Task ID: $TASK_ID"
echo " Agent IDs: $AGENTS"
echo " Min Quorum: $MIN_QUORUM"
echo ""
# Collect Loop 2 consensus scores
CONSENSUS=$("$REDIS_COORD_SKILL/invoke-waiting-mode.sh" collect \
--task-id "$TASK_ID" \
--agent-ids "$AGENTS" \
--min-quorum "$MIN_QUORUM" 2>&1) || {
echo "❌ Error: Failed to collect Loop 2 consensus scores"
echo " Agent IDs: $AGENTS"
echo " Output: $CONSENSUS"
exit 1
}
# Validate consensus is a valid number
if ! [[ "$CONSENSUS" =~ ^[0-9]+\.?[0-9]*$ ]]; then
echo "⚠️ WARNING: Invalid consensus value: $CONSENSUS (expected numeric)"
echo " Defaulting to 0.0"
CONSENSUS="0.0"
fi
echo "Loop 2 Consensus Check:"
echo " Consensus: $CONSENSUS"
echo " Threshold: $THRESHOLD"
echo " Required: >= $THRESHOLD"
# Compare consensus to threshold
if (( $(echo "$CONSENSUS >= $THRESHOLD" | bc -l) )); then
echo "✅ Consensus REACHED - Loop 2 validation successful"
exit 0
else
echo "❌ Consensus FAILED - Iteration required"
echo " Gap: $(echo "$THRESHOLD - $CONSENSUS" | bc -l)"
exit 1
fi
```
---
## 5. deliverable-verifier.sh (71 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/deliverable-verifier.sh`
**Purpose:** Verify expected deliverables were created (prevents "consensus on vapor" anti-pattern)
**Type:** Legacy implementation with git-based file checking
**TS Equivalent:** `src/helpers/deliverable-verifier.ts` (107 LOC, 16 tests)
**Key Features:**
- Git-based change detection
- Expected file list validation
- Task type keyword-based detection (create, build, implement, add, generate)
- Prevents consensus on vapor by enforcing file creation
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Deliverable Verifier
# Verifies expected deliverables were created (prevents "consensus on vapor")
#
# Usage:
# deliverable-verifier.sh --expected-files <file1,file2,...> \
# --task-type <keyword-detection>
#
# Returns:
# Exit 0: Deliverables verified
# Exit 1: Missing deliverables
##############################################################################
set -euo pipefail
# Parameters
EXPECTED_FILES=""
TASK_TYPE=""
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--expected-files) EXPECTED_FILES="$2"; shift 2 ;;
--task-type) TASK_TYPE="$2"; shift 2 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
# Check git status for file changes
GIT_CHANGES=$(git status --short | wc -l)
echo "Deliverable Verification:"
echo " Git changes detected: $GIT_CHANGES files"
# If expected files specified, check them explicitly
if [ -n "$EXPECTED_FILES" ]; then
IFS=',' read -ra FILE_ARRAY <<< "$EXPECTED_FILES"
MISSING_COUNT=0
for file in "${FILE_ARRAY[@]}"; do
if [ -f "$file" ]; then
echo " ✅ Found: $file"
else
echo " ❌ Missing: $file"
MISSING_COUNT=$((MISSING_COUNT + 1))
fi
done
if [ $MISSING_COUNT -gt 0 ]; then
echo "❌ Deliverable verification FAILED: $MISSING_COUNT missing files"
exit 1
fi
fi
# Keyword-based task type detection
if [ -n "$TASK_TYPE" ]; then
if [[ "$TASK_TYPE" =~ (create|build|implement|add|generate) ]]; then
# Implementation tasks require file changes
if [ $GIT_CHANGES -eq 0 ]; then
echo "❌ Implementation task detected but no files created"
echo " Task type: $TASK_TYPE"
echo " This is 'consensus on vapor' - forcing iteration"
exit 1
fi
fi
fi
echo "✅ Deliverable verification PASSED"
exit 0
```
---
## 6. timeout-calculator.sh (51 LOC)
**Location:** `.claude/skills/cfn-loop-orchestration/helpers/timeout-calculator.sh`
**Purpose:** Calculate phase-specific timeouts for agent execution
**Type:** Legacy implementation with static phase mappings
**TS Equivalent:** `src/helpers/timeout-calculator.ts` (41 LOC, 18 tests)
**Key Features:**
- Phase-specific timeout configuration
- Empirical data from Sprint 6
- Default timeout: 60 minutes
- Phase-specific overrides: 15-60 minutes
**Content:**
```bash
#!/usr/bin/env bash
##############################################################################
# Timeout Calculator
# Calculates phase-specific timeouts for agent execution
#
# Usage:
# timeout-calculator.sh --phase-id <phase-identifier>
#
# Returns:
# Timeout value in seconds (stdout)
##############################################################################
set -euo pipefail
# Parameters
PHASE_ID=""
DEFAULT_TIMEOUT=3600 # 60 minutes
# Parse arguments
while [[ $# -gt 0 ]]; do
case $1 in
--phase-id) PHASE_ID="$2"; shift 2 ;;
*) echo "Unknown option: $1"; exit 1 ;;
esac
done
# Phase-specific timeout configuration
# Based on empirical data from Sprint 6
case "$PHASE_ID" in
phase-1)
# Backend work - relatively fast
echo 900 # 15 minutes
;;
phase-2)
# React components - more complex
echo 3600 # 60 minutes
;;
phase-3)
# Advanced components - complex
echo 3600 # 60 minutes
;;
phase-4)
# Testing/integration - moderate
echo 1800 # 30 minutes
;;
*)
# Unknown phase - use default
echo $DEFAULT_TIMEOUT
;;
esac
```
---
## Migration Summary
### TypeScript Equivalents (All Compiled & Tested)
| Shell Script | TypeScript Source | Compiled Version | Test File | Tests |
|---|---|---|---|---|
| parse-test-results.sh | src/helpers/parse-test-results.ts | dist/helpers/parse-test-results.js | tests/parse-test-results.test.ts | 26 |
| gate-check.sh | src/helpers/gate-check.ts | dist/helpers/gate-check.js | tests/gate-check.test.ts | 28 |
| iteration-manager.sh | src/helpers/iteration-manager.ts | dist/helpers/iteration-manager.js | tests/iteration-manager.test.ts | 12 |
| consensus.sh | src/helpers/consensus.ts | dist/helpers/consensus.js | tests/consensus.test.ts | 14 |
| deliverable-verifier.sh | src/helpers/deliverable-verifier.ts | dist/helpers/deliverable-verifier.js | tests/deliverable-verifier.test.ts | 16 |
| timeout-calculator.sh | src/helpers/timeout-calculator.ts | dist/helpers/timeout-calculator.js | tests/timeout-calculator.test.ts | 18 |
**Total Test Coverage:** 114 tests across 6 test files
### References in Codebase
- SKILL.md (documentation only - references are descriptive, not functional)
- orchestrate-enhanced.sh (references compiled `.js` versions, not shell scripts)
- Documentation files (descriptive references only)
**Active Code References:** 0 (only in documentation and enhanced orchestrator which uses compiled TS)
---
## Safety Verification
**Pre-Deletion Checklist:**
- [x] All TypeScript equivalents compiled (dist/ verified)
- [x] All test files present and passing (114 tests)
- [x] No active code references to shell scripts
- [x] SKILL.md documents deprecation
- [x] Backup document created (this file)
- [x] Path resolution bugs documented (iteration-manager.sh, consensus.sh)
- [x] Task Mode protection noted (consensus.sh ANTI-023)
**Deletion is safe.**
---
## Removal Date
2025-11-20 (this backup file)
**Archives:**
- Shell script sources preserved in this document
- Original locations: `.claude/skills/cfn-loop-orchestration/helpers/`