Two related fixes:
1. core/router-loader.loadRouters() previously called map.clear() before
scanning routersDir, which wiped routers registered via
__prismFacet.addRouter (the cross-plugin API). Now: track which
entries in the map came from a file vs API (filePath sentinel),
only delete file-based ones that disappeared between loads. External
routers are never touched.
2. scripts/install.mjs: chown installed plugin files to root when the
installer is running as root. openclaw 2026.5+ blocks plugins whose
files are owned by non-root; rsync/tar from a developer laptop
silently broke prism-facet on the next gateway restart. Matches the
Meridian + ClawPrompts install.mjs fix.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>