Found while writing the module-presets e2e (pre-existing, not caused by #99): the block solve's display map is keyed by bare internal name, so when a recipe and a good share a name the later write wins — recipe coal-gas ("Coal gas from coal") renders its row label as the fluid's display "Coal gas". See app/src/server/block-compute.server.ts around the display-map assembly (~770-787 at the time of finding).
Fix direction: key the map by (kind, name) — or keep separate maps for recipes vs goods — so a recipe row always shows the recipe's own display string. Py has many recipe/product name collisions (the convention of naming a recipe after its main product), so this likely mislabels more rows than the one spotted.
Found while writing the module-presets e2e (pre-existing, not caused by #99): the block solve's display map is keyed by bare internal name, so when a recipe and a good share a name the later write wins — recipe
coal-gas("Coal gas from coal") renders its row label as the fluid's display "Coal gas". See app/src/server/block-compute.server.ts around the display-map assembly (~770-787 at the time of finding).Fix direction: key the map by (kind, name) — or keep separate maps for recipes vs goods — so a recipe row always shows the recipe's own display string. Py has many recipe/product name collisions (the convention of naming a recipe after its main product), so this likely mislabels more rows than the one spotted.