PyOps was built for Pyanodons and Py stays first-class, but nothing in the core (solver, blocks, factory ledger, browse) is actually Py-specific — it's generic factory planning over whatever data dump you sync. We should let it run cleanly on any mod set, including vanilla.
Approach
Gate Py-specific UI on whether its data is present, not on detecting a named mod (pyalienlife etc.). Data-driven presence is more robust: it handles partial installs, mod renames, and other overhauls, and the empty state falls out for free.
Example: TURD is entirely data-driven (technologies.is_turd + turd_replacements, sourced from pyalienlife's pywiki_turd_page). With no Py, there are simply zero TURD techs.
Scope
Keep all Py behavior intact — this is additive graceful-degradation, not a rewrite.
PyOps was built for Pyanodons and Py stays first-class, but nothing in the core (solver, blocks, factory ledger, browse) is actually Py-specific — it's generic factory planning over whatever data dump you sync. We should let it run cleanly on any mod set, including vanilla.
Approach
Gate Py-specific UI on whether its data is present, not on detecting a named mod (
pyalienlifeetc.). Data-driven presence is more robust: it handles partial installs, mod renames, and other overhauls, and the empty state falls out for free.Example: TURD is entirely data-driven (
technologies.is_turd+turd_replacements, sourced from pyalienlife'spywiki_turd_page). With no Py, there are simply zero TURD techs.Scope
Keep all Py behavior intact — this is additive graceful-degradation, not a rewrite.