Pass 2 — register the lifecycle module of every installer that owns one, each wrapped in
its own gate.
Installers without a createModule (policy / hook / shared.module-driven capabilities)
contribute no module here.
An installer whose module is gated on a sub-key of its capability's config
(moduleGate — e.g. share under permalink) is evaluated with evaluateGate(),
the same semantics the registry applies to a declaration gate.
⚠️ The gate is no longer read here (socle-init 9.2). It is captured as a closure and
evaluated by gatedModule inside init(), so that it sees the profile-merged config
rather than the pre-merge one. The two branches below are the same two branches as
before — only their moment changed. Dropping the former capConfig parameter is what makes
that unambiguous: there is now exactly one config in play, the one modules receive.
Pass 2 — register the lifecycle module of every installer that owns one, each wrapped in its own gate.
Installers without a
createModule(policy / hook / shared.module-driven capabilities) contribute no module here.An installer whose module is gated on a sub-key of its capability's config (
moduleGate— e.g.shareunderpermalink) is evaluated withevaluateGate(), the same semantics the registry applies to a declaration gate.⚠️ The gate is no longer read here (socle-init 9.2). It is captured as a closure and evaluated by gatedModule inside
init(), so that it sees the profile-merged config rather than the pre-merge one. The two branches below are the same two branches as before — only their moment changed. Dropping the formercapConfigparameter is what makes that unambiguous: there is now exactly one config in play, the one modules receive.