#!/bin/bash set -euo pipefail echo "=== Fixing additional unwrap_used violations in services (Agent W17 Phase 2) ===" # Count before BEFORE=$(grep -r "\.unwrap()" services/api_gateway/src services/trading_service/src services/backtesting_service/src services/ml_training_service/src 2>/dev/null | wc -l) echo "Found $BEFORE .unwrap() calls in services" # Pattern 8: .first().unwrap() and .last().unwrap() in production code echo "Fixing Pattern 8: .first().unwrap() → .first().expect()" find services/ -name "*.rs" -type f -exec sed -i \ 's/\.first()\.unwrap()/\.first().expect("INVARIANT: Collection should be non-empty")/g' {} + find services/ -name "*.rs" -type f -exec sed -i \ 's/\.last()\.unwrap()/\.last().expect("INVARIANT: Collection should be non-empty")/g' {} + # Pattern 9: Uuid/String operations echo "Fixing Pattern 9: UUID/String parse operations → expect()" find services/ -name "*.rs" -type f -exec sed -i \ 's/\.parse()\.unwrap()/\.parse().expect("INVARIANT: Valid parse input")/g' {} + # Pattern 10: Lock operations echo "Fixing Pattern 10: Lock operations → expect()" find services/ -name "*.rs" -type f -exec sed -i \ 's/\.lock()\.unwrap()/\.lock().expect("INVARIANT: Lock should not be poisoned")/g' {} + find services/ -name "*.rs" -type f -exec sed -i \ 's/\.read()\.unwrap()/\.read().expect("INVARIANT: RwLock should not be poisoned")/g' {} + find services/ -name "*.rs" -type f -exec sed -i \ 's/\.write()\.unwrap()/\.write().expect("INVARIANT: RwLock should not be poisoned")/g' {} + # Pattern 11: Option unwrapping in function chains echo "Fixing Pattern 11: as_ref().unwrap() → as_ref().expect()" find services/ -name "*.rs" -type f -exec sed -i \ 's/\.as_ref()\.unwrap()/\.as_ref().expect("INVARIANT: Option should be Some")/g' {} + find services/ -name "*.rs" -type f -exec sed -i \ 's/\.as_mut()\.unwrap()/\.as_mut().expect("INVARIANT: Option should be Some")/g' {} + # Pattern 12: Channel operations echo "Fixing Pattern 12: Channel send/recv operations → expect()" find services/ -name "*.rs" -type f -exec sed -i \ 's/\.send(\([^)]*\))\.unwrap()/\.send(\1).expect("INVARIANT: Channel should not be closed")/g' {} + find services/ -name "*.rs" -type f -exec sed -i \ 's/\.recv()\.unwrap()/\.recv().expect("INVARIANT: Channel should not be closed")/g' {} + # Count after AFTER=$(grep -r "\.unwrap()" services/api_gateway/src services/trading_service/src services/backtesting_service/src services/ml_training_service/src 2>/dev/null | wc -l) FIXED=$((BEFORE - AFTER)) echo "" echo "Fixed $FIXED violations" echo "Remaining: $AFTER .unwrap() calls" echo "" echo "✓ Fix complete" echo "Review changes with: git diff"