Readonlyhastrue when the installer declares a createModule() factory.
⚠️ A structural fact, never a runtime one: it says the capability contributes an
ICoreModule to the registry, not that this module is running — and the module's id is
not necessarily the capability's (permalink contributes share). For "is it
running?", the answer is IIntrospectionAPI.getActiveModules().
What an installer knows about its capability and a declaration cannot know.
Travels through
ICapabilityRegistry.noteInstaller()rather than as a field on the declaration:ICapabilityDeclarationdescribes a capability,CapabilityInstallerdescribes how a bundle embarks one, and those are two subjects. Merging them would put a build-time fact on an object that the runtime channel (GeoLeaf.plugins.registerCapability) also produces, where it has no meaning.