Describe the Bug
When calling pyforge.shape(), the function passes back a primitive Python list object instead of the expected EngineShape class container. This prevents users from configuring necessary vector states or calling physics methods, throwing AttributeError: 'list' object has no attribute 'get_physics'.
Root Cause Analysis
- Namespace Overlap: The compiled C extension
pyforge_core.shape is overriding the Python-layer engine.shape assignment during top-level packaging imports inside __init__.py.
- Environment Synchronization: Editable installation states (
pip install -e .) are latching onto stale virtual environment file states, caching primitive array returns rather than tracking the latest EngineShape transformations.
Fix for Tomorrow
Describe the Bug
When calling
pyforge.shape(), the function passes back a primitive Pythonlistobject instead of the expectedEngineShapeclass container. This prevents users from configuring necessary vector states or calling physics methods, throwingAttributeError: 'list' object has no attribute 'get_physics'.Root Cause Analysis
pyforge_core.shapeis overriding the Python-layerengine.shapeassignment during top-level packaging imports inside__init__.py.pip install -e .) are latching onto stale virtual environment file states, caching primitive array returns rather than tracking the latestEngineShapetransformations.Fix for Tomorrow
returnblocks insideengine.py.__init__.pyto explicitly routeshapecalls through the class object instead of letting the native binary module bind the namespace globally..venvcache layer.