164 a credential that must be accepted is minted anyway 165 one accepted value must be accepted once per consumer 166 a requirement cannot be optional 167 code several modules share has no home 168 a setting reaches every file and every contribution
33 lines
1.5 KiB
Markdown
33 lines
1.5 KiB
Markdown
---
|
|
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.
|