Files
Stefan 8ed402bbe0 feat: improve opening trainer flow and add deviation dialog
- Add tutor message guardrail to prevent rapid-fire messages
  - Track last message by move index
  - Wait for both player and opponent moves before speaking
  - Speak immediately when player deviates from theory

- Add deviation dialog with three options:
  - Continue Playing (Start Game) - transitions to game mode
  - Undo & Return to Opening - returns to theory
  - Explore This Variation - continues off-book practice

- Implement smooth game mode transition:
  - Pass opening context from trainer to game
  - Tutor welcomes player with context about their study
  - Computer makes first move if needed in starting position

- Fix generate-test-fixtures script:
  - Add safety check to prevent overwriting real data
  - Restore full opening database (12,379 openings)
  - Rebuild move index (12,377 sequences)
  - Add clear warnings about test fixtures

- Update ChessGame to accept openingContext prop
- Update Tutor to display contextual greeting in game mode

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-08 15:05:05 +01:00

48 lines
1.4 KiB
JSON

{
"rn1qkbnr/ppp2ppp/8/3p4/5p2/6PB/PPPPP2P/RNBQK2R w KQkq - 0 5": {
"src": "eco_tsv",
"eco": "A00",
"moves": "1. Nh3 d5 2. g3 e5 3. f4 Bxh3 4. Bxh3 exf4",
"name": "Amar Gambit"
},
"rnbqkbnr/pppppppp/8/8/8/7N/PPPPPPPP/RNBQKB1R b KQkq - 1 1": {
"src": "eco_tsv",
"eco": "A00",
"moves": "1. Nh3",
"name": "Amar Opening",
"scid": "A00g",
"aliases": {
"scid": "Amar/Paris Opening",
"eco_wikip": "Irregular Openings: Amar Opening",
"ct": "Amar Opening, General",
"chessGraph": "Amar; Paris Opening",
"chronos": "Amar (Paris) opening",
"icsbot": "Amar; Paris Opening "
}
},
"rn1qkbnr/ppp2ppp/8/3p4/8/6PB/PPPPP3/RNBQ1RK1 b kq - 0 6": {
"src": "eco_tsv",
"eco": "A00",
"moves": "1. Nh3 d5 2. g3 e5 3. f4 Bxh3 4. Bxh3 exf4 5. O-O fxg3 6. hxg3",
"name": "Amar Opening: Paris Gambit, Gent Gambit",
"aliases": {
"ct": "Amar Opening, Gent Gambit"
}
},
"rnbqkbnr/ppp2ppp/8/3pp3/5P2/6PN/PPPPP2P/RNBQKB1R b KQkq - 0 3": {
"src": "eco_tsv",
"eco": "A00",
"moves": "1. Nh3 d5 2. g3 e5 3. f4",
"name": "Amar Opening: Paris Gambit",
"scid": "A00g",
"aliases": {
"scid": "Amar: Paris Gambit"
}
},
"r1bqkb1r/ppp2ppp/2np1n2/4p3/2P5/1PN1P3/P2P1PPP/R1BQKBNR w KQkq - 1 5": {
"src": "eco_tsv",
"eco": "A00",
"moves": "1. e3 e5 2. c4 d6 3. Nc3 Nc6 4. b3 Nf6",
"name": "Amsterdam Attack"
}
}