- 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
533 lines
14 KiB
Markdown
533 lines
14 KiB
Markdown
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
```rust
|
|
//! 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
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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
|
|
|
|
```markdown
|
|
## 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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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
|
|
```bash
|
|
# 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)
|
|
```bash
|
|
# 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
|