- db.py: auto-migrate missing columns (signal_correct, pnl_dkk, etc.) on existing SQLite DBs
- db.py: print warning to stderr if DATABASE_URL not set
- dashboard.py: call init_schema() at startup so columns always exist
provider=consul auto-injects attr.consul.version >= 1.8.0 constraint which
filters out int (old Consul). provider=nomad uses native Nomad service
discovery — Traefik still picks up tags via Nomad catalog.
- Remove sed substitution from pipeline (no more __PLACEHOLDER__ pattern)
- Nomad template{} reads mmd/* keys from Consul KV at allocation time
- Secrets never touch git or pipeline logs
- Remove Gitea secrets dependency for app secrets (only HARBOR_ROBOT_TOKEN needed)
- Add signal board section showing per-ticker NLP analysis from DB
- Badge-yellow CSS class added
- _signal_board_data() helper: maps company_stats() + analyst_rec()
to clean badge classes, signal strength bar, agreement status
- Error-safe: falls back to empty list on import/query failure
- badge-yellow added to CSS palette
buildx is only needed for multi-platform builds.
For a single-platform debian-host runner, plain docker
build + push is simpler and has no permission issues.
Removed:
- docker/setup-buildx-action (EACCES /tmp/buildx/certs)
- docker/build-push-action
- buildx context setup steps
- BUILDX_CONFIG env var
docker-container driver (default) tries to spin up a BuildKit
container which can fail on host runners. 'driver: docker' uses
the host daemon directly — simpler and more reliable.