# TODO ## 🔧 CI — cache timeout mitigation (from .gitea/logs/ review) `actions/cache@v4` times out against GitHub's cache service on this runner (`/twirp/github.actions.results.api.v1.CacheService/…` — the Gitea host has no local actions-cache configured). Restore/save retry for ~2 min per run. The checks job still passes; this is noise + risk of flaky timeouts. - [x] Remove the `actions/cache@v4` step from `checks` in `.gitea/workflows/build.yml` (Godot import takes ~4s; caching .godot is not worth the timeout risk). - [x] Add `GODOT_SILENCE_ROOT_WARNING=1` to godot steps to quiet container-as-root noise. - [ ] Push and confirm the next `.gitea/logs/` run has no `CacheService` timeouts. - [x] Optional (host admin): document in `docs/RELEASING.md` that `actions/cache` needs a Gitea `[cache.actions]` + cache server before it can be reintroduced. ## 🔴 PRIORITY — Ship downloadable builds (so the README Downloads links work) Goal: users hitting the README **Downloads** section can actually download a playable version from `https://git.allucanget.biz/zwitschi/security-game/releases`. - [x] Install Godot 4.3 export templates locally (see `docs/RELEASING.md` step 1). - [x] Run `./tools/build_releases.sh` and confirm the three artifacts appear in `build/`. - [x] Smoke-test the Linux binary launches (`./build/step-line-linux-0.1.0.x86_64 --headless --quit-after 120` → 0 script errors). - [ ] Create a Gitea release `v0.1.0` (tag matching `config/version` in `project.godot`) — **needs `GITEA_TOKEN`**: `GITEA_TOKEN=... ./tools/publish_release.sh 0.1.0`. - [ ] Verify the README Downloads links resolve: visit the release page and download one artifact. - [x] (Local workflow) `tools/publish_release.sh` exists so future releases need only a `GITEA_TOKEN`. ### Follow-ups once the first release is live - [x] CI packaging: Gitea Actions workflow (`.gitea/workflows/build.yml`) builds and uploads artifacts on tags and dispatch. ## Future Systems (design-level backlog) - [ ] Body-camera replay timeline in the shift review. - [ ] Long (10-15 minute) shift lengths and phase-based lighting (darkened evening / late phases). - [ ] Venue selection screen with a proper startup menu (keyboard cycling with `V` is implemented; a menu is the next iteration). - [ ] IDE/editor-based GUT integration when a Godot editor workflow is introduced. - [ ] Reduce RefCounted reference cycles (NPCController <-> FSM) noted in `MEMORY.md`. ## Open Polish - [ ] Add a body/wand cooldown feel: wand screening currently has no reuse penalty; consider a short per-guest scan animation. - [ ] Add an escape-to-circuit handling note: `signals` in `Strings.fmt` are positional; keep `%` placeholders stable when adding keys. ## Detailed Graphics The prototype is entirely procedural `BoxMesh` with flat `StandardMaterial3D` colors (see `src/game/world_builder.gd` and `src/game/npc_avatar.gd`). The items below upgrade it toward a finished look. **When a task needs a texture, sprite, decal, or reference image, use the integrated image-generation function to produce it** (e.g. seamless building facade, sidewalk concrete, asphalt, awning sign, wristband/ID inspection cards, HUD icons). Generated images go under `assets/` and are imported as Godot textures; keep them small (≤1024px) and power-of-two where possible. ### Environment - [ ] Replace flat facade boxes with textured materials: brick/concrete facade, glass door, awning with a readable sign (generate facade + sign textures). - [ ] Add a sidewalk concrete texture and street asphalt texture with a center-line decal (generate seamless textures). - [ ] Add a sky: `ProceduralSkyMaterial` or a generated skybox, plus a sun with soft shadows (currently a bare `DirectionalLight3D` + flat ambient). - [ ] Add simple props for depth: bollards, a trash can, a street lamp, a planter near the entrance (generate or model low-poly props). - [ ] Add a night/evening lighting pass: dim ambient, warm street-lamp point lights, and a visible flashlight cone (ties into the existing `G` flashlight toggle). ### NPCs - [ ] Replace capsule bodies with a simple humanoid rig (head/torso/limbs) or a low-poly character mesh, keeping the archetype color coding as a fallback. - [ ] Add per-archetype visual identity: distinct silhouettes or accessories (e.g. camera for influencers, delivery box, performer prop) instead of color-only. - [ ] Add a simple walk/idle animation (procedural bob or imported animation) so NPCs don't glide. - [ ] Add a facing/attention cue: NPC head turns toward the guard when `perceive_guard` reports `aware`/`near`. ### UI and feedback - [ ] Replace text-only inspection with visual artifact cards: wristband/ID/ticket images showing color, pattern, date, and event marking (generate card art). - [ ] Add HUD icons for the tone picker, wand, flashlight, and door-lock states (generate small icons). - [ ] Add a subtle screen-space vignette or color grade per escalation level to reinforce the existing color-coded escalation label. - [ ] Add a body-camera frame overlay (corner timestamp + REC indicator) to sell the evidence/recording fantasy. ### Performance and pipeline - [ ] Set up an `assets/` import convention (textures, materials, meshes) and document it in `README.md`. - [ ] Profile the crowd: ensure textured materials and props don't hurt the target frame rate around a busy entrance. - [ ] Add LOD or culling for distant NPCs/props if the crowd grows.