Christoph Wagner 5ad0700b41 refactor: Consolidate repository structure - flatten from workspace pattern
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>
2025-11-23 10:05:26 +01:00

296 lines
6.1 KiB
Markdown

# Chess Position Test Data
This directory contains FEN (Forsyth-Edwards Notation) strings for various chess positions used in testing.
## FEN Format
FEN notation describes a chess position using 6 fields:
1. Piece placement (from white's perspective, rank 8 to rank 1)
2. Active color (w = white, b = black)
3. Castling availability (KQkq)
4. En passant target square
5. Halfmove clock (for 50-move rule)
6. Fullmove number
Example: `rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1`
## Available Positions
### Initial Position
**File**: `initial-position.fen`
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
```
**Description**: Standard starting position
---
### Checkmate Positions
#### Fool's Mate
**File**: `fools-mate.fen`
```
rnb1kbnr/pppp1ppp/8/4p3/6Pq/5P2/PPPPP2P/RNBQKBNR w KQkq - 1 3
```
**Description**: Shortest possible checkmate (2 moves)
#### Scholar's Mate
**File**: `scholars-mate.fen`
```
r1bqkb1r/pppp1Qpp/2n2n2/4p3/2B1P3/8/PPPP1PPP/RNB1K1NR b KQkq - 0 4
```
**Description**: Four-move checkmate pattern
#### Back Rank Mate
**File**: `back-rank-mate.fen`
```
6k1/5ppp/8/8/8/8/5PPP/4R1K1 b - - 0 1
```
**Description**: Classic back rank mate pattern
#### Smothered Mate
**File**: `smothered-mate.fen`
```
5rk1/5ppp/8/8/8/8/5PPP/4R1K1 b - - 0 1
```
**Description**: King trapped by own pieces
---
### Stalemate Positions
#### Basic Stalemate
**File**: `basic-stalemate.fen`
```
k7/8/1Q6/8/8/8/8/7K b - - 0 1
```
**Description**: Black king has no legal moves but not in check
#### Pawn Stalemate
**File**: `pawn-stalemate.fen`
```
7k/5K2/6P1/8/8/8/8/8 b - - 0 1
```
**Description**: Stalemate with pawn blockage
---
### Special Move Positions
#### En Passant Available
**File**: `en-passant-available.fen`
```
rnbqkbnr/ppp1pppp/8/3pP3/8/8/PPPP1PPP/RNBQKBNR w KQkq d6 0 2
```
**Description**: White can capture en passant on d6
#### Castling Positions
**File**: `castling-kingside.fen`
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQK2R w KQkq - 0 1
```
**Description**: White can castle kingside
**File**: `castling-queenside.fen`
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/R3KBNR w KQkq - 0 1
```
**Description**: White can castle queenside
**File**: `castling-both.fen`
```
r3k2r/pppppppp/8/8/8/8/PPPPPPPP/R3K2R w KQkq - 0 1
```
**Description**: Both sides can castle both ways
#### Pawn Promotion
**File**: `pawn-promotion.fen`
```
4k3/P7/8/8/8/8/8/4K3 w - - 0 1
```
**Description**: White pawn ready to promote
---
### Complex Middlegame Positions
#### Italian Game
**File**: `italian-game.fen`
```
r1bqkbnr/pppp1ppp/2n5/4p3/2B1P3/5N2/PPPP1PPP/RNBQK2R b KQkq - 3 3
```
**Description**: Classic Italian opening position
#### Sicilian Defense
**File**: `sicilian-defense.fen`
```
rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
```
**Description**: Sicilian Defense after 1.e4 c5
#### Queen's Gambit
**File**: `queens-gambit.fen`
```
rnbqkbnr/ppp1pppp/8/3p4/2PP4/8/PP2PPPP/RNBQKBNR b KQkq c3 0 2
```
**Description**: Queen's Gambit position
---
### Endgame Positions
#### King and Queen vs King
**File**: `kq-vs-k.fen`
```
8/8/8/8/8/3k4/3Q4/3K4 w - - 0 1
```
**Description**: Basic queen endgame
#### King and Rook vs King
**File**: `kr-vs-k.fen`
```
8/8/8/8/8/3k4/3R4/3K4 w - - 0 1
```
**Description**: Basic rook endgame
#### Pawn Endgame
**File**: `pawn-endgame.fen`
```
8/5k2/5P2/5K2/8/8/8/8 w - - 0 1
```
**Description**: King and pawn vs king
#### Opposite Color Bishops
**File**: `opposite-bishops.fen`
```
8/5k2/8/3b4/8/8/3B4/5K2 w - - 0 1
```
**Description**: Bishops on opposite colors (often drawn)
---
### Edge Cases
#### Three-Fold Repetition Setup
**File**: `threefold-setup.fen`
```
r1bqkb1r/pppp1ppp/2n2n2/1B2p3/4P3/5N2/PPPP1PPP/RNBQK2R w KQkq - 4 4
```
**Description**: Position for testing threefold repetition
#### Fifty-Move Rule
**File**: `fifty-move-rule.fen`
```
8/8/8/8/8/3k4/3Q4/3K4 w - - 99 100
```
**Description**: Near fifty-move rule threshold
#### Insufficient Material (KB vs K)
**File**: `insufficient-kb-vs-k.fen`
```
8/8/8/8/8/3k4/3B4/3K4 w - - 0 1
```
**Description**: Draw due to insufficient material
#### Insufficient Material (KN vs K)
**File**: `insufficient-kn-vs-k.fen`
```
8/8/8/8/8/3k4/3N4/3K4 w - - 0 1
```
**Description**: Draw due to insufficient material
---
### Famous Game Positions
#### Immortal Game (Anderssen vs Kieseritzky, 1851)
**File**: `immortal-game-final.fen`
```
r1b1kb1r/p2pqppp/5n2/1p2p3/2B1P3/1Q6/PPPPNPPP/RNB1K2R w KQkq - 0 1
```
**Description**: Position before the famous sacrifice
#### Opera Game (Morphy vs Duke of Brunswick, 1858)
**File**: `opera-game-final.fen`
```
2kr4/ppp2pp1/4p3/4b3/2B5/2P2Q2/P4PPP/2KR4 b - - 0 1
```
**Description**: Famous tactical position
---
### Test-Specific Positions
#### All Pieces Present
**File**: `all-pieces.fen`
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
```
**Description**: For testing piece rendering
#### Empty Board (only kings)
**File**: `empty-board.fen`
```
4k3/8/8/8/8/8/8/4K3 w - - 0 1
```
**Description**: Minimal valid position
#### Maximum Pieces
**File**: `max-pieces.fen`
```
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
```
**Description**: All 32 pieces on board
#### Piece Movement Tests
**File**: `piece-movement-test.fen`
```
8/8/8/3p1p2/2pNPp2/3p1p2/8/8 w - - 0 1
```
**Description**: Knight surrounded by enemy pawns
---
## Usage in Tests
```javascript
import { loadFEN } from '../utils/fixtures';
test('Fool\'s Mate detection', () => {
const position = loadFEN('fools-mate');
const chess = new Chess(position);
expect(chess.isCheckmate()).toBe(true);
});
```
## Adding New Positions
1. Create a new `.fen` file
2. Validate FEN using chess.js or online validator
3. Add description to this README
4. Create corresponding test cases
5. Document expected behavior
## FEN Validation
To validate FEN strings:
```javascript
import { Chess } from 'chess.js';
const isValidFEN = (fen) => {
try {
const chess = new Chess(fen);
return chess.fen() === fen;
} catch {
return false;
}
};
```
## Resources
- FEN Notation: https://en.wikipedia.org/wiki/Forsyth%E2%80%93Edwards_Notation
- Chess.js Library: https://github.com/jhlywa/chess.js
- FEN Validator: https://www.chess.com/analysis