Claude-skill-registry clean-architecture-checker
Verifies code follows Clean Architecture principles in Polibase. Activates when creating or modifying src/domain, src/application, src/infrastructure, or src/interfaces files. Checks dependency rules, entity independence, repository patterns, DTO usage, and type safety.
git clone https://github.com/majiayu000/claude-skill-registry
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/clean-architecture-checker" ~/.claude/skills/majiayu000-claude-skill-registry-clean-architecture-checker && rm -rf "$T"
skills/data/clean-architecture-checker/SKILL.mdClean Architecture Checker
Purpose
Verify that new code follows Clean Architecture principles as defined in the Polibase project.
When to Activate
This skill activates automatically when:
- Creating or modifying files in
,src/domain/
,src/application/
, orsrc/infrastructure/src/interfaces/ - Reviewing code changes across multiple layers
- Adding entities, repositories, use cases, or services
Quick Checklist
Before approving code, verify:
- Dependency Rule: Dependencies point inward (Domain ← Application ← Infrastructure ← Interfaces)
- Entity Independence: Domain entities have no framework dependencies (no SQLAlchemy, Streamlit, etc.)
- Repository Pattern: All repos inherit from
and use async/awaitBaseRepository[T] - DTO Usage: DTOs used for layer boundaries, not raw entities
- DTO Placement: DTOは
に配置(UseCaseファイル内に混在させない)src/application/dtos/ - UseCase間依存: Orchestratorパターンとして許容される場合のみ(抽出ログ統合等)
- Type Safety: Complete type hints with proper
handlingOptional - Tests: Unit tests for domain services and use cases
Core Principles
1. Dependency Rule
Dependencies must point inward: Domain ← Application ← Infrastructure ← Interfaces
✅ Domain imports nothing from outer layers ✅ Application only imports Domain ✅ Infrastructure imports Domain and Application ✅ Interfaces imports all inner layers (but not other Interface modules)
2. Entity Independence
Domain entities must not depend on external frameworks
✅ Use
@dataclass or Pydantic BaseModel
❌ No SQLAlchemy models in Domain
❌ No UI framework imports in Domain
3. Repository Pattern
All repositories follow async/await with ISessionAdapter
✅ Interfaces in Domain:
class IRepo(BaseRepository[T])
✅ Implementations in Infrastructure: class RepoImpl(BaseRepositoryImpl[T], IRepo)
✅ All methods are async def
4. DTO Pattern
Always use DTOs between layers
✅ DTOs in
src/application/dtos/(専用ファイルに配置)
✅ Input DTO → Use Case → Output DTO
❌ Never expose domain entities directly to outer layers
❌ UseCaseファイル内にDTO定義を混在させない(Issue #969)
5. UseCase間依存(Orchestratorパターン)
UseCase間依存は条件付きで許容
✅ Orchestrator UseCase が 子UseCase を呼び出すパターンは許容 ✅ 抽出ログ統合(
UpdateEntityFromExtractionUseCase)への依存は許容(ADR-0005)
❌ UseCase間で循環依存を作らない
❌ Bronze Layer / Gold Layer の保護機構をバイパスしない
6. Type Safety
Leverage Python 3.11+ type hints
✅ All public methods have type hints ✅ Use
T | None for nullable types
✅ Explicit None checks for Optional values
Common Violations
See examples.md for detailed good/bad code examples.
Detailed Reference
For comprehensive architecture guidelines, see reference.md.
Templates
Use templates in
templates/ directory for creating new:
- Domain entities
- Repository interfaces and implementations
- Use cases with DTOs
- Domain services