architecture-compliance
Architecture Compliance Checker
Automatically verify code compliance with Tetris project architecture rules.
Prohibited Patterns ❌
1. Classes and Enums
// ❌ Prohibited
class GameState { }
enum Direction { UP, DOWN, LEFT, RIGHT }
// ✅ Required
type GameState = { /* ... */ }
type Direction = 'UP' | 'DOWN' | 'LEFT' | 'RIGHT'
2. any Type
// ❌ Prohibited
function process(data: any) { }
// ✅ Required
function process(data: unknown) {
if (isValidData(data)) {
// Type-safe processing
}
}
3. Non-null Assertion (!)
// ❌ Prohibited
const value = optional!.property
// ✅ Required
const value = optional?.property
if (optional) {
const value = optional.property
}
4. Hardcoded User-facing Strings
// ❌ Prohibited
<button>Start Game</button>
// ✅ Required
<button>{t('game.start')}</button>
5. Interface in React Components
// ❌ Prohibited (in React components)
interface Props {
value: string
}
// ✅ Required
type Props = {
value: string
}
6. External Imports (outside /src)
// ❌ Prohibited
import { util } from '../../../utils'
// ✅ Required
import { util } from '@/utils' // Cross-directory
import { util } from './utils' // Same directory
Required Patterns ✅
1. Functional Programming
// ✅ Pure functions preferred
export const calculateScore = (params: ScoreParams): number => {
// Pure function logic
}
// ❌ Classes not allowed
class ScoreCalculator { }
2. Result<T, E> Pattern (Game Logic)
// ✅ Required for game logic
type Result<T, E> = { ok: true; value: T } | { ok: false; error: E }
export const placePiece = (
board: Board,
piece: Piece,
position: Position
): Result<Board, PlacementError> => {
if (!isValidPosition(board, piece, position)) {
return { ok: false, error: 'INVALID_POSITION' }
}
return { ok: true, value: updatedBoard }
}
3. Proper Import Conventions
// ✅ 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
// ✅ All UI strings use i18n
import { useTranslation } from 'react-i18next'
const { t } = useTranslation()
return <div>{t('game.title')}</div>
6. useId() for Dynamic IDs
// ❌ Static IDs
<label htmlFor="game-input">
// ✅ Dynamic IDs
const id = useId()
<label htmlFor={id}>
Compliance Check Process
1. Automated Detection
# Check for prohibited classes
rg "^class\s+\w+" src/
# Check for enums
rg "^enum\s+\w+" src/
# Check for any types
rg ":\s*any(\s|;|,|\))" src/
# Check for non-null assertions
rg "\!\." src/
# Check for hardcoded strings
rg '"[A-Z][a-zA-Z\s]{3,}"' src/ui/
2. Manual Review Checklist
- No classes or enums
- No
anytypes - No non-null assertions (
!) - All UI strings use i18n
- Game logic uses Result<T, E>
- Imports follow
@/or./conventions - Tests are co-located
- Type aliases instead of interfaces in React
When This Skill Activates
- "Review this code"
- "Check if this follows the architecture"
- "Is this implementation correct?"
- "Refactor this to match our patterns"
- "Validate this against our rules"
- "Does this comply with our standards?"
Quick Reference
This document contains all prohibited and required patterns inline above.
See .claude/rules/ for additional architectural guidelines.
More from sakataka/tetris-game2
i18n-completeness
Comprehensive i18n consistency check with dynamic pattern detection and hardcoded string analysis. Use when working with translations, localization, i18n keys, or when the user mentions translation issues, missing keys, or language support. Auto-triggers on phrases like "check translations", "i18n consistency", "localization issues", or "translation keys".
8tdd-workflow
Test-driven development guidance for Tetris game logic. Use when writing tests, fixing test failures, improving test coverage, or implementing game mechanics. Auto-triggers on phrases like "write a test", "test this function", "improve coverage", "fix failing tests", or "add game logic". Emphasizes Result<T,E> pattern and property-based testing with fast-check.
7typescript-strict
Enforce TypeScript strict mode practices and type safety in Tetris codebase. Use when writing game logic, handling errors, improving type safety, or fixing type errors. Auto-triggers on phrases like "fix type errors", "improve type safety", "handle this error", or "make this type-safe". Focuses on Result<T,E> pattern, proper type guards, and avoiding type assertions.
7react-component-design
Design React components following Tetris architecture guidelines. Use when creating new components, refactoring components, optimizing performance, or improving component structure. Auto-triggers on phrases like "create a component", "refactor this component", "optimize rendering", or "improve component design". Emphasizes component consolidation, unified patterns, and efficient hook usage.
6build-pipeline
Execute complete build pipeline with dead code detection, formatting, linting, type checking, testing, and production build. Use when the user mentions building, running the full pipeline, checking code quality, or preparing for deployment. Auto-triggers on phrases like "build the project", "run all checks", "prepare for production", or "validate code quality".
5