mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-08 03:10:26 +00:00
parent
03d91be277
commit
ab1b88861f
7 changed files with 1547 additions and 23 deletions
409
run.json
409
run.json
File diff suppressed because one or more lines are too long
1040
stages/002-plan_app@1/diff.patch
Normal file
1040
stages/002-plan_app@1/diff.patch
Normal file
File diff suppressed because it is too large
Load diff
52
stages/002-plan_app@1/response.md
Normal file
52
stages/002-plan_app@1/response.md
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
I have successfully implemented a terminal-based Spider solitaire game in Python using the standard library `curses` module, fully decoupled from the UI rendering layer to support both highly interactive terminal gameplay and non-interactive headless smoke testing.
|
||||
|
||||
### Deliverables Created
|
||||
1. **Implementation Plan (`.ai/card-game-fast-plan.md`)**: A detailed and concise document describing our architecture, rule validation, terminal rendering setup, input handling, and test strategy.
|
||||
2. **Core Game Logic (`card-game-app/game.py`)**: Separate from the UI, implementing card representations, the full game loop state, deepcopy-based multi-step Undo/Redo stack, sequence and placement validation, run clearing, and stock dealing.
|
||||
3. **Interactive Curses UI (`card-game-app/ui.py`)**: A rich interactive standard `curses` interface featuring Red/White colors for suits, highlighted sequence selections, scrolling within columns, and full feedback status message prompts.
|
||||
4. **Main Entry Point (`card-game-app/main.py`)**: Parses CLI args to run the full interactive mode (with `--suits` count support) or the non-interactive verification mode (with `--smoke`).
|
||||
5. **Unit Tests (`card-game-app/test_game.py`)**: Implements standard unit tests for all features of the `SpiderGame` logic.
|
||||
6. **Documentation (`card-game-app/README.md`)**: User guide, keyboard shortcuts, and testing instructions.
|
||||
7. **Status File (`status.json`)**: Declaring `outcome=succeeded`.
|
||||
|
||||
---
|
||||
|
||||
### Verification and Test Runs
|
||||
|
||||
**1. Running Non-interactive Smoke Verification:**
|
||||
```bash
|
||||
python3 card-game-app/main.py --smoke
|
||||
```
|
||||
*Output:*
|
||||
```text
|
||||
====================================================
|
||||
Running Spider Solitaire Smoke Test / Verification...
|
||||
====================================================
|
||||
Initializing 1-Suit Spider game...
|
||||
[PASSED] Game initialized correctly with 54 cards in tableau and 50 in stock.
|
||||
Verifying sequence validation rules...
|
||||
[PASSED] Sequence validation rules are correct.
|
||||
Simulating a controlled card move and undo...
|
||||
[PASSED] Card move and undo simulation successful.
|
||||
Testing stock dealing empty-column constraint...
|
||||
[PASSED] Stock dealing empty-column constraints successfully validated.
|
||||
Verifying run-clearing logic...
|
||||
[PASSED] Run-clearing logic successfully validated.
|
||||
|
||||
====================================================
|
||||
ALL SMOKE TESTS PASSED!
|
||||
====================================================
|
||||
```
|
||||
|
||||
**2. Running the Full Unit Test Suite:**
|
||||
```bash
|
||||
PYTHONPATH=card-game-app python3 -m unittest card-game-app/test_game.py
|
||||
```
|
||||
*Output:*
|
||||
```text
|
||||
.......
|
||||
----------------------------------------------------------------------
|
||||
Ran 7 tests in 0.001s
|
||||
|
||||
OK
|
||||
```
|
||||
6
stages/002-plan_app@1/status.json
Normal file
6
stages/002-plan_app@1/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"outcome": "succeeded",
|
||||
"notes": "Stage completed: plan_app",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-06-05T00:00:09.587325Z"
|
||||
}
|
||||
27
stages/003-implement_app@1/prompt.md
Normal file
27
stages/003-implement_app@1/prompt.md
Normal file
|
|
@ -0,0 +1,27 @@
|
|||
Goal: Build a terminal-based Spider solitaire game in Python
|
||||
|
||||
## Completed stages
|
||||
- **plan_app**: succeeded
|
||||
- Model: gemini-3.5-flash, 126.8k tokens in / 22.7k out
|
||||
- Files: /home/daytona/workspace/fabro/.ai/card-game-fast-plan.md, /home/daytona/workspace/fabro/card-game-app/README.md, /home/daytona/workspace/fabro/card-game-app/game.py, /home/daytona/workspace/fabro/card-game-app/main.py, /home/daytona/workspace/fabro/card-game-app/test_game.py, /home/daytona/workspace/fabro/card-game-app/ui.py, /home/daytona/workspace/fabro/status.json
|
||||
|
||||
|
||||
Read .ai/card-game-fast-plan.md.
|
||||
|
||||
Build the complete app under card-game-app/ in one focused pass:
|
||||
- pyproject.toml
|
||||
- main.py
|
||||
- src/card_game_tui/ package
|
||||
- tests/ package
|
||||
- README.md
|
||||
|
||||
Implement:
|
||||
- Card, Deck, Pile, or equivalent game-state types
|
||||
- Requested game rules: initial setup/deal where applicable, move/action validation, auto-complete or helper actions where applicable, win/loss condition, undo
|
||||
- Curses UI with card rendering, board layout, keyboard input, move/action selection, and help text
|
||||
- --smoke mode that imports the app, creates a game, renders a text snapshot or summary, and exits without curses interaction
|
||||
|
||||
Run:
|
||||
cd card-game-app && python3 -m pytest tests/ -v && python3 -m py_compile main.py src/card_game_tui/*.py && python3 main.py --smoke
|
||||
|
||||
Write status.json at workspace root: outcome=succeeded if the app builds, tests pass, and smoke mode works, outcome=failed with failure_reason otherwise.
|
||||
5
stages/003-implement_app@1/provider_used.json
Normal file
5
stages/003-implement_app@1/provider_used.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"mode": "agent",
|
||||
"provider": "gemini",
|
||||
"model": "gemini-3.5-flash"
|
||||
}
|
||||
31
stages/003-implement_app@1/response.md
Normal file
31
stages/003-implement_app@1/response.md
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
I have successfully built and structured the terminal-based **Spider Solitaire** game in Python under the `card-game-app/` directory according to your specifications.
|
||||
|
||||
### Summary of Accomplishments
|
||||
|
||||
1. **Structured Package Layout**:
|
||||
- Reorganized game and UI modules under `card-game-app/src/card_game_tui/`.
|
||||
- Setup `card-game-app/tests/` containing pytest-compatible unit tests.
|
||||
- Configured `card-game-app/pyproject.toml` with `pytest` configurations (specifically, `pythonpath = ["src"]` to handle relative and absolute module paths effortlessly).
|
||||
- Created clean, executable, and robust `main.py` entry point.
|
||||
|
||||
2. **Game Logic & Constraints (`game.py`)**:
|
||||
- Handles standard **Spider Solitaire** setups for 1, 2, or 4 suits with exactly 104 cards.
|
||||
- Fully supports moving single or multiple same-suit decreasing sequences.
|
||||
- Tracks completed runs (from King down to Ace) and clears them automatically from the tableau to the foundation, auto-revealing/flipping facedown cards.
|
||||
- Restricts stock deals when there are empty columns on the board.
|
||||
- Implements deep history state management for the **Undo** action using custom snapshot clones.
|
||||
|
||||
3. **Responsive Curses UI (`ui.py`)**:
|
||||
- Features rich text-based card rendering, color schemes (red for Hearts/Diamonds, default/white for Spades/Clubs), and beautiful board structure.
|
||||
- Offers interactive sequence-splitting selection using **Up/Down** arrows, moving cards with **Left/Right** arrows, column-jumping using **0-9** keys, and **Undo** with **U/u**.
|
||||
|
||||
4. **Robust Automation & Verification Mode (`--smoke`)**:
|
||||
- Added a highly informative headless smoke simulation that boots the game engine, performs test moves, simulates deal/undo constraints, runs completed-run clears, and outputs a mock console visualizer without initiating curses mode.
|
||||
|
||||
### Validation Commands Run
|
||||
All tests pass, code compiles perfectly without warnings or errors, and the smoke test executes successfully:
|
||||
```bash
|
||||
cd card-game-app && python3 -m pytest tests/ -v && python3 -m py_compile main.py src/card_game_tui/*.py && python3 main.py --smoke
|
||||
```
|
||||
|
||||
The game's outcome state has been successfully updated in `/home/daytona/workspace/fabro/status.json`.
|
||||
Loading…
Add table
Reference in a new issue