Files
security-game/TODO.md
T
zwitschi 94b7646dce Record CI cache mitigation results and ignore runner logs
- Mark cache-timeout fix verified (run 1090: zero CacheService lines,
  54/54 tests, job succeeded)
- Ignore .gitea/logs/ (runner writes logs into the checkout)
- Leave collaborator's radio-easter-egg changes in the working tree
  (strings.en.json, game_manager.gd) uncommitted for review
2026-10-31 13:16:34 +01:00

5.4 KiB

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.

  • 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).
  • 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 (run 1090: 0 cache lines — previously ~12; 54/54 tests, job succeeded).
  • Optional (host admin): document in docs/RELEASING.md that actions/cache needs a Gitea [cache.actions] + cache server before it can be reintroduced.

Goal: users hitting the README Downloads section can actually download a playable version from https://git.allucanget.biz/zwitschi/security-game/releases.

  • Install Godot 4.3 export templates locally (see docs/RELEASING.md step 1).
  • Run ./tools/build_releases.sh and confirm the three artifacts appear in build/.
  • 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.
  • (Local workflow) tools/publish_release.sh exists so future releases need only a GITEA_TOKEN.

Follow-ups once the first release is live

  • 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.