Files
foxhunt/docs/REFACTORING_SUMMARY.md
jgrusewski 2df1ea92e1 feat(ml): WAVE 29 DQN Codebase Cleanup & Refactoring Campaign
BREAKING CHANGES:
- Removed orphaned dqn.rs monolithic trainer (4,975 lines)
- Removed orphaned dqn_ensemble.rs module (816 lines)
- Removed orphaned tft.rs and tft_complete_int8_integration_test.rs
- TFT trainer split into modular directory structure

DQN Module Refactoring:
- Split trainers/dqn.rs into modular structure (config.rs, statistics.rs, trainer.rs)
- Fixed hyperopt 39D search space (continuous params only)
- Boolean flags (use_dueling, use_double_dqn, use_per, use_noisy_nets) are now FIXED architectural decisions
- use_distributional defaults to false (Candle BUG #36 - scatter_add gradient issues)

Clean Module Structure:
- ml/src/trainers/dqn/ directory with proper mod.rs exports
- ml/src/trainers/tft/ directory with config.rs, types.rs, model.rs, trainer.rs, tests.rs
- All P0 features validated: TD-error clamping, batch diversity, LR scheduler, priority staleness

Documentation:
- Added comprehensive docs in docs/codebase-cleanup/
- ADR-001 for DQN refactoring decisions
- Rainbow DQN component matrix and quick reference guides

Build Status: Compiles with zero errors

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-11-27 23:46:13 +01:00

4.8 KiB

ML Trainer Refactoring - Quick Reference

Status: ANALYSIS COMPLETE

All planning, documentation, and extraction scripts are ready for execution.


Files to Refactor

File Lines Target Modules Status
trainers/dqn.rs 4,975 8 modules 🔄 Backup created, scripts ready
trainers/tft.rs 2,915 6 modules 📋 Plan documented
hyperopt/adapters/dqn.rs 3,162 4 modules 📋 Plan documented
trainers/mamba2.rs 544 - OK (under 1K)

Quick Start for Next Agent

Step 1: Execute DQN Extraction Scripts

cd /home/jgrusewski/Work/foxhunt

# Extract config module
sed -n '48,747p' ml/src/trainers/dqn.rs.backup > ml/src/trainers/dqn/config.rs
# Add header (see docs/dqn_refactoring_implementation.md Script 1)
cargo check --package ml

# Extract agent wrapper
sed -n '164,424p' ml/src/trainers/dqn.rs.backup > ml/src/trainers/dqn/agent_wrapper.rs
# Add header (see docs/dqn_refactoring_implementation.md Script 2)
cargo check --package ml

# Extract training monitor
sed -n '728,1012p' ml/src/trainers/dqn.rs.backup > ml/src/trainers/dqn/training_monitor.rs
# Add header (see docs/dqn_refactoring_implementation.md Script 3)
cargo check --package ml

Step 2: Manual Extractions (Complex)

See docs/dqn_refactoring_implementation.md for detailed line mappings:

  • trainer_core.rs: Lines 1013-1680 (~600 lines)
  • training_loop.rs: Lines 1464-2980 (~1500 lines)
  • data_loading.rs: Lines 3482-4600 (~600 lines)
  • checkpointing.rs: Scattered locations (~200 lines)

Step 3: Create Module Root

Create ml/src/trainers/dqn/mod.rs with public re-exports (see ADR-001 for template).

Step 4: Verify

cargo build --package ml
cargo test --package ml --lib
# Expect: All 19 DQN tests pass

Documentation Files

  1. REFACTORING_REPORT.md (this is the master document)

    • Complete project overview
    • Timeline estimates
    • Risk mitigation
  2. ADR-001-dqn-refactoring.md

    • Architecture decision rationale
    • Module responsibilities
    • Public API strategy
  3. dqn_refactoring_plan.md

    • High-level strategy
    • Module boundaries
  4. dqn_refactoring_implementation.md

    • Detailed extraction scripts
    • Line-by-line mappings
    • Execution checklist

Backup Information

  • Original file: ml/src/trainers/dqn.rs (4,975 lines)
  • Backup location: ml/src/trainers/dqn.rs.backup
  • Created: 2025-11-27 15:33

Rollback Procedure (if needed)

rm -rf ml/src/trainers/dqn/
mv ml/src/trainers/dqn.rs.backup ml/src/trainers/dqn.rs
cargo check --package ml

Expected Results

Before Refactoring

ml/src/trainers/
├── dqn.rs          (4,975 lines) ❌
├── tft.rs          (2,915 lines) ❌
├── mamba2.rs       (544 lines) ✅
└── mod.rs

After Refactoring

ml/src/trainers/
├── dqn/
│   ├── mod.rs                (~50 lines) ✅
│   ├── config.rs             (~800 lines) ✅
│   ├── agent_wrapper.rs      (~260 lines) ✅
│   ├── training_monitor.rs   (~265 lines) ✅
│   ├── trainer_core.rs       (~600 lines) ✅
│   ├── training_loop.rs      (~1500 lines) ⚠️ (target: split further to <1K)
│   ├── data_loading.rs       (~600 lines) ✅
│   └── checkpointing.rs      (~200 lines) ✅
├── tft/
│   ├── mod.rs                (~50 lines) ✅
│   ├── config.rs             (~400 lines) ✅
│   ├── encoder.rs            (~600 lines) ✅
│   ├── attention.rs          (~500 lines) ✅
│   ├── decoder.rs            (~400 lines) ✅
│   └── training.rs           (~900 lines) ✅
├── mamba2.rs       (544 lines) ✅
└── mod.rs

Note: training_loop.rs at ~1500 lines may need further splitting into:

  • training_loop.rs (main training logic, ~800 lines)
  • training_helpers.rs (helper methods, ~700 lines)

Key Decisions

  1. Zero breaking changes: Public API preserved via re-exports in mod.rs
  2. Incremental verification: cargo check after each extraction
  3. Safe rollback: Backup file maintained until full verification
  4. Clear boundaries: Each module has single responsibility

Contact Information

Swarm ID: swarm_1764253799645_zlazqh589 Agent Role: ml-refactorer (System Architecture Designer) Task: Split oversized ML trainer files into maintainable modules


Next Agent Instructions

You have everything you need:

  1. Backup created
  2. Directories ready
  3. Extraction scripts documented
  4. Architecture decisions documented
  5. Implementation guide complete

Start with Phase 1 (DQN), verify each step with cargo check, then proceed to TFT and hyperopt adapter.

Good luck! 🚀