Add a per-building status light: a small circle drawn in the operational
building's upper-right corner (rotating with the building) so production
state is readable without selecting it.
- Sim: BuildingSystem::getProductionStatus classifies each building into
Unconfigured/Producing/Starved/Blocked (nullopt for non-production
types); Salvage Bay is a two-state special case (Producing with scrap,
Starved when empty). Extracted shared predicates (gatherCandidateRecipes,
recipeInputsAvailable, computeShipyardRequiredMaterials, hasInputsToStart)
so tickProduction / tickShipyardProduction and the classifier stay in sync.
- UI: GameWorldView draws the circle, mapping status -> color from a new
visuals.toml [status_light] section (grey/green/red/yellow + outline).
- Tests: getProductionStatus cases for every state, including red-over-yellow
precedence and the auto-recipe/salvage-bay specials.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Y7N59FsLA5e2kuVdqe4Uhc