Structure: layers app, infra, usecase, and domain; a health endpoint exercised by
liveness.feature; a domain model in specs/functional_design/domain_model.md.
Container image: built, scanned, and pushed in three jobs, handing the image over as an
archive, so a vulnerability scan can stop an image before it reaches the registry. The runtime
image is distroless: no shell and no package manager in production; a debug image adds
investigation tools.
Release: a release tag re-tags the image built and tested at merge to main; it is never
rebuilt.
Rationale: configuration comes from environment variables, so the same image runs in every
environment.