0009: One configuration file, read at startup

Status:

Accepted

Date:

2026-10-19

Context

Sources, the approval policy and RBAC change rarely, and the first release has no admin UI. The legacy service used ADR_VIEWER_ environment variables for a single source.

Decision

catalog.yaml (path in ADRIANO_CONFIG_FILE) holds sources, approval_policy and rbac; changes need a restart. Everything else is an ADRIANO_-prefixed environment variable. Secrets are referenced by environment variable name (token_env, push_tokens_env), resolved at startup, held as secret strings and never logged or stored. Validation degrades per entry instead of stopping startup: an invalid registration is disabled with a readable error, a missing or invalid policy yields policy_missing everywhere, and a missing rbac section grants nothing.

Consequences

  • adriano check-config validates a file before deployment.

  • A broken registration never takes the rest of the catalog down; problems show in /healthz, the startup log and the Sources page.

  • Registrations removed from the file are disabled, never deleted, so their history stays.

  • A missing policy is never mistaken for “approval not required”.