3146cab449
The real first-launch installer is python/get_python.sh, not LYPython.cmake. It does `pip install -e scripts/o3de`, whose egg_info write hits read-only /app and fails ([Errno 30]). get_python.sh has a built-in immutable-install hook: if scripts/o3de/dist/o3de-1.0.0.tar.gz exists it installs that (non-editable) instead. Pre-build that tarball at Flatpak build time (python3 setup.py sdist) so the runtime CLI lands in the writable ~/.o3de venv. Verified end-to-end: tarball install -> `import o3de` resolves from site-packages. Also patch every LYPython.cmake copy (not just the first) for the separate project-build CMake-configure path, and add python3/python3-setuptools to CI. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>