Completed in 7c05ef1 + 9e13984 — _internal_ssl_ctx removed entirely. proxy.py uses plain urlopen() (all internal services are HTTP). ssl import removed from config.py. External calls (OpenAI,…
Fixed in 4ecd233 — Token validation uses protected endpoints. Trust model documented in docs/trust-model.md. Unknown services rejected.
Fixed in 4ecd233 — Budget summary cached 1min. Dashboard cached 30s per user (2.1s→40ms). Inventory health endpoint added.
Fixed in 4ecd233 — Added .gitea/workflows/security.yml: dependency audit, secret scanning, Dockerfile lint. Requires Gitea Actions runner to execute.
Fixed in commit 79d2c3b
All default credentials removed. Services fail-warn when auth env vars missing. Register endpoint stays disabled (403).
Manual ops: set ADMIN_USERNAME/ADMIN_PASSWORD…
Partial fix in commit fcb9383
Changes:
services/inventory/server.js: Added X-API-Key middleware, rejects 401 without keyservices/budget/server.js: Added X-API-Key middleware, rejects…