# Coupling Review Lens

Review the provided code for **tight coupling, dependency issues, and boundary violations**.

## What to Look For

### Tight Coupling
- Direct instantiation instead of dependency injection
- Concrete types where interfaces would allow flexibility
- Functions reaching deep into other modules' internals
- Changes in one module requiring changes in many others

### Circular Dependencies
- Module A imports B, B imports A (direct cycle)
- Longer cycles: A → B → C → A
- Runtime cycles hidden by lazy imports

### Leaky Abstractions
- Internal types exposed in public APIs
- Implementation details in return types
- Database schemas visible in API responses

### Layer Violations
- UI code directly calling database
- Business logic in controllers/handlers
- Cross-cutting concerns scattered instead of centralized

## Output Format

For each finding:
```
[COUPLING] <severity:HIGH|MED|LOW> <file:line>
Type: <tight|circular|leaky|layer-violation>
Issue: <what's coupled inappropriately>
Suggest: <introduce interface, inject dependency, extract module, invert dependency>
```

## Guidelines

- HIGH = architectural violation, makes testing/changes hard
- MED = unnecessary coupling, refactor when touching this code
- LOW = minor dependency that could be cleaner
- Some coupling is necessary - flag inappropriate coupling, not all coupling
- Circular deps are almost always HIGH severity
- Depend on abstractions, not concretions
