// Public · Modules — what this backend is currently serving beyond core. // // Phase 2, PR 6 of docs/website/MODULE_SYSTEM.md §2.7. The published shape is // settled in MODULE_API.md §2.1 (`capabilities` are opaque strings, published // here, for clients to feature-detect against). // // Two decisions are visible in the ten lines below and are the whole of this // file's design: // // • **`started` only.** The public surface answers "what is serving", and // nothing else. A module that failed to load, or that an operator disabled, // is simply ABSENT — the same treatment §4.4 already gives its routes and // its nav, so an anonymous visitor sees a site without that capability // rather than a site advertising a capability that 503s. `state`, the // failure stage and the failure reason are core's business and belong to the // admin Modules screen; none of the three is published here. // • **No database, and no siteMode gate.** The answer comes from the loader's // in-memory records, so this endpoint keeps working with the database down — // the same class as /public/version and /public/status, both of which must // answer during maintenance so a client can bootstrap and render the // maintenance page. A client that could not feature-detect while the site // was in maintenance would render its maintenance page as though no module // existed. // // This endpoint is deliberately NOT how a module's client chunk gets loaded. // `utils/htmlShell.js` injects a `