Restructured project from nested workspace pattern to flat single-repo layout. This eliminates redundant nesting and consolidates all project files under version control. ## Migration Summary **Before:** ``` alex/ (workspace, not versioned) ├── chess-game/ (git repo) │ ├── js/, css/, tests/ │ └── index.html └── docs/ (planning, not versioned) ``` **After:** ``` alex/ (git repo, everything versioned) ├── js/, css/, tests/ ├── index.html ├── docs/ (project documentation) ├── planning/ (historical planning docs) ├── .gitea/ (CI/CD) └── CLAUDE.md (configuration) ``` ## Changes Made ### Structure Consolidation - Moved all chess-game/ contents to root level - Removed redundant chess-game/ subdirectory - Flattened directory structure (eliminated one nesting level) ### Documentation Organization - Moved chess-game/docs/ → docs/ (project documentation) - Moved alex/docs/ → planning/ (historical planning documents) - Added CLAUDE.md (workspace configuration) - Added IMPLEMENTATION_PROMPT.md (original project prompt) ### Version Control Improvements - All project files now under version control - Planning documents preserved in planning/ folder - Merged .gitignore files (workspace + project) - Added .claude/ agent configurations ### File Updates - Updated .gitignore to include both workspace and project excludes - Moved README.md to root level - All import paths remain functional (relative paths unchanged) ## Benefits ✅ **Simpler Structure** - One level of nesting removed ✅ **Complete Versioning** - All documentation now in git ✅ **Standard Layout** - Matches open-source project conventions ✅ **Easier Navigation** - Direct access to all project files ✅ **CI/CD Compatible** - All workflows still functional ## Technical Validation - ✅ Node.js environment verified - ✅ Dependencies installed successfully - ✅ Dev server starts and responds - ✅ All core files present and accessible - ✅ Git repository functional ## Files Preserved **Implementation Files:** - js/ (3,517 lines of code) - css/ (4 stylesheets) - tests/ (87 test cases) - index.html - package.json **CI/CD Pipeline:** - .gitea/workflows/ci.yml - .gitea/workflows/release.yml **Documentation:** - docs/ (12+ documentation files) - planning/ (historical planning materials) - README.md **Configuration:** - jest.config.js, babel.config.cjs, playwright.config.js - .gitignore (merged) - CLAUDE.md 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
732 lines
14 KiB
Markdown
732 lines
14 KiB
Markdown
# Architecture Diagrams - HTML Chess Game
|
|
|
|
## System Architecture
|
|
|
|
### High-Level Component Overview
|
|
|
|
```mermaid
|
|
graph TB
|
|
UI[User Interface Layer]
|
|
GAME[Game Logic Layer]
|
|
DATA[Data Layer]
|
|
|
|
UI --> GAME
|
|
GAME --> DATA
|
|
|
|
subgraph "UI Layer"
|
|
RENDERER[BoardRenderer]
|
|
DRAGDROP[DragDropHandler]
|
|
UICTRL[UIController]
|
|
end
|
|
|
|
subgraph "Game Layer"
|
|
CHESS[ChessGame]
|
|
VALIDATOR[MoveValidator]
|
|
SPECIAL[SpecialMoves]
|
|
end
|
|
|
|
subgraph "Data Layer"
|
|
BOARD[Board]
|
|
STATE[GameState]
|
|
PIECES[Pieces]
|
|
end
|
|
|
|
RENDERER --> CHESS
|
|
DRAGDROP --> CHESS
|
|
UICTRL --> CHESS
|
|
|
|
CHESS --> BOARD
|
|
CHESS --> STATE
|
|
CHESS --> VALIDATOR
|
|
|
|
VALIDATOR --> PIECES
|
|
SPECIAL --> BOARD
|
|
```
|
|
|
|
---
|
|
|
|
## Detailed Component Diagram
|
|
|
|
```mermaid
|
|
classDiagram
|
|
class ChessGame {
|
|
+Board board
|
|
+GameState gameState
|
|
+string currentTurn
|
|
+string status
|
|
+makeMove(from, to)
|
|
+newGame()
|
|
+undo()
|
|
+redo()
|
|
+getLegalMoves(piece)
|
|
+isInCheck(color)
|
|
+resign()
|
|
}
|
|
|
|
class Board {
|
|
+Piece[][] grid
|
|
+getPiece(row, col)
|
|
+setPiece(row, col, piece)
|
|
+movePiece(from, to)
|
|
+clone()
|
|
+toFEN()
|
|
+fromFEN(fen)
|
|
+setupInitialPosition()
|
|
}
|
|
|
|
class GameState {
|
|
+Move[] moveHistory
|
|
+int currentMove
|
|
+CapturedPieces captured
|
|
+string status
|
|
+Position enPassantTarget
|
|
+int halfMoveClock
|
|
+int fullMoveNumber
|
|
+recordMove(move)
|
|
+undo()
|
|
+redo()
|
|
+toFEN()
|
|
+toPGN()
|
|
}
|
|
|
|
class Piece {
|
|
<<abstract>>
|
|
+string color
|
|
+Position position
|
|
+string type
|
|
+bool hasMoved
|
|
+getValidMoves(board)*
|
|
+isValidMove(board, to)*
|
|
+clone()
|
|
}
|
|
|
|
class Pawn {
|
|
+getValidMoves(board)
|
|
}
|
|
|
|
class Knight {
|
|
+getValidMoves(board)
|
|
}
|
|
|
|
class Bishop {
|
|
+getValidMoves(board)
|
|
}
|
|
|
|
class Rook {
|
|
+getValidMoves(board)
|
|
}
|
|
|
|
class Queen {
|
|
+getValidMoves(board)
|
|
}
|
|
|
|
class King {
|
|
+getValidMoves(board)
|
|
+canCastle(board, side)
|
|
}
|
|
|
|
class MoveValidator {
|
|
<<static>>
|
|
+isMoveLegal(board, piece, to, state)
|
|
+isKingInCheck(board, color)
|
|
+isCheckmate(board, color)
|
|
+isStalemate(board, color)
|
|
+hasAnyLegalMove(board, color)
|
|
}
|
|
|
|
class SpecialMoves {
|
|
<<static>>
|
|
+canCastle(board, king, rook)
|
|
+executeCastle(board, king, rook)
|
|
+canEnPassant(board, pawn, target, state)
|
|
+executeEnPassant(board, pawn, target)
|
|
+canPromote(pawn)
|
|
+promote(board, pawn, pieceType)
|
|
}
|
|
|
|
class BoardRenderer {
|
|
+HTMLElement boardElement
|
|
+renderBoard(board, state)
|
|
+highlightMoves(moves)
|
|
+clearHighlights()
|
|
+selectSquare(row, col)
|
|
+updateSquare(row, col, piece)
|
|
}
|
|
|
|
class DragDropHandler {
|
|
+ChessGame game
|
|
+BoardRenderer renderer
|
|
+setupEventListeners()
|
|
+onDragStart(event)
|
|
+onDrop(event)
|
|
+enable()
|
|
+disable()
|
|
}
|
|
|
|
class UIController {
|
|
+ChessGame game
|
|
+BoardRenderer renderer
|
|
+DragDropHandler dragDrop
|
|
+init()
|
|
+updateGameStatus(status)
|
|
+showPromotionDialog(callback)
|
|
+updateMoveHistory(moves)
|
|
}
|
|
|
|
ChessGame --> Board
|
|
ChessGame --> GameState
|
|
ChessGame --> MoveValidator
|
|
|
|
Board --> Piece
|
|
|
|
Piece <|-- Pawn
|
|
Piece <|-- Knight
|
|
Piece <|-- Bishop
|
|
Piece <|-- Rook
|
|
Piece <|-- Queen
|
|
Piece <|-- King
|
|
|
|
MoveValidator --> Piece
|
|
SpecialMoves --> Board
|
|
|
|
UIController --> ChessGame
|
|
UIController --> BoardRenderer
|
|
UIController --> DragDropHandler
|
|
|
|
BoardRenderer --> Board
|
|
DragDropHandler --> ChessGame
|
|
```
|
|
|
|
---
|
|
|
|
## Move Validation Flow
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
START([User Makes Move])
|
|
GET_PIECE{Piece at source?}
|
|
CHECK_TURN{Correct turn?}
|
|
VALID_MOVE{Valid for piece?}
|
|
SIMULATE[Simulate Move]
|
|
CHECK_CHECK{Leaves king in check?}
|
|
EXECUTE[Execute Move]
|
|
UPDATE_STATE[Update Game State]
|
|
SWITCH_TURN[Switch Turn]
|
|
CHECK_STATUS[Check Game Status]
|
|
END([Move Complete])
|
|
ERROR([Return Error])
|
|
|
|
START --> GET_PIECE
|
|
GET_PIECE -->|No| ERROR
|
|
GET_PIECE -->|Yes| CHECK_TURN
|
|
CHECK_TURN -->|No| ERROR
|
|
CHECK_TURN -->|Yes| VALID_MOVE
|
|
VALID_MOVE -->|No| ERROR
|
|
VALID_MOVE -->|Yes| SIMULATE
|
|
SIMULATE --> CHECK_CHECK
|
|
CHECK_CHECK -->|Yes| ERROR
|
|
CHECK_CHECK -->|No| EXECUTE
|
|
EXECUTE --> UPDATE_STATE
|
|
UPDATE_STATE --> SWITCH_TURN
|
|
SWITCH_TURN --> CHECK_STATUS
|
|
CHECK_STATUS --> END
|
|
|
|
style START fill:#90EE90
|
|
style END fill:#90EE90
|
|
style ERROR fill:#FFB6C1
|
|
style EXECUTE fill:#87CEEB
|
|
```
|
|
|
|
---
|
|
|
|
## Check Detection Algorithm
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
START([Is King In Check?])
|
|
FIND_KING[Find King Position]
|
|
LOOP_START{For each square}
|
|
GET_PIECE[Get Piece]
|
|
IS_OPPONENT{Opponent piece?}
|
|
GET_MOVES[Get Valid Moves]
|
|
CAN_ATTACK{Can attack king?}
|
|
RETURN_TRUE([Return TRUE])
|
|
RETURN_FALSE([Return FALSE])
|
|
NEXT[Next Square]
|
|
|
|
START --> FIND_KING
|
|
FIND_KING --> LOOP_START
|
|
LOOP_START -->|Yes| GET_PIECE
|
|
LOOP_START -->|No| RETURN_FALSE
|
|
GET_PIECE --> IS_OPPONENT
|
|
IS_OPPONENT -->|No| NEXT
|
|
IS_OPPONENT -->|Yes| GET_MOVES
|
|
GET_MOVES --> CAN_ATTACK
|
|
CAN_ATTACK -->|Yes| RETURN_TRUE
|
|
CAN_ATTACK -->|No| NEXT
|
|
NEXT --> LOOP_START
|
|
|
|
style RETURN_TRUE fill:#FFB6C1
|
|
style RETURN_FALSE fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## Castling Validation Flow
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
START([Can Castle?])
|
|
MOVED{King or Rook moved?}
|
|
CLEAR{Path clear?}
|
|
IN_CHECK{King in check?}
|
|
THROUGH_CHECK{Passes through check?}
|
|
CAN_CASTLE([Can Castle])
|
|
CANNOT([Cannot Castle])
|
|
|
|
START --> MOVED
|
|
MOVED -->|Yes| CANNOT
|
|
MOVED -->|No| CLEAR
|
|
CLEAR -->|No| CANNOT
|
|
CLEAR -->|Yes| IN_CHECK
|
|
IN_CHECK -->|Yes| CANNOT
|
|
IN_CHECK -->|No| THROUGH_CHECK
|
|
THROUGH_CHECK -->|Yes| CANNOT
|
|
THROUGH_CHECK -->|No| CAN_CASTLE
|
|
|
|
style CAN_CASTLE fill:#90EE90
|
|
style CANNOT fill:#FFB6C1
|
|
```
|
|
|
|
---
|
|
|
|
## UI Event Flow
|
|
|
|
```mermaid
|
|
sequenceDiagram
|
|
participant User
|
|
participant DOM
|
|
participant DragDrop
|
|
participant ChessGame
|
|
participant Board
|
|
participant Renderer
|
|
|
|
User->>DOM: Drag piece
|
|
DOM->>DragDrop: dragstart event
|
|
DragDrop->>ChessGame: getLegalMoves(piece)
|
|
ChessGame->>Board: getPiece(row, col)
|
|
Board-->>ChessGame: piece
|
|
ChessGame-->>DragDrop: legal moves
|
|
DragDrop->>Renderer: highlightMoves(moves)
|
|
Renderer->>DOM: Add CSS classes
|
|
|
|
User->>DOM: Drop piece
|
|
DOM->>DragDrop: drop event
|
|
DragDrop->>ChessGame: makeMove(from, to)
|
|
ChessGame->>Board: movePiece(from, to)
|
|
Board-->>ChessGame: result
|
|
ChessGame->>Renderer: renderBoard(board)
|
|
Renderer->>DOM: Update squares
|
|
|
|
ChessGame->>DragDrop: move result
|
|
DragDrop->>Renderer: clearHighlights()
|
|
```
|
|
|
|
---
|
|
|
|
## Data Flow Diagram
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
USER[User Input]
|
|
UI[UI Layer]
|
|
GAME[Game Logic]
|
|
DATA[Data Layer]
|
|
STORAGE[LocalStorage]
|
|
|
|
USER -->|Click/Drag| UI
|
|
UI -->|makeMove| GAME
|
|
GAME -->|Update| DATA
|
|
DATA -->|Notify| GAME
|
|
GAME -->|Render| UI
|
|
UI -->|Display| USER
|
|
|
|
GAME <-->|Save/Load| STORAGE
|
|
|
|
style USER fill:#87CEEB
|
|
style UI fill:#90EE90
|
|
style GAME fill:#FFD700
|
|
style DATA fill:#FFA07A
|
|
style STORAGE fill:#DDA0DD
|
|
```
|
|
|
|
---
|
|
|
|
## State Machine Diagram
|
|
|
|
```mermaid
|
|
stateDiagram-v2
|
|
[*] --> Active: New Game
|
|
|
|
Active --> Check: King Attacked
|
|
Check --> Active: King Safe
|
|
Check --> Checkmate: No Legal Moves
|
|
|
|
Active --> Stalemate: No Legal Moves (Not in Check)
|
|
Active --> Draw: Draw Condition Met
|
|
Active --> Resigned: Player Resigns
|
|
|
|
Checkmate --> [*]
|
|
Stalemate --> [*]
|
|
Draw --> [*]
|
|
Resigned --> [*]
|
|
|
|
Active --> Active: Valid Move
|
|
Check --> Check: Valid Move
|
|
```
|
|
|
|
---
|
|
|
|
## Piece Inheritance Hierarchy
|
|
|
|
```mermaid
|
|
graph TD
|
|
PIECE[Piece Abstract Class]
|
|
PAWN[Pawn]
|
|
KNIGHT[Knight]
|
|
BISHOP[Bishop]
|
|
ROOK[Rook]
|
|
QUEEN[Queen]
|
|
KING[King]
|
|
|
|
PIECE --> PAWN
|
|
PIECE --> KNIGHT
|
|
PIECE --> BISHOP
|
|
PIECE --> ROOK
|
|
PIECE --> QUEEN
|
|
PIECE --> KING
|
|
|
|
style PIECE fill:#FFD700
|
|
style PAWN fill:#90EE90
|
|
style KNIGHT fill:#90EE90
|
|
style BISHOP fill:#90EE90
|
|
style ROOK fill:#90EE90
|
|
style QUEEN fill:#90EE90
|
|
style KING fill:#87CEEB
|
|
```
|
|
|
|
---
|
|
|
|
## Module Dependency Graph
|
|
|
|
```mermaid
|
|
graph TD
|
|
MAIN[main.js]
|
|
GAME[ChessGame]
|
|
BOARD[Board]
|
|
STATE[GameState]
|
|
PIECES[Pieces/*]
|
|
VALIDATOR[MoveValidator]
|
|
SPECIAL[SpecialMoves]
|
|
RENDERER[BoardRenderer]
|
|
DRAGDROP[DragDropHandler]
|
|
UICTRL[UIController]
|
|
NOTATION[notation.js]
|
|
STORAGE[storage.js]
|
|
HELPERS[helpers.js]
|
|
|
|
MAIN --> GAME
|
|
MAIN --> UICTRL
|
|
|
|
GAME --> BOARD
|
|
GAME --> STATE
|
|
GAME --> VALIDATOR
|
|
|
|
BOARD --> PIECES
|
|
|
|
VALIDATOR --> PIECES
|
|
VALIDATOR --> SPECIAL
|
|
|
|
SPECIAL --> BOARD
|
|
|
|
UICTRL --> GAME
|
|
UICTRL --> RENDERER
|
|
UICTRL --> DRAGDROP
|
|
|
|
RENDERER --> BOARD
|
|
DRAGDROP --> GAME
|
|
|
|
STATE --> NOTATION
|
|
UICTRL --> STORAGE
|
|
|
|
GAME --> HELPERS
|
|
BOARD --> HELPERS
|
|
|
|
style MAIN fill:#FFD700
|
|
style GAME fill:#87CEEB
|
|
style UICTRL fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## FEN Parsing Flow
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
START([FEN String])
|
|
SPLIT[Split by Space]
|
|
POSITION[Parse Position]
|
|
TURN[Parse Turn]
|
|
CASTLE[Parse Castling Rights]
|
|
ENPASSANT[Parse En Passant]
|
|
CLOCKS[Parse Clocks]
|
|
|
|
CLEAR_BOARD[Clear Board]
|
|
PARSE_RANKS[Parse Ranks]
|
|
PLACE_PIECES[Place Pieces]
|
|
SET_STATE[Set Game State]
|
|
|
|
END([Board Configured])
|
|
|
|
START --> SPLIT
|
|
SPLIT --> POSITION
|
|
SPLIT --> TURN
|
|
SPLIT --> CASTLE
|
|
SPLIT --> ENPASSANT
|
|
SPLIT --> CLOCKS
|
|
|
|
POSITION --> CLEAR_BOARD
|
|
CLEAR_BOARD --> PARSE_RANKS
|
|
PARSE_RANKS --> PLACE_PIECES
|
|
|
|
PLACE_PIECES --> SET_STATE
|
|
TURN --> SET_STATE
|
|
CASTLE --> SET_STATE
|
|
ENPASSANT --> SET_STATE
|
|
CLOCKS --> SET_STATE
|
|
|
|
SET_STATE --> END
|
|
|
|
style START fill:#90EE90
|
|
style END fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## Render Cycle
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
TRIGGER[Trigger Render]
|
|
CLEAR[Clear Previous Highlights]
|
|
LOOP[For Each Square]
|
|
CREATE_SQUARE[Create Square Element]
|
|
STYLE_SQUARE[Apply Light/Dark Style]
|
|
GET_PIECE{Has Piece?}
|
|
CREATE_PIECE[Create Piece Element]
|
|
APPEND_PIECE[Append to Square]
|
|
APPEND_SQUARE[Append to Board]
|
|
DONE{All Squares?}
|
|
ATTACH[Attach to DOM]
|
|
END([Render Complete])
|
|
|
|
TRIGGER --> CLEAR
|
|
CLEAR --> LOOP
|
|
LOOP --> CREATE_SQUARE
|
|
CREATE_SQUARE --> STYLE_SQUARE
|
|
STYLE_SQUARE --> GET_PIECE
|
|
GET_PIECE -->|Yes| CREATE_PIECE
|
|
CREATE_PIECE --> APPEND_PIECE
|
|
APPEND_PIECE --> APPEND_SQUARE
|
|
GET_PIECE -->|No| APPEND_SQUARE
|
|
APPEND_SQUARE --> DONE
|
|
DONE -->|No| LOOP
|
|
DONE -->|Yes| ATTACH
|
|
ATTACH --> END
|
|
|
|
style END fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## Performance Optimization Points
|
|
|
|
```mermaid
|
|
graph LR
|
|
INPUT[User Input]
|
|
CACHE1{Move Cache Valid?}
|
|
CALC1[Calculate Moves]
|
|
STORE1[Store in Cache]
|
|
VALIDATE[Validate Move]
|
|
|
|
RENDER[Render Board]
|
|
CACHE2{DOM Unchanged?}
|
|
UPDATE[Update DOM]
|
|
BATCH[Batch Updates]
|
|
FRAGMENT[Document Fragment]
|
|
ATTACH[Single Attach]
|
|
|
|
INPUT --> CACHE1
|
|
CACHE1 -->|No| CALC1
|
|
CALC1 --> STORE1
|
|
STORE1 --> VALIDATE
|
|
CACHE1 -->|Yes| VALIDATE
|
|
|
|
VALIDATE --> RENDER
|
|
RENDER --> CACHE2
|
|
CACHE2 -->|No| UPDATE
|
|
UPDATE --> BATCH
|
|
BATCH --> FRAGMENT
|
|
FRAGMENT --> ATTACH
|
|
|
|
style CACHE1 fill:#FFD700
|
|
style CACHE2 fill:#FFD700
|
|
style FRAGMENT fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## Error Handling Flow
|
|
|
|
```mermaid
|
|
flowchart TD
|
|
ACTION[User Action]
|
|
TRY[Try Execute]
|
|
ERROR{Error?}
|
|
TYPE{Error Type}
|
|
|
|
INVALID_MOVE[Invalid Move]
|
|
WRONG_TURN[Wrong Turn]
|
|
NO_PIECE[No Piece]
|
|
IN_CHECK[Leaves Check]
|
|
|
|
LOG[Log Error]
|
|
NOTIFY[Notify User]
|
|
HIGHLIGHT[Highlight Issue]
|
|
ROLLBACK[Rollback State]
|
|
|
|
SUCCESS[Execute Success]
|
|
UPDATE[Update UI]
|
|
END([Complete])
|
|
|
|
ACTION --> TRY
|
|
TRY --> ERROR
|
|
ERROR -->|Yes| TYPE
|
|
ERROR -->|No| SUCCESS
|
|
|
|
TYPE -->|Invalid| INVALID_MOVE
|
|
TYPE -->|Turn| WRONG_TURN
|
|
TYPE -->|Missing| NO_PIECE
|
|
TYPE -->|Check| IN_CHECK
|
|
|
|
INVALID_MOVE --> LOG
|
|
WRONG_TURN --> LOG
|
|
NO_PIECE --> LOG
|
|
IN_CHECK --> LOG
|
|
|
|
LOG --> NOTIFY
|
|
NOTIFY --> HIGHLIGHT
|
|
HIGHLIGHT --> ROLLBACK
|
|
ROLLBACK --> END
|
|
|
|
SUCCESS --> UPDATE
|
|
UPDATE --> END
|
|
|
|
style ERROR fill:#FFB6C1
|
|
style SUCCESS fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
## Testing Strategy Diagram
|
|
|
|
```mermaid
|
|
graph TB
|
|
CODE[Application Code]
|
|
|
|
UNIT[Unit Tests]
|
|
INTEGRATION[Integration Tests]
|
|
E2E[Manual Testing]
|
|
|
|
PIECES[Piece Movement]
|
|
VALIDATION[Move Validation]
|
|
SPECIAL[Special Moves]
|
|
|
|
SCENARIOS[Game Scenarios]
|
|
STATE[State Management]
|
|
|
|
BROWSER[Browser Testing]
|
|
PERF[Performance]
|
|
ACCESS[Accessibility]
|
|
|
|
CODE --> UNIT
|
|
CODE --> INTEGRATION
|
|
CODE --> E2E
|
|
|
|
UNIT --> PIECES
|
|
UNIT --> VALIDATION
|
|
UNIT --> SPECIAL
|
|
|
|
INTEGRATION --> SCENARIOS
|
|
INTEGRATION --> STATE
|
|
|
|
E2E --> BROWSER
|
|
E2E --> PERF
|
|
E2E --> ACCESS
|
|
|
|
style CODE fill:#FFD700
|
|
style UNIT fill:#90EE90
|
|
style INTEGRATION fill:#87CEEB
|
|
style E2E fill:#FFA07A
|
|
```
|
|
|
|
---
|
|
|
|
## Deployment Pipeline
|
|
|
|
```mermaid
|
|
flowchart LR
|
|
DEV[Development]
|
|
TEST[Run Tests]
|
|
LINT[Lint Code]
|
|
BUILD[Build]
|
|
OPTIMIZE[Optimize]
|
|
DEPLOY[Deploy]
|
|
VERIFY[Verify]
|
|
|
|
DEV --> TEST
|
|
TEST --> LINT
|
|
LINT --> BUILD
|
|
BUILD --> OPTIMIZE
|
|
OPTIMIZE --> DEPLOY
|
|
DEPLOY --> VERIFY
|
|
|
|
style DEV fill:#87CEEB
|
|
style TEST fill:#FFD700
|
|
style DEPLOY fill:#90EE90
|
|
style VERIFY fill:#90EE90
|
|
```
|
|
|
|
---
|
|
|
|
These diagrams provide visual representations of:
|
|
|
|
1. **System Architecture** - Overall structure
|
|
2. **Component Relationships** - Class diagram
|
|
3. **Move Validation** - Flow logic
|
|
4. **Check Detection** - Algorithm flow
|
|
5. **Castling** - Special move validation
|
|
6. **UI Events** - Sequence diagram
|
|
7. **Data Flow** - Information movement
|
|
8. **State Machine** - Game states
|
|
9. **Inheritance** - Piece hierarchy
|
|
10. **Dependencies** - Module imports
|
|
11. **FEN Parsing** - Data import
|
|
12. **Rendering** - UI update cycle
|
|
13. **Performance** - Optimization points
|
|
14. **Error Handling** - Error flow
|
|
15. **Testing** - Test strategy
|
|
16. **Deployment** - Release pipeline
|
|
|
|
Use these diagrams as reference during implementation to understand component relationships and data flow.
|