|
secrets: a placeholder may carry a fallback, and web search stops being a Settings field
An unset ${SEARXNG_URL} failed the whole navi-web connection, all three of its
tools and not only search, because resolve_secrets raises on any placeholder it
cannot fill. The rule is right for credentials, where a blank value quietly
becomes anonymous access, and wrong for a setting, where an empty SearXNG URL
costs one backend rather than the server. ${NAME:-fallback} (POSIX-ish, empty
fallback allowed) says which is which, and writing the fallback down makes it a
decision in the config instead of an accident of a variable nobody set.
Settings.brave_search_api_key and .searxng_url were read by nothing — the
navi-web server has its own config — so they go, with docs/config.md pointing at
mcp_servers.d/navi-web.json and deploy/env.template naming SEARXNG_URL where a
deploy actually sets it.
The literal-secret guard still holds: a placeholder name is a credential unless
it is in SETTINGS_VARIABLES, and a settings placeholder must sit in an env block.
|
|---|
|
|
| deploy/env.template |
|---|
| docs/config.md |
|---|
| navi/config.py |
|---|
| navi/mcp/secrets.py |
|---|
| tests/unit/mcp/test_no_literal_secrets.py |
|---|
| tests/unit/mcp/test_secrets.py |
|---|