# hadolint configuration for the Hermes Agent Dockerfile. # See https://github.com/hadolint/hadolint#configure for rules. # # We want hadolint to surface NEW Dockerfile lint regressions, but we # don't want to rewrite the existing image to silence rules that are # either intentional or pragmatic tradeoffs for this project. Each # ignore below has a one-line justification. failure-threshold: warning ignored: # Pin versions in apt get install. We intentionally don't pin common # tools (curl, git, openssh-client, etc.) — security updates flow in # via the periodic base-image rebuild, and pinning would lock us to # superseded patch releases. Same rationale as nearly every distro- # base official image (python, node, debian). - DL3008 # Use WORKDIR to switch to a directory. The image uses `(cd web && …)` # / `(cd ../ui-tui && …)` inline subshells for one-off build steps # because they don't affect later RUN commands; promoting them to # full WORKDIR switches with restores would obscure intent. - DL3003 # Multiple consecutive RUN instructions. The `touch README.md` + `uv # sync` split is intentional — `touch` is cheap, `uv sync` is the # expensive layer-cached step we want isolated, and merging them # would invalidate the cache for trivial changes. - DL3059 # Last USER should not be root. /init (s6-overlay) runs as root so the # stage2 hook can usermod/groupmod and chown the data volume per # HERMES_UID at runtime; each supervised service then drops to the # hermes user via `s6-setuidgid`. - DL3002 # Require explicit base-image pins (SHA256) — we already do this. trustedRegistries: - docker.io - ghcr.io