--- status: open opened: 2026-09-30 located-in: - mesh-controller internal/catalogue/settings.go (settle: every key but `ports` merges into every mergeable file and every contribution) - mesh-controller internal/catalogue/declaration.go (a provider's settings are laid over what it serves) fixed-by: amended-design: --- # 168 — A setting reaches every file and every contribution ## What was observed Settings merge key by key into **every** `"merge": "json"` file of a module **and** every contribution it makes; a provider's settings are also laid over what it serves. Seen on ace: - searxng's `endpoints` and a route `label` land in searxng's own `settings.yml`; nodered's `timeZone` and `mqtt` keys land in mosquitto's grants file; keycloak's `issuer` lands in its `postgres-database` and `route` contributions. - every consumer's `plex-api` binding carries plex's `endpoints` and `expose` settings — and a provider setting named `port` would silently redirect every consumer. - a module cannot have two configurable files: searxng's sidecar config had to stop being mergeable so searxng's keys would not reach it. Harmless today only because every receiver happens to ignore unknown keys. ## What would be right A setting is aimed: at a file (by resource id), at a contribution (by requirement), or at what the module serves — declared settable by the module (ADR 0046 already says settings drive "the fields the manifest marks") — and an unaimed key is refused like any unknown setting.