---
name: architecture-compliance
description: Verify Tetris architecture compliance with coding rules and design patterns. Use when reviewing code, implementing features, refactoring, or validating architectural decisions. Auto-triggers on phrases like "review this code", "check architecture", "is this correct?", "refactor this", or "implement feature". Checks for prohibited patterns (classes, enums, any types, hardcoded strings) and required patterns (functional programming, Result type, proper imports).
allowed-tools: Read, Grep, Glob
---
# Architecture Compliance Checker
Automatically verify code compliance with Tetris project architecture rules.
## Prohibited Patterns ❌
### 1. Classes and Enums
```typescript
// ❌ Prohibited
class GameState { }
enum Direction { UP, DOWN, LEFT, RIGHT }
// ✅ Required
type GameState = { /* ... */ }
type Direction = 'UP' | 'DOWN' | 'LEFT' | 'RIGHT'
```
### 2. `any` Type
```typescript
// ❌ Prohibited
function process(data: any) { }
// ✅ Required
function process(data: unknown) {
if (isValidData(data)) {
// Type-safe processing
}
}
```
### 3. Non-null Assertion (`!`)
```typescript
// ❌ Prohibited
const value = optional!.property
// ✅ Required
const value = optional?.property
if (optional) {
const value = optional.property
}
```
### 4. Hardcoded User-facing Strings
```typescript
// ❌ Prohibited
// ✅ Required
```
### 5. Interface in React Components
```typescript
// ❌ Prohibited (in React components)
interface Props {
value: string
}
// ✅ Required
type Props = {
value: string
}
```
### 6. External Imports (outside `/src`)
```typescript
// ❌ Prohibited
import { util } from '../../../utils'
// ✅ Required
import { util } from '@/utils' // Cross-directory
import { util } from './utils' // Same directory
```
## Required Patterns ✅
### 1. Functional Programming
```typescript
// ✅ Pure functions preferred
export const calculateScore = (params: ScoreParams): number => {
// Pure function logic
}
// ❌ Classes not allowed
class ScoreCalculator { }
```
### 2. Result Pattern (Game Logic)
```typescript
// ✅ Required for game logic
type Result = { ok: true; value: T } | { ok: false; error: E }
export const placePiece = (
board: Board,
piece: Piece,
position: Position
): Result => {
if (!isValidPosition(board, piece, position)) {
return { ok: false, error: 'INVALID_POSITION' }
}
return { ok: true, value: updatedBoard }
}
```
### 3. Proper Import Conventions
```typescript
// ✅ Cross-directory imports
import { Board } from '@/game/board'
import { Piece } from '@/game/pieces'
// ✅ Same-directory imports
import { helper } from './helper'
import { utils } from './utils'
```
### 4. Co-located Tests
```
src/game/
├── board.ts
├── board.test.ts # ✅ Co-located
├── pieces.ts
└── pieces.test.ts # ✅ Co-located
```
### 5. Type-safe i18n
```typescript
// ✅ All UI strings use i18n
import { useTranslation } from 'react-i18next'
const { t } = useTranslation()
return {t('game.title')}
```
### 6. `useId()` for Dynamic IDs
```typescript
// ❌ Static IDs