# 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. ```