Rewire the update server's per-platform serve/NotFound gating onto the
platform registry (modules/setting) so the update-feed generator and
wire format for a platform are looked up from config instead of
hardcoded, and fix#811 where npm/mcp/go repos still served a Joomla
updates.xml.
- routers/web/repo/updateserver.go: ServeUpdatesXML and ServeDolibarrJSON
now gate via services/updateserver.PlatformServesGenerator (registry
update_generator lookup) plus the "both" compound platform. The other
Serve* handlers gain a registry-driven IsFeedlessPlatform guard.
- models/updateserver/platform.go: IsFeedlessPlatform is now registry-
driven (feed_format == "none" covers npm/mcp/go and any admin-configured
feedless platform), with the static map kept as a fallback.
- #811 precedence fix in ResolvePlatform: a registry-recognized feedless
metadata platform now overrides the update_stream_config.Platform row,
including the `NOT NULL DEFAULT 'joomla'` row every licensing-enabled
repo carries. Genuine Joomla repos (metadata.platform joomla/empty, not
feedless) still let the config platform win and serve exactly as before;
an explicit non-joomla config override is still honored for non-feedless
metadata.
Not built/deployed: no Go toolchain available in this environment; changes
match existing signatures and gofmt style by hand. Requires forge rebuild
+ redeploy.
Authored-by: Moko Consulting <hello@mokoconsulting.tech>