a8c9808062
- Bug #1: CalculateExecution now filters product by targetResourceId instead of blindly taking .First() — fixes multi-product recipes - Bug #2: Replace visited HashSet with recipeOutput tracker — allows re-processing when demand increases (double targets on same resource) - Bug #3: Clamp effectiveSpeed to MinEffectiveSpeed (0.05) floor — prevents division by zero with heavy productivity module stacks Also: switch from Stack (DFS) to Queue (BFS) for more predictable resolution order; add 4 regression tests (24 total, all green)