# Codebase Consolidation & DRY Cleanup — Implementation Plan

> **For Claude:** REQUIRED SUB-SKILL: Use superpowers:executing-plans to implement this plan task-by-task.

**Goal:** Eliminate ~13,000 lines of duplicated code, god files, and unused compliance scaffolding.

**Architecture:** Four independent cleanup areas executed in dependency order: DRY consolidation → types.rs split → compliance audit → enhanced_ml.rs cleanup. Single worktree, frequent commits.

**Tech Stack:** Rust workspace, SQLX_OFFLINE=true for builds, cargo check/clippy/test

---

### Task 1: Delete duplicate RetryStrategy from trading_engine

**Files:**
- Modify: `crates/trading_engine/src/types/error.rs` — delete lines 14-85 (RetryStrategy enum + impl)
- Modify: `crates/trading_engine/src/types/retry.rs` — if it imports local RetryStrategy, switch to `common::error::RetryStrategy`

**Step 1: Check if RetryStrategy is used anywhere in trading_engine**

Run: `SQLX_OFFLINE=true grep -rn "RetryStrategy" crates/trading_engine/src/ --include="*.rs"`

Note: Prior audit found ZERO callers outside the definition file. If confirmed, just delete.

**Step 2: Delete the duplicate RetryStrategy enum and its impl block**

In `crates/trading_engine/src/types/error.rs`, delete everything from line 14 (`/// Retry strategies`) through line 85 (`}` closing `max_attempts`). Also delete the comment on lines 10-12 about "moved to error-handling crate".

**Step 3: Fix any compilation errors**

Run: `SQLX_OFFLINE=true cargo check -p trading_engine`

If `retry.rs` imports it, change to: `use common::error::RetryStrategy;`

**Step 4: Commit**

```
git add -A && git commit -m "refactor: delete duplicate RetryStrategy from trading_engine"
```

---

### Task 2: Delete duplicate ErrorSeverity from data/ and database/

**Files:**
- Modify: `crates/data/src/error.rs` — delete ErrorSeverity enum (line 441+), update `severity()` method to use `common::error::ErrorSeverity`
- Modify: `crates/data/src/validation.rs` — delete ErrorSeverity enum (line 112+), update struct field and usages
- Modify: `crates/database/src/error.rs` — delete ErrorSeverity enum (line 119+)

**Step 1: Verify common's ErrorSeverity has the same variants**

Read `crates/common/src/error.rs` around line 132. Confirm it has: Critical, High, Medium, Low.

**Step 2: In `crates/data/src/error.rs`:**
- Delete the `ErrorSeverity` enum definition (~line 441-460) and its `Display` impl
- Add `use common::error::ErrorSeverity;` to imports
- The `severity()` method on DataError (line 376) stays — it just returns the common type now

**Step 3: In `crates/data/src/validation.rs`:**
- Delete the `ErrorSeverity` enum definition (~line 112-120)
- Add `use common::error::ErrorSeverity;` to imports
- The `severity` field in `ValidationError` struct stays

**Step 4: In `crates/database/src/error.rs`:**
- Delete the `ErrorSeverity` enum definition (~line 119+)
- Add `use common::error::ErrorSeverity;` to imports if anything uses it

**Step 5: Verify compilation**

Run: `SQLX_OFFLINE=true cargo check -p data -p database`

Note: If the Display impl differs between copies, keep common's version and fix callers.

**Step 6: Run tests**

Run: `SQLX_OFFLINE=true cargo test -p data --lib && SQLX_OFFLINE=true cargo test -p database --lib`

**Step 7: Commit**

```
git add -A && git commit -m "refactor: consolidate ErrorSeverity to common crate"
```

---

### Task 3: Delete duplicate RetryConfig from storage/

**Files:**
- Modify: `crates/storage/src/model_helpers.rs` — delete RetryConfig struct (line 141+) and Default impl (line 152+)
- Modify: `crates/storage/src/object_store_backend.rs` — update import to use `common::resilience::RetryConfig`

**Step 1: Verify common's RetryConfig has matching fields**

Read `crates/common/src/resilience/retry.rs` around line 40. Confirm fields match: max_retries, base_delay, max_delay, circuit_breaker_threshold, circuit_breaker_timeout.

**Step 2: Delete RetryConfig from model_helpers.rs**

Delete the struct definition, Default impl, and update the field in the struct that uses it (`_retry_config: RetryConfig` at line 136).

**Step 3: Update object_store_backend.rs import**

Change: `use crate::model_helpers::{ConnectionPool, ProgressCallback, RetryConfig};`
To: `use crate::model_helpers::{ConnectionPool, ProgressCallback};`
Add: `use common::resilience::RetryConfig;`

Note: If storage doesn't depend on common, add it to storage/Cargo.toml.

**Step 4: Verify**

Run: `SQLX_OFFLINE=true cargo check -p storage`

**Step 5: Commit**

```
git add -A && git commit -m "refactor: consolidate RetryConfig to common::resilience"
```

---

### Task 4: Split common/src/types.rs into focused modules

This is a large structural refactor. The 4,909-line file has clear section markers
that make splitting straightforward.

**Files:**
- Create: `crates/common/src/types/` directory
- Create: `crates/common/src/types/mod.rs` — re-exports
- Create: `crates/common/src/types/aliases.rs` — type aliases (lines 26-77)
- Create: `crates/common/src/types/service.rs` — ServiceId, ServiceStatus, ConfigVersion, RequestId (lines 125-276)
- Create: `crates/common/src/types/market_data.rs` — MarketDataEvent, QuoteEvent, TradeEvent, etc. (lines 278-828)
- Create: `crates/common/src/types/type_error.rs` — CommonTypeError enum + impls (lines 828-1106)
- Create: `crates/common/src/types/trading_enums.rs` — OrderType, BrokerType, OrderStatus, OrderSide, Currency, TimeInForce (lines 1106-1393)
- Create: `crates/common/src/types/identifiers.rs` — EventId, FillId, AggregateId, AssetId, ClientId (lines 1393-1631)
- Create: `crates/common/src/types/domain.rs` — Order, Position, Execution, Price, Quantity, Money, Symbol, etc. (lines 1631-3970)
- Create: `crates/common/src/types/market.rs` — MarketRegime, TickType, Exchange, MarketTick, TradingSignal, OrderRef (lines 3970-4429)
- Delete: `crates/common/src/types.rs` (original file)

**Step 1: Create the types/ directory**

```bash
mkdir -p crates/common/src/types
```

**Step 2: Extract each section into its own file**

For each file, copy the relevant lines from types.rs, adding necessary imports at the top
of each new file (use statements for chrono, serde, uuid, HashMap, etc.).

The `mod.rs` re-exports everything:
```rust
mod aliases;
mod service;
mod market_data;
mod type_error;
mod trading_enums;
mod identifiers;
mod domain;
mod market;

pub use aliases::*;
pub use service::*;
pub use market_data::*;
pub use type_error::*;
pub use trading_enums::*;
pub use identifiers::*;
pub use domain::*;
pub use market::*;
```

Cross-references within the module use `super::` or `crate::types::`.

**Step 3: Move the test module**

The `#[cfg(test)] mod tests` block (lines 4433+) should be split:
- Tests for domain types → `domain.rs`
- Tests for market data → `market_data.rs`
- Or keep as a single `tests.rs` that imports from the parent module

**Step 4: Update lib.rs if needed**

`crates/common/src/lib.rs` should already have `pub mod types;` — this stays. The re-exports
in `mod.rs` maintain backward compatibility.

**Step 5: Verify**

Run: `SQLX_OFFLINE=true cargo check --workspace`

This must compile the entire workspace since many crates import from `common::types`.

**Step 6: Run common tests**

Run: `SQLX_OFFLINE=true cargo test -p common --lib`

**Step 7: Commit**

```
git add -A && git commit -m "refactor: split common/types.rs (4909 LOC) into 8 focused modules"
```

---

### Task 5: Audit compliance module usage

**Files:**
- Read: all files in `crates/trading_engine/src/compliance/`
- Read: `crates/trading_engine/src/lib.rs` (compliance module export)

**Step 1: Find all external callers of each compliance submodule**

For each of the 8 compliance files, grep the entire workspace for usage of their
public types/functions OUTSIDE the compliance directory:

```bash
# For each file, check if its types are used externally
for type in ISO27001ComplianceManager SOXCompliance MiFIDCompliance BestExecutionAnalyzer \
  ComplianceReporting AuditTrailManager AutomatedReporting TransactionReport; do
  echo "=== $type ==="
  grep -rn "$type" crates/ services/ --include="*.rs" | grep -v "compliance/" | grep -v "/tests/"
done
```

**Step 2: Document findings**

Create a table:
| Type/Module | External callers | Verdict |
|---|---|---|
| iso27001_compliance | ? | keep/delete |
| sox_compliance | ? | keep/delete |
| ... | | |

**Step 3: Report findings before proceeding**

Present the usage table and get confirmation before deleting anything.
This step is a checkpoint — do NOT delete without review.

---

### Task 6: Delete unused compliance modules

Based on Task 5 findings. Expected: iso27001, sox, automated_reporting, and
best_execution have zero external callers.

**Step 1: Delete each unused file**

For each confirmed-unused file:
- Delete the file
- Remove `pub mod <name>;` from `compliance/mod.rs`
- Remove any `pub use` re-exports from `compliance/mod.rs`

**Step 2: Trim compliance/mod.rs**

Remove re-exports for deleted modules. Remove struct definitions in mod.rs
that only served as wrappers for deleted submodules.

**Step 3: Verify**

Run: `SQLX_OFFLINE=true cargo check --workspace`

Fix any compilation errors — if something was actually used, restore it.

**Step 4: Run trading_engine tests**

Run: `SQLX_OFFLINE=true cargo test -p trading_engine --lib`

**Step 5: Commit**

```
git add -A && git commit -m "refactor: delete unused compliance scaffolding (-N lines)"
```

---

### Task 7: Audit and clean enhanced_ml.rs

**Files:**
- Modify: `services/trading_service/src/services/enhanced_ml.rs`
- Reference: `crates/ml/src/ensemble/model_adapter.rs` (EnsembleModelAdapter)

**Step 1: Read the full file and identify**

1. `RuntimeModelInfo` — does it overlap with `ml::ModelMetadata`?
2. `FeaturePreprocessor` — does it duplicate `ProductionFeatureExtractorAdapter`?
3. `EnsembleConfig` — does it duplicate `ml::ensemble::ExtendedEnsembleConfig`?
4. Model loading code — can it use `build_production_strategy()`?
5. Dead `Status::unavailable` stubs

**Step 2: Delete/consolidate identified duplicates**

Replace internal types with imports from ml crate where possible.
Simplify model loading to delegate to `ml::ensemble::build_production_strategy()`.

**Step 3: Verify**

Run: `SQLX_OFFLINE=true cargo check -p trading_service`

**Step 4: Run tests**

Run: `SQLX_OFFLINE=true cargo test -p trading_service --lib`

**Step 5: Commit**

```
git add -A && git commit -m "refactor: simplify enhanced_ml.rs, remove legacy patterns"
```

---

### Task 8: Full verification

**Step 1: Workspace build**

Run: `SQLX_OFFLINE=true cargo check --workspace`
Expected: zero errors

**Step 2: Clippy on affected crates**

Run: `SQLX_OFFLINE=true cargo clippy -p common -p trading_engine -p data -p database -p storage -p trading_service --lib -- -D warnings`

**Step 3: Test affected crates**

Run:
```bash
SQLX_OFFLINE=true cargo test -p common --lib
SQLX_OFFLINE=true cargo test -p trading_engine --lib
SQLX_OFFLINE=true cargo test -p data --lib
SQLX_OFFLINE=true cargo test -p database --lib
SQLX_OFFLINE=true cargo test -p storage --lib
```

**Step 4: Line count verification**

Run: `git diff --stat main` — target: -13,000+ net lines

**Step 5: Commit verification results**

No new commit needed — just verify all tasks are green.
