Battlewords / specs /basic.mdx
Surn's picture
Update version to 0.2.43 BASIC and streamlit to 1.56.0; revise documentation and requirements
2b96dfe
# Battlewords: Basic Branch Requirements
**Current Version:** 0.2.43 BASIC
**Branch:** `basic`
**Last Updated:** 2026-04-16
This document defines the “basic” version scope for Battlewords on the `basic` branch. It intentionally limits features to a minimal, default-settings single-player experience.
## Tech Stack
- Python 3.10+
- Streamlit (UI)
- matplotlib (radar)
- numpy (tick helpers)
- Pillow (GIF writer)
## In Scope
### Default gameplay only
- The game uses **default settings**.
- No user-configurable options are required.
- State remains local (Streamlit session state) as implemented in the core app flow.
### UI
- A single play experience accessible from `app.py`.
- Core UI elements required to play:
- 12×12 grid
- Reveal action
- Guess form
- Score display
- Game over summary
### Layout constraints
- No footer navigation.
- No sidebar.
## Out of Scope (Basic Branch)
### Settings page
- The app **does not need** a settings page.
- No query-param routing to a settings page is required.
- Any settings-related UI should be omitted/disabled in this branch.
### Leaderboard
- The app **does not require** a full-featured leaderboard. However, a minimal "Hall of Legends" view is allowed as a small exception to the "no leaderboard" rule.
- The Hall of Legends MUST only store runs that achieve the Legendary tier (score >= 46).
- Hall of Legends storage MUST use existing HF-backed storage patterns and a Wrdler-compatible JSON schema, as described in the requirements document.
- The Hall of Legends page MUST be accessible in development and production via `?page=hall`.
- The Hall page should remain simple and may be unlinked from primary game controls.
- No sidebar, no footer navigation, and no authentication for Hall of Legends.
### AI generation of wordlists
- The basic branch does **not** include AI-generated wordlists or HF-model-backed word generation.
- Related AI model configuration (for example `AI_MODELS`, `USE_HF_WORDS`, `HF_WORD_LIST_REPO_ID`) should be removed/unused in this branch.
### Audio (music + sound effects)
- The basic branch does **not** include background music or sound effects.
- Audio mounting via `component.html` and any audio assets/modules should be removed/unused in this branch.
### Tests
- The basic branch does **not** include tests or a `tests` folder.
## Notes
- Feature work for Settings/Leaderboard should live on non-`basic` branches.
## Basic Functions Kept
The following functions are retained in the basic branch:
- Game initialization and puzzle generation
- Word list loading and validation
- Reveal cell action
- Guess word action
- Score calculation and tier assignment
- Radar visualization
- Game over summary display
## UI Transitions and Effects
The basic branch uses:
- `CustomSpinner` for smooth loading and transition effects (New Game, initial load, Game Over/Congratulations popups).
- Streamlit CSS, markup, and `component.html` for UI styling and transition overlays.
## Codebase Constraints (Basic Branch)
### Navigation / routing
- No query-param navigation to non-game pages, except Hall of Legends.
- Remove/disable any routing paths such as `?page=settings` and `?page=leaderboard`.
- The basic branch should render the play experience and `?page=hall`.
### Word list sources
- Word lists must be loaded from local files in `battlewords/words/`.
- Do not fetch or generate word lists via Hugging Face models or other AI inference.
### Component usage
- `component.html` is allowed for UI transitions/effects (spinners, scroll-to-anchor, overlays).
- `component.html` must not be used for audio mounting in the basic branch.
## Implementation Checklist
- App starts with no errors.
- New Game transition remains smooth (uses `CustomSpinner`).
- Core gameplay works end-to-end (reveal, guess, scoring, radar, game over).
- Game Over / Congratulations popup behaves correctly and remains smooth.
- Challenge mode / share links / remote storage are removed.
- PWA support is removed.
- No audio playback occurs (no background music, no sound effects).
- No AI/HF-model-backed word list generation occurs (local wordlists only).
- Hall of Legends is reachable via `?page=hall` in development and production.
- No settings/leaderboard pages are reachable (`?page=settings` / `?page=leaderboard` disabled).
- No footer navigation and no sidebar are rendered.
Initial Proposed Prompt:
```text
You are working in the basic branch. Follow .github/copilot-instructions.md (minimal changes, preserve functionality, clear concise comments, no tests unless asked). Also follow basic.mdx requirements.
Goal: simplify the codebase to match the basic version.
Must keep:
• Core gameplay (grid reveal, guessing, scoring, radar, game over)
• CustomSpinner and CSS/markup/components.html usage for smooth transitions (initial load, New Game, Game Over popup)
• Challenge mode / share links / Remote Storage (HF) feature
• PWA support (service worker / manifest integration)
Must remove/disable from the basic codebase:
• AI generation of wordlists / HF-model-backed word generation (remove or make unused AI_MODELS, USE_HF_WORDS, HF_WORD_LIST_REPO_ID and any related code paths)
• Audio system (no background music, no sound effects; remove imports/usage of audio.py, audio assets, and any audio mounting via components.html)
Additional constraints:
• No footer and no sidebar in the UI.
• No query-param navigation for ?page=settings or ?page=leaderboard; basic should only render the play experience.
• Word lists must load only from local files in battlewords/words/.
Deliverable:
• Make the smallest set of code changes across the repo to enforce the above.
• Update app.py / ui.py routing accordingly.
• Remove now-unused modules/files only if they are truly unused after edits.
• Summarize exactly which files you changed and why.
• Validate the result against the "Implementation Checklist" section in this document.
```