Summary
On Linux hosts, every renzora command that writes to the checkout through the /app/src bind mount (build, run, upx, add, remove) leaves the written files owned by root:root, because the toolchain containers run as root and no ownership fixup is done afterwards.
Impact
The most visible consequence is that renzora run produces an editor with no working plugins. The engine editor's plugin loader stages a shadow copy of each plugin into plugins/.reload/ before loading it (required for hot-reload), and it cannot create that directory inside a root-owned dist/:
ERROR renzora_plugin::host::loader: [plugin] liblua.so failed: could not stage a copy to load: Permission denied (os error 13)
ERROR renzora_plugin::host::loader: [plugin] libaudio.so failed: could not stage a copy to load: Permission denied (os error 13)
... (repeated for all 67 plugins)
The editor then boots without Lua scripting, audio, and all post-process effects — which is easy to misread as an engine bug rather than a permissions problem.
Additionally, a root-owned dist/ (or a crate scaffolded by renzora add) cannot be modified or deleted by the user without sudo.
Reproduction
On a Linux host:
renzora init
renzora run
ls -l dist/linux-x64/ → everything is root:root; the editor log shows the Permission denied (os error 13) plugin errors above.
Workaround
sudo chown -R $(id -u):$(id -g) dist/ after each container build.
Fix
#1 fixes this by chowning the written paths back to the checkout's owner from inside the container after each bind-mount-writing command. See the PR description for why docker create --user was not used instead.
Summary
On Linux hosts, every
renzoracommand that writes to the checkout through the/app/srcbind mount (build,run,upx,add,remove) leaves the written files owned byroot:root, because the toolchain containers run as root and no ownership fixup is done afterwards.Impact
The most visible consequence is that
renzora runproduces an editor with no working plugins. The engine editor's plugin loader stages a shadow copy of each plugin intoplugins/.reload/before loading it (required for hot-reload), and it cannot create that directory inside a root-owneddist/:The editor then boots without Lua scripting, audio, and all post-process effects — which is easy to misread as an engine bug rather than a permissions problem.
Additionally, a root-owned
dist/(or a crate scaffolded byrenzora add) cannot be modified or deleted by the user withoutsudo.Reproduction
On a Linux host:
renzora initrenzora runls -l dist/linux-x64/→ everything isroot:root; the editor log shows thePermission denied (os error 13)plugin errors above.Workaround
sudo chown -R $(id -u):$(id -g) dist/after each container build.Fix
#1 fixes this by chowning the written paths back to the checkout's owner from inside the container after each bind-mount-writing command. See the PR description for why
docker create --userwas not used instead.