- Drop actions/cache@v4 from the checks job: the Gitea runner cannot reach GitHub's cache service (/twirp/...CacheService timeouts, ~2min retries); Godot import is fast enough without it. Add GODOT_SILENCE_ROOT_WARNING=1. - Document the cache situation and re-enable path in docs/RELEASING.md - VenueScenario.door_staff_line(context, rng): seeded-random venue lines - GameManager logs id/ticket/wand-check, refusal, and prohibited-item lines from the venue scenario (Joke Shop flavor) during inspection/screening - Test coverage: all Joke Shop contexts, unknown contexts, empty venues, deterministic seeded picks (54 tests pass)
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@v4step fromchecksin.gitea/workflows/build.yml(Godot import takes ~4s; caching .godot is not worth the timeout risk). - Add
GODOT_SILENCE_ROOT_WARNING=1to godot steps to quiet container-as-root noise. - Push and confirm the next
.gitea/logs/run has noCacheServicetimeouts. - Optional (host admin): document in
docs/RELEASING.mdthatactions/cacheneeds 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.
- Install Godot 4.3 export templates locally (see
docs/RELEASING.mdstep 1). - Run
./tools/build_releases.shand confirm the three artifacts appear inbuild/. - 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 matchingconfig/versioninproject.godot) — needsGITEA_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.shexists so future releases need only aGITEA_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
Vis 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:
signalsinStrings.fmtare 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:
ProceduralSkyMaterialor a generated skybox, plus a sun with soft shadows (currently a bareDirectionalLight3D+ 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
Gflashlight 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_guardreportsaware/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 inREADME.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.