ggen 4.0.0

ggen is a deterministic, language-agnostic code generation framework that treats software artifacts as projections of knowledge graphs.
# CLI Business Logic Extraction - Priority List

**Generated:** 2025-11-20
**Total Remaining Work:** 1 hour 45 minutes

---

## CRITICAL FINDING

✅ **The ggen CLI codebase is ALREADY 94.1% migrated to proper domain separation!**

This is an **exemplary codebase** following clean architecture principles:
- CLI layer is thin adapters (parsing + output formatting)
- Domain layer contains all business logic
- Clean async/sync bridging
- No circular dependencies
- Excellent test coverage

---

## PRIORITY 0: CRITICAL (None!)

**Status:** ✅ NO CRITICAL WORK NEEDED

All critical business logic has been extracted to domain layer.

---

## PRIORITY 1: IMPORTANT (1.5 hours total)

### P1-1: Marketplace List Maturity Filtering

**What:** Extract filtering/sorting logic from CLI to domain
**Where:** `crates/ggen-cli/src/cmds/marketplace.rs:252-285`
**LOC:** 33 lines
**Effort:** 1 hour
**Risk:** Low
**Complexity:** Low

**Why Do This:**
- Consistency with other domain functions
- Testability (can unit test filtering logic)
- Separation of concerns (CLI shouldn't know about maturity scores)

**Domain Function:**
```rust
// Create: crates/ggen-domain/src/marketplace/list.rs

pub struct FilterAndSortOptions {
    pub min_maturity: Option<String>,
    pub maturity_level: Option<String>,
    pub sort_by: Option<String>,
}

pub fn filter_and_sort(
    packages: Vec<InstalledPackageInfo>,
    options: &FilterAndSortOptions,
) -> Result<Vec<InstalledPackageInfo>> {
    // Move filtering logic here
}
```

**Testing:**
```bash
cargo make test --test marketplace_list_filtering
```

**Acceptance Criteria:**
- [ ] Domain function created
- [ ] CLI calls domain function
- [ ] Unit tests pass (maturity filtering, sorting)
- [ ] Integration test updated
- [ ] cargo make lint passes

---

### P1-2: Marketplace Improve Template Application

**What:** Simplify CLI wrapper for template improvements
**Where:** `crates/ggen-cli/src/cmds/marketplace.rs:1677-1693`
**LOC:** 16 lines
**Effort:** 30 minutes
**Risk:** Very Low
**Complexity:** Low

**Why Do This:**
- Cleaner separation (domain function already exists!)
- Simpler error handling
- Better output formatting

**Refactored Code:**
```rust
if let Some(template) = apply {
    let message = apply_template_improvements(&package_path, &template)?;
    println!("\n✅ {}", message);
    return Ok(serde_json::json!({ "status": "applied", ... }));
}
```

**Testing:**
```bash
cargo make test --test marketplace_improve
```

**Acceptance Criteria:**
- [ ] CLI simplified
- [ ] Domain function still handles application
- [ ] Output format unchanged
- [ ] Tests pass

---

## PRIORITY 2: NICE-TO-HAVE (15 minutes total)

### P2-1: Variable Parsing Helper (DRY)

**What:** Extract duplicated variable parsing to utility
**Where:** `template.rs:303-316`, `project.rs:777-790`
**LOC:** 13 lines (duplicated in 2 files)
**Effort:** 15 minutes
**Risk:** None
**Complexity:** Trivial

**Why Do This:**
- DRY principle (Don't Repeat Yourself)
- Single source of truth
- Easier to maintain/update

**Utility Function:**
```rust
// Create: crates/ggen-utils/src/cli.rs

pub fn parse_key_value_pairs(
    pairs: &[String],
) -> Result<BTreeMap<String, String>, String> {
    // Move parsing logic here
}
```

**Testing:**
```bash
cargo make test --test cli_utilities
```

**Acceptance Criteria:**
- [ ] Utility function created with tests
- [ ] template.rs uses utility
- [ ] project.rs uses utility
- [ ] All tests pass

---

## EXECUTION SCHEDULE

### Week 1 (Total: 1 hour 45 minutes)

**Monday Morning (1 hour):**
- [ ] P1-1: Marketplace list filtering (60 min)
  - Create domain function (20 min)
  - Update CLI (10 min)
  - Write tests (20 min)
  - Verify (10 min)

**Monday Afternoon (30 minutes):**
- [ ] P1-2: Marketplace improve refactor (30 min)
  - Refactor CLI (15 min)
  - Test (10 min)
  - Verify (5 min)

**Tuesday Morning (15 minutes):**
- [ ] P2-1: Variable parsing helper (15 min)
  - Create utility (5 min)
  - Write tests (5 min)
  - Update CLI files (3 min)
  - Verify (2 min)

**Tuesday Afternoon:**
- [ ] Final validation
  - Run full test suite: `cargo make test`
  - Run linting: `cargo make lint`
  - Run type checking: `cargo make check`
  - Update documentation

---

## VALIDATION COMMANDS

After each change:

```bash
# Quick validation
cargo make check           # Compiler check
cargo make test-unit       # Unit tests
cargo make lint            # Clippy linting

# Full validation (before commit)
cargo make test            # All tests
cargo make pre-commit      # Format + lint + tests
cargo make ci              # Full CI pipeline
```

---

## RISK MITIGATION

### P1-1 Risks:
- **Risk:** Breaking existing list functionality
- **Mitigation:** Extensive unit tests, integration tests unchanged
- **Rollback:** Git revert if tests fail

### P1-2 Risks:
- **Risk:** None (domain function already exists)
- **Mitigation:** Simple refactor, same behavior
- **Rollback:** Git revert if needed

### P2-1 Risks:
- **Risk:** None (pure utility function)
- **Mitigation:** Comprehensive unit tests
- **Rollback:** Git revert if tests fail

---

## DEFINITION OF DONE

For each task:

- [ ] Code changes committed
- [ ] Unit tests added and passing
- [ ] Integration tests passing
- [ ] `cargo make check` passes (no compiler errors/warnings)
- [ ] `cargo make test` passes (all tests pass)
- [ ] `cargo make lint` passes (no clippy warnings)
- [ ] Documentation updated (if needed)
- [ ] Code review complete (self-review or peer)
- [ ] No circular dependencies introduced
- [ ] Performance unchanged (or improved)

---

## POST-COMPLETION METRICS

**Target State:**
- Functions fully migrated: 34/34 (100%)
- LOC to extract: 0
- Code duplication instances: 0
- Architecture score: Perfect (clean separation of concerns)

**Current State:**
- Functions fully migrated: 32/34 (94.1%)
- LOC to extract: 62
- Code duplication instances: 1

**Gap to Close:**
- 2 functions to complete (5.9%)
- 62 LOC to extract (2.2% of total)
- 1 duplication to remove

---

## RECOMMENDATIONS

### DO NOW (Priority 1)
1. ✅ Schedule 1.5 hours for P1 tasks
2. ✅ Create feature branch: `feature/cli-extraction-final`
3. ✅ Execute P1-1 and P1-2

### DO THIS WEEK (Priority 2)
4. ✅ Execute P2-1 (DRY improvement)
5. ✅ Final validation and testing
6. ✅ Create PR with comprehensive description

### DO LATER (Nice-to-have)
7. Consider extracting input validation patterns to shared utilities
8. Document the excellent architecture for other projects
9. Create architecture decision record (ADR) for separation pattern

---

## SUCCESS CELEBRATION

When complete, this codebase will have:
- **100% domain separation** (perfect architecture)
-**Zero code duplication** in CLI layer
-**Complete test coverage** of business logic
-**Clean async/sync bridging** pattern
-**Exemplary codebase** for other Rust projects

**This will be a reference implementation of clean architecture in Rust CLI applications!**

---

**END OF PRIORITY LIST**