--- 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