Two co-occurring bugs prevented plugin setting tabs from loading:
1. Both stub-to-full app() enhancement paths (tryEnhance and
requestAnimationFrame) could fire independently, with the second
overwriting installedPlugins back to [] after init() already fetched
them. Added a guard flag (_appEnhanced) and runtime state preservation
to prevent this race.
2. Plugin config x-init only loaded content if window.htmx was available
at that exact moment, with no retry or fallback. Added retry loop
(up to 3s) and fetch() fallback for resilience.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>