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

6.1 KiB

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

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:

import { Chess } from 'chess.js';

const isValidFEN = (fen) => {
  try {
    const chess = new Chess(fen);
    return chess.fen() === fen;
  } catch {
    return false;
  }
};

Resources