Files
dtf-system/local
Cauê Faleiros 341f154c36 feat: load Docker secret files so the production stack can boot
deploy/stack.yaml passes DATABASE_URL_FILE, AWS_ACCESS_KEY_ID_FILE,
OPERATOR_PASSWORD_FILE and the provider tokens as Swarm secret paths, but the
runtime only ever read the plain names. That stack could not start: the database
URL and R2 credentials were absent, and operator login raised KeyError, so it
returned 500 instead of the intended 503.

local/secrets.py resolves every <NAME>_FILE into <NAME> before configuration is
read, from the API, worker and bootstrap entrypoints. It fails closed on an
unreadable or empty secret and on a name supplied both directly and as a file,
because starting with a credential nobody intended is worse than not starting.
Only one trailing newline is stripped, so a generated password keeps any
whitespace that belongs to it, and no value reaches an error message.

The stack also passed OPERATOR_USER while the Kanban authenticates by email;
it now passes OPERATOR_EMAIL, matching the runtime.

The release gate checked this by searching local/secrets.py for the literal
"DATABASE_URL_FILE", which would pass for any file containing that string. It
now loads the module and makes it resolve every secret the stack declares, and
asserts it fails closed on a missing one. Four marker strings that stopped
matching when R2 support landed are removed rather than left to rot; the two
that still describe real blockers stay, so the gate continues to refuse a
release while payment and messaging adapters are fake.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-21 11:36:59 -03:00
..
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00
2026-09-15 16:42:34 -03:00