Back to skills
SkillHub ClubShip Full StackFull Stack
deptrac-fixer
Imported from https://github.com/VilnaCRM-Org/core-service.
Packaged view
This page reorganizes the original catalog entry around fit, installability, and workflow context first. The original raw source lives below.
Stars
4
Hot score
81
Updated
March 20, 2026
Overall rating
C3.4
Composite score
3.4
Best-practice grade
A92.4
Install command
npx @skill-hub/cli install vilnacrm-org-core-service-deptrac-fixer
Repository
VilnaCRM-Org/core-service
Skill path: .claude/skills/deptrac-fixer
Imported from https://github.com/VilnaCRM-Org/core-service.
Open repositoryBest for
Primary workflow: Ship Full Stack.
Technical facets: Full Stack.
Target audience: everyone.
License: Unknown.
Original source
Catalog source: SkillHub Club.
Repository owner: VilnaCRM-Org.
This is still a mirrored public skill entry. Review the repository before installing into production workflows.
What it helps with
- Install deptrac-fixer into Claude Code, Codex CLI, Gemini CLI, or OpenCode workflows
- Review https://github.com/VilnaCRM-Org/core-service before adding deptrac-fixer to shared team environments
- Use deptrac-fixer for development workflows
Works across
Claude CodeCodex CLIGemini CLIOpenCode
Favorites: 0.
Sub-skills: 0.
Aggregator: No.
Original source / Raw SKILL.md
---
name: deptrac-fixer
description: Diagnose and fix Deptrac architectural violations automatically. Use when Deptrac reports dependency violations, layers are incorrectly coupled, or when refactoring code to respect hexagonal architecture boundaries. Never modifies deptrac.yaml - always fixes the code to match the architecture.
---
# Deptrac Fixer Skill
## Context (Input)
- `make deptrac` reports violations
- Error message contains "must not depend on"
- Domain layer has framework imports (Symfony, Doctrine, API Platform)
- Infrastructure directly calls Application handlers
- Any architectural boundary violation detected
## Task (Function)
Diagnose and fix Deptrac violations by refactoring code to respect hexagonal architecture boundaries.
**Success Criteria**: `make deptrac` outputs "✅ No violations found"
---
## Core Principle
**Fix the code, NEVER modify `deptrac.yaml`**
The architecture is correct. The code must conform to it, not vice versa.
---
## Quick Start: Fix a Violation
### Step 1: Run Deptrac
```bash
make deptrac
```
### Step 2: Parse Violation Message
```
Domain must not depend on Symfony
src/Customer/Domain/Entity/Customer.php:8
uses Symfony\Component\Validator\Constraints as Assert
```
**Extract:**
- **Violating Layer**: Domain
- **Forbidden Dependency**: Symfony
- **File & Line**: `src/Customer/Domain/Entity/Customer.php:8`
- **Violation Type**: `uses` (import statement)
### Step 3: Identify Fix Pattern
| Domain Depends On | Fix Pattern | Example File |
| ------------------------ | ------------------- | --------------------------------------------------------------------------------- |
| Symfony Validator | Move to YAML config | [01-domain-symfony-validation.php](examples/01-domain-symfony-validation.php) |
| Doctrine (ODM/ORM) | Use XML mapping | [02-domain-doctrine-annotations.php](examples/02-domain-doctrine-annotations.php) |
| API Platform | Move to YAML config | [03-domain-api-platform.php](examples/03-domain-api-platform.php) |
| Infrastructure → Handler | Use Command Bus | [04-infrastructure-handler.php](examples/04-infrastructure-handler.php) |
**See**: [REFERENCE.md](REFERENCE.md) for complete fix patterns and advanced scenarios.
### Step 4: Apply Fix
Follow the pattern from examples, then verify:
```bash
make deptrac
```
Repeat until: "✅ No violations found"
---
## Layer Dependency Rules
```
Domain ─────────────────> (NO dependencies)
│
│
Application ──────────> Domain + Infrastructure + Symfony + API Platform
│
│
Infrastructure ───────> Domain + Application + Symfony + Doctrine
```
**Allowed Dependencies:**
| Layer | Can Depend On |
| ------------------ | -------------------------------------------------- |
| **Domain** | ❌ Nothing (pure PHP only) |
| **Application** | ✅ Domain, Infrastructure, Symfony, API Platform |
| **Infrastructure** | ✅ Domain, Application, Symfony, Doctrine, MongoDB |
**See**: [CODELY-STRUCTURE.md](CODELY-STRUCTURE.md) for complete directory hierarchy.
---
## Common Fix Patterns (Quick Reference)
### Pattern 1: Domain → Symfony Validator
❌ **Problem**: Validation annotations in Domain entity
```php
use Symfony\Component\Validator\Constraints as Assert;
class Customer {
#[Assert\NotBlank]
private string $name;
}
```
✅ **Solution**: Move validation to `config/validator/{Entity}.yaml`
---
### Pattern 2: Domain → Doctrine Annotations
❌ **Problem**: Doctrine attributes in Domain entity
```php
use Doctrine\ODM\MongoDB\Mapping\Annotations as ODM;
#[ODM\Document]
class Customer { }
```
✅ **Solution**: Create XML mapping in `config/doctrine/{Entity}.mongodb.xml`
---
### Pattern 3: Domain → API Platform
❌ **Problem**: API Platform attributes in Domain entity
```php
use ApiPlatform\Metadata\ApiResource;
#[ApiResource]
class Customer { }
```
✅ **Solution**: Create YAML config in `config/api_platform/resources/{entity}.yaml`
---
### Pattern 4: Infrastructure → Application Handler
❌ **Problem**: Direct handler call from Infrastructure
```php
class Repository {
public function __construct(
private SomeHandler $handler // ❌ Circular dependency
) {}
}
```
✅ **Solution**: Use Command Bus pattern
```php
class Repository {
public function __construct(
private CommandBusInterface $commandBus // ✅ Interface
) {}
public function someMethod() {
$this->commandBus->dispatch(new SomeCommand());
}
}
```
**See**: [examples/](examples/) directory for complete, runnable examples.
---
## Diagnostic Workflow
When facing multiple violations:
### Step 1: Get All Violations
```bash
make deptrac > violations.txt
```
### Step 2: Categorize by Type
Group violations by layer pair:
- Domain → Symfony
- Domain → Doctrine
- Domain → API Platform
- Infrastructure → Application
- etc.
### Step 3: Fix in Priority Order
1. **Domain violations first** (most critical)
2. **Infrastructure violations** (circular dependencies)
3. **Application violations** (least common)
### Step 4: Verify Incrementally
```bash
# After each fix
make deptrac
```
Track progress: 15 violations → 10 → 5 → 0 ✅
---
## Constraints
### NEVER
- Modify `deptrac.yaml` to allow violations
- Disable Deptrac checks
- Add suppression comments
- Create "wrapper" classes to hide dependencies
- Move entire class to wrong layer just to satisfy Deptrac
- Use reflection or dynamic loading to bypass checks
### ALWAYS
- Fix the code to match the architecture
- Keep Domain layer pure (no framework imports)
- Use interfaces for cross-layer dependencies
- Move configuration to YAML/XML files
- Verify fixes with `make deptrac` after each change
- Check that tests still pass after refactoring
---
## Format (Output)
### Expected Deptrac Output
```
Deptrac
Checking dependencies...
✅ No violations found
```
### Expected CI Output
```
✅ CI checks successfully passed!
```
---
## Verification Checklist
After fixing violations:
- [ ] `make deptrac` shows 0 violations
- [ ] Domain entities have no framework imports
- [ ] Validation moved to `config/validator/`
- [ ] Doctrine mapping moved to `config/doctrine/`
- [ ] API Platform config moved to `config/api_platform/`
- [ ] Infrastructure uses Command Bus, not direct handler calls
- [ ] All tests still pass (`make all-tests`)
- [ ] `make ci` passes completely
---
## Related Skills
- [implementing-ddd-architecture](../implementing-ddd-architecture/SKILL.md) - Understanding DDD patterns and layer responsibilities
- [api-platform-crud](../api-platform-crud/SKILL.md) - YAML-based API Platform configuration
- [database-migrations](../database-migrations/SKILL.md) - XML-based Doctrine mappings
- [complexity-management](../complexity-management/SKILL.md) - Refactoring without breaking architecture
---
## Quick Commands
```bash
# Run Deptrac analysis
make deptrac
# Check specific layer violations (if supported)
vendor/bin/deptrac analyze --report-uncovered
# Verify architecture after fixes
make deptrac && make ci
```
---
## Reference Documentation
For detailed patterns, examples, and troubleshooting:
- **[REFERENCE.md](REFERENCE.md)** - Complete fix patterns for all violation types
- **[CODELY-STRUCTURE.md](CODELY-STRUCTURE.md)** - Directory hierarchy and file placement rules
- **[examples/](examples/)** - Complete, runnable code examples:
- `01-domain-symfony-validation.php` - Fixing Symfony validation violations
- `02-domain-doctrine-annotations.php` - Removing Doctrine imports
- `03-domain-api-platform.php` - Moving API Platform config
- `04-infrastructure-handler.php` - Using Command Bus pattern
---
## Anti-Patterns to Avoid
### ❌ DON'T Modify deptrac.yaml
```yaml
# ❌ NEVER DO THIS
paths:
- { collector: layer_domain, exclude: '.*Annotation.*' } # Hiding violations
```
### ❌ DON'T Create Wrapper Classes
```php
// ❌ BAD: Hiding framework dependency
class MyValidator {
private SymfonyValidator $validator; // Still violates!
}
```
### ❌ DON'T Move Classes to Wrong Layer
```php
// ❌ BAD: Moving Domain entity to Application to "fix" violation
// src/Application/Entity/Customer.php // WRONG LAYER!
```
### ✅ DO Fix the Root Cause
- Extract validation to YAML
- Move configuration to XML
- Use interfaces and dependency inversion
- Respect layer responsibilities
---
## Success Criteria Summary
- ✅ Zero Deptrac violations
- ✅ Domain layer pure (no framework imports)
- ✅ All configuration externalized (YAML/XML)
- ✅ Proper use of Command Bus for cross-layer communication
- ✅ All tests passing
- ✅ CI pipeline green