When an extension registers something:
app.markdown.fence("mermaid", ...) requires that metadata provides
cap:markdown:fence:mermaid.
app.assets.bundle("mermaid.runtime", ...) requires
bundle:mermaid.runtime.
app.layout.slot("layout", ...) requires slot:layout.
app.routes.add("/slides", ...) requires route prefix /slides in metadata.
app.storage.namespace() records a namespace under the extension id.
If metadata does not declare the capability, fail at startup.