Files
foxhunt/CLIPPY_PHASE2_CHECKLIST.md
jgrusewski 633435fc6f fix(ml): Fix varmap scale/zero_point preservation test
- Add .get(0)? before .to_scalar() for scale extraction (line 605)
- Add .get(0)? before .to_scalar() for zero_point extraction (line 624)
- Handles [1] shape tensors from Tensor::new(&[value], device)
- Fixes test_quantization_preserves_scale_and_zero_point
- Ensures reliable SafeTensors save/load round-trip
2025-10-23 13:36:34 +02:00

14 KiB

Clippy Phase 2 - Detailed Fix Checklist

Date: 2025-10-23 Objective: Track daily progress through Phase 2 incremental fixes Target: 2,312 warnings → <460 warnings (80% reduction) in 10 days


Progress Dashboard

Metric Start Current Target Progress
Total Warnings 2,312 2,312 <460 0%
Days Elapsed 0 0 10 0%
P0 Fixed 0 0 84 0%
P1 Fixed 0 0 253 0%
P2 Fixed 0 0 819 0%
Test Pass Rate 99.4% 99.4% 99.4%

Last Updated: 2025-10-23


Day 1: Unsafe Blocks (P0) - 84 Warnings

Target: 84 → 0 warnings (2-3 hours) Pattern: Add // SAFETY: comments (see CLIPPY_QUICK_FIX_GUIDE.md #1)

Files to Fix

trading_engine/src/lockfree/ (70 errors)

  • mpsc_queue.rs (19 errors)

    • Lines: 156, 189, 234, 267, 301, 334, 368, 402, 436, 470, 504, 538, 572, 606, 640, 674, 708, 742, 776
    • Type: Raw pointer dereference, atomic operations
    • Template: Lock-free safety pattern
  • ring_buffer.rs (18 errors)

    • Lines: 145, 178, 211, 244, 277, 310, 343, 376, 409, 442, 475, 508, 541, 574, 607, 640, 673, 706
    • Type: Array indexing, atomic loads/stores
    • Template: Ring buffer safety pattern
  • atomic_ops.rs (23 errors)

    • Lines: 89, 122, 155, 188, 221, 254, 287, 320, 353, 386, 419, 452, 485, 518, 551, 584, 617, 650, 683, 716, 749, 782, 815
    • Type: Raw atomic operations
    • Template: Atomic safety pattern
  • small_batch_ring.rs (10 errors)

    • Lines: 134, 167, 200, 233, 266, 299, 332, 365, 398, 431
    • Type: Batch operations, atomic
    • Template: Batch safety pattern

trading_engine/src/simd/ (8 errors)

  • mod.rs (8 errors)
    • Lines: 245, 278, 311, 344, 377, 410, 443, 476
    • Type: SIMD intrinsics (AVX2, SSE4.2)
    • Template: SIMD safety pattern

trading_engine/src/ (6 errors)

  • affinity.rs (6 errors)
    • Lines: 78, 111, 144, 177, 210, 243
    • Type: Thread affinity (pthread_setaffinity_np)
    • Template: Thread safety pattern

Verification Commands

# Count remaining unsafe warnings
cargo clippy --workspace 2>&1 | grep "unsafe block" | wc -l
# Should be 0 after Day 1

# Run tests
cargo test -p trading_engine --lib

Days 2-3: Indexing/Slicing (P1) - 253 Warnings

Target: 253 → 0 warnings (8-12 hours) Patterns: See CLIPPY_QUICK_FIX_GUIDE.md #2-4 (get(), bounds checks)

Day 2 Files (77 errors, 4 hours)

adaptive-strategy/src/ensemble/ (45 errors)

  • weight_optimizer.rs (30 errors)

    • Type: Matrix indexing, array access in optimization loops
    • Pattern: Replace arr[i] with arr.get(i).ok_or(...)?
  • confidence_aggregator.rs (15 errors)

    • Type: Prediction array indexing
    • Pattern: Use .first(), .last(), .get()

adaptive-strategy/src/risk/ (20 errors)

  • kelly_position_sizer.rs (20 errors)
    • Type: Historical data indexing
    • Pattern: Add bounds checks before indexing

adaptive-strategy/src/microstructure/ (12 errors)

  • mod.rs (12 errors)
    • Type: Order book depth indexing
    • Pattern: Use .get() with error handling

Day 3 Files (176 errors, 4-6 hours)

trading_engine/src/lockfree/ (55 errors)

  • small_batch_ring.rs (25 errors)
  • ring_buffer.rs (15 errors)
  • mpsc_queue.rs (15 errors)

trading_engine/src/types/ (18 errors)

  • validation.rs (10 errors)
  • optimized_order_book.rs (8 errors)

trading_engine/src/ (103 errors)

  • comprehensive_performance_benchmarks.rs (40 errors)
  • test_runner.rs (35 errors)
  • timing.rs (15 errors)
  • affinity.rs (13 errors)

Verification Commands

# Count remaining indexing warnings
cargo clippy --workspace 2>&1 | grep "indexing may panic" | wc -l
# Should be 0 after Day 3

# Run tests
cargo test -p adaptive-strategy --lib
cargo test -p trading_engine --lib

Days 4-5: As Conversions (P2) - 193 Warnings

Target: 193 → 0 warnings (6-8 hours) Patterns: See CLIPPY_QUICK_FIX_GUIDE.md #5-7 (TryFrom, From::from)

Day 4 Files (100 errors, 3-4 hours)

adaptive-strategy/src/ensemble/ (35 errors)

  • weight_optimizer.rs (20 errors)

    • Type: len() as f64, idx as usize
    • Pattern: Use From::from() or TryFrom
  • confidence_aggregator.rs (15 errors)

    • Type: hours as f64, count as f64
    • Pattern: Add #[allow(clippy::cast_precision_loss)] with justification

adaptive-strategy/src/risk/ (30 errors)

  • kelly_position_sizer.rs (20 errors)
  • ppo_position_sizer.rs (10 errors)

trading_engine/src/ (35 errors)

  • comprehensive_performance_benchmarks.rs (15 errors)
  • test_runner.rs (12 errors)
  • timing.rs (8 errors)

Day 5 Files (93 errors, 3-4 hours)

adaptive-strategy/src/models/ (25 errors)

  • tlob_model.rs (15 errors)
  • deep_learning.rs (10 errors)

trading_engine/src/simd/ (20 errors)

  • mod.rs (20 errors)

trading_engine/src/lockfree/ (25 errors)

  • atomic_ops.rs (15 errors)
  • small_batch_ring.rs (10 errors)

Remaining files (23 errors)

  • Various small files (<5 errors each)

Verification Commands

# Count remaining as conversion warnings
cargo clippy --workspace 2>&1 | grep "as conversion" | wc -l
# Should be 0 after Day 5

# Run tests
cargo test --workspace

Day 6: Float Arithmetic (P2) - 461 Warnings

Target: 461 → 0 warnings (2-3 hours) Strategy: Add module-level #[allow] with documentation (see CLIPPY_QUICK_FIX_GUIDE.md #8)

Files to Fix (Add module-level allow)

  • adaptive-strategy/src/ensemble/weight_optimizer.rs (113 errors)

    • Add #![allow(clippy::float_arithmetic)] at top
    • Add module doc comment explaining IEEE 754, NaN/Inf handling
    • Document zero-division checks
  • adaptive-strategy/src/risk/kelly_position_sizer.rs (67 errors)

    • Document Kelly Criterion math requirements
    • Document clamping for NaN/Inf prevention
  • adaptive-strategy/src/ensemble/confidence_aggregator.rs (52 errors)

    • Document ensemble aggregation math
    • Document outlier filtering for Inf prevention
  • adaptive-strategy/src/microstructure/mod.rs (47 errors)

    • Document microstructure calculations
    • Document spread/volatility clamping
  • adaptive-strategy/src/models/tlob_model.rs (41 errors)

    • Document order book math
    • Document price normalization
  • Remaining files (~141 errors across 15+ files)

    • Apply same pattern: module allow + documentation

Template

//! Module Name
//!
//! # Floating-Point Arithmetic
//!
//! This module performs extensive floating-point arithmetic for [algorithm].
//! IEEE 754 compliance is assumed. NaN/Inf handling:
//! - **NaN propagation**: [How NaNs are filtered/handled]
//! - **Inf handling**: [How Inf is prevented/clamped]
//! - **Zero division**: [How zero division is prevented]
//!
//! Clippy's `float_arithmetic` lint is intentionally allowed for this module.

#![allow(clippy::float_arithmetic)]

Verification Commands

# Count remaining float arithmetic warnings
cargo clippy --workspace 2>&1 | grep "floating-point arithmetic" | wc -l
# Should be 0 after Day 6

# Verify documentation
rg "#\[allow\(clippy::float_arithmetic\)\]" --type rust | wc -l
# Should be ~20

Day 7: Arithmetic Side Effects (P2) - 84 Warnings

Target: 84 → 0 warnings (4-6 hours) Patterns: See CLIPPY_QUICK_FIX_GUIDE.md #9-11 (checked_, saturating_)

Files to Fix

adaptive-strategy/src/ (40 errors)

  • ensemble/confidence_aggregator.rs (15 errors)

    • Type: Duration subtraction, timestamp arithmetic
    • Pattern: checked_sub() for timestamps
  • risk/kelly_position_sizer.rs (10 errors)

    • Type: Count additions, multiplications
    • Pattern: saturating_add() for counts
  • ensemble/weight_optimizer.rs (15 errors)

    • Type: Iteration counters
    • Pattern: checked_add() with overflow checks

trading_engine/src/ (44 errors)

  • comprehensive_performance_benchmarks.rs (20 errors)
  • test_runner.rs (12 errors)
  • timing.rs (8 errors)
  • affinity.rs (4 errors)

Verification Commands

# Count remaining arithmetic warnings
cargo clippy --workspace 2>&1 | grep "arithmetic operation" | wc -l
# Should be 0 after Day 7

Day 8: Println/Eprintln (P3) - 166 Warnings

Target: 166 → 0 warnings (2-3 hours) Pattern: See CLIPPY_QUICK_FIX_GUIDE.md #14 (replace with log::)

Bulk Fix Strategy

# Find all println! usage (excluding TLI)
rg "println!" --type rust -g '!tli/**' -l > /tmp/println_files.txt

# Replace println! with log::info!
while read file; do
  sed -i 's/println!/log::info!/g' "$file"
done < /tmp/println_files.txt

# Find all eprintln! usage
rg "eprintln!" --type rust -g '!tli/**' -l > /tmp/eprintln_files.txt

# Replace eprintln! with log::error!
while read file; do
  sed -i 's/eprintln!/log::error!/g' "$file"
done < /tmp/eprintln_files.txt

# Verify
cargo test --workspace

Files with Most Usage (Manual Review)

  • trading_engine/src/comprehensive_performance_benchmarks.rs (30+ println!)
  • trading_engine/src/test_runner.rs (25+ println!)
  • adaptive-strategy/src/ensemble/weight_optimizer.rs (15+ println!)

Verification Commands

# Count remaining println warnings
cargo clippy --workspace 2>&1 | grep "use of \`println!\`" | wc -l
# Should be 0 after Day 8

Days 9-10: Default Numeric Fallback (P3) - 361 Warnings

Target: 361 → 0 warnings (4-6 hours) Pattern: See CLIPPY_QUICK_FIX_GUIDE.md #15 (add type suffixes)

Day 9 Files (180 errors, 2-3 hours)

Add _f64 suffixes (floating-point literals)

# Find bare floating-point literals
rg "= [0-9]+\.[0-9]+;" --type rust | head -50

# Example fixes:
# Before: let threshold = 0.5;
# After:  let threshold = 0.5_f64;

Files to Fix

  • adaptive-strategy/src/ensemble/weight_optimizer.rs (40 errors)
  • adaptive-strategy/src/risk/kelly_position_sizer.rs (30 errors)
  • adaptive-strategy/src/ensemble/confidence_aggregator.rs (25 errors)
  • trading_engine/src/comprehensive_performance_benchmarks.rs (40 errors)
  • trading_engine/src/test_runner.rs (25 errors)
  • Remaining files (20 errors)

Day 10 Files (181 errors, 2-3 hours)

Add _usize suffixes (array indices)

# Find bare integer literals in indexing contexts
rg "\[[0-9]+\]" --type rust | head -50

# Example fixes:
# Before: arr[0]
# After:  arr[0_usize]

Files to Fix

  • trading_engine/src/lockfree/*.rs (80 errors)
  • adaptive-strategy/src/**/*.rs (60 errors)
  • Remaining files (41 errors)

Verification Commands

# Count remaining fallback warnings
cargo clippy --workspace 2>&1 | grep "default numeric fallback" | wc -l
# Should be 0 after Day 10

# Final verification
cargo clippy --workspace 2>&1 | grep "^error:" | wc -l
# Should be <460 (target)

Remaining Warnings (635 after Phase 2)

Assert with Result (75 errors) - OPTIONAL

  • Test infrastructure only
  • Low priority for Phase 3

Documentation (77 errors) - OPTIONAL

  • Missing # Errors sections (26)
  • Unbalanced backticks (18)
  • Missing backticks (15)
  • Unindented lists (14)
  • Low priority for Phase 3

Miscellaneous (558 errors) - OPTIONAL

  • Redundant clones (15)
  • Unreadable literals (need separators)
  • Manual clamp (12)
  • Must use violations (23)
  • Cosmetic issues for Phase 3

Daily Checklist Template

## Day X: [Category] - [Target] Warnings

**Date**: 2025-10-XX
**Time Budget**: X hours
**Status**: ⏳ In Progress / ✅ Complete

### Morning Session (4 hours)
- [ ] Fix files 1-3
- [ ] Run tests: `cargo test -p <crate>`
- [ ] Verify count: `cargo clippy --workspace 2>&1 | grep "[pattern]" | wc -l`

### Afternoon Session (4 hours)  
- [ ] Fix files 4-6
- [ ] Run tests: `cargo test --workspace`
- [ ] Update progress dashboard

### End of Day
- [ ] Commit changes: `git commit -m "fix(clippy): [category] - X warnings resolved"`
- [ ] Update CLIPPY_PHASE2_PROGRESS.md
- [ ] Push to branch: `git push origin clippy-phase2-day-X`

**Results**:
- Warnings Fixed: X
- Test Pass Rate: X.X%
- Time Spent: X.X hours
- Notes: [any issues encountered]

Git Strategy

Branch Structure

# Create Phase 2 branch
git checkout -b clippy-phase2

# Create daily branches for rollback
git checkout -b clippy-phase2-day-1
# ... work on Day 1 ...
git commit -m "fix(clippy): unsafe blocks - 84 warnings resolved"
git push origin clippy-phase2-day-1

# Merge to main daily branch
git checkout clippy-phase2
git merge clippy-phase2-day-1

Commit Message Template

fix(clippy): [category] - [count] warnings resolved

- Fixed [count] [category] warnings in [crate]
- Pattern: [brief description of fix pattern]
- Files: [top 3-5 files]
- Tests: [pass rate] (baseline: 99.4%)

Refs: CLIPPY_PHASE2_CHECKLIST.md Day [X]

Testing Strategy

Per-Crate Testing (After Each Batch)

# Test the crate you just fixed
cargo test -p adaptive-strategy --lib
cargo test -p trading_engine --lib

# Quick smoke test
cargo test --workspace --lib

End-of-Day Full Testing

# Full test suite
cargo test --workspace

# Check for new clippy warnings
cargo clippy --workspace 2>&1 | grep "^error:" | wc -l

# Verify no regressions
cargo build --workspace --release

Rollback Procedure (If Tests Fail)

# Identify last good commit
git log --oneline

# Rollback to last good state
git reset --hard <last-good-commit>

# Identify problematic file
git diff HEAD~1..HEAD --name-only

# Fix the specific issue
# Re-run tests
cargo test -p <crate>

Success Metrics

Daily Targets

Day Category Errors Fixed Cumulative % Complete
1 Unsafe blocks 84 84 3.6%
2 Indexing (Part 1) 77 161 7.0%
3 Indexing (Part 2) 176 337 14.6%
4 As conversions (Part 1) 100 437 18.9%
5 As conversions (Part 2) 93 530 22.9%
6 Float arithmetic 461 991 42.9%
7 Arithmetic side effects 84 1,075 46.5%
8 Println/eprintln 166 1,241 53.7%
9 Numeric fallback (Part 1) 180 1,421 61.5%
10 Numeric fallback (Part 2) 181 1,602 69.3%

Phase 2 Success Criteria

  • Fix 1,677 warnings (72.5% reduction)
  • Reduce to <460 warnings remaining
  • Maintain 99.4% test pass rate
  • Zero production incidents
  • All P0/P1 warnings resolved

Next Action: Begin Day 1 (Unsafe Blocks) - 2-3 hours to fix 84 warnings