# Build context exclusions for the Django/Celery image. Anything excluded
# here is never sent to the daemon and never reaches `COPY . ${APP_HOME}`.

# Local virtualenvs and editor state
venv/
.venv/
env/
.env
# The WHOLE .envs/ tree, not just .local/. `.envs/.production/.django` is real
# credential material on a developer's disk (untracked, ~60 assignments) plus a
# CREDENTIALS.md — excluding only .local/ baked those into the production image.
# Nothing inside the image reads .envs/: compose consumes it host-side via
# `env_file:`, and the k8s pods get config from the Secret Manager CSI mount at
# /var/secrets/django/.env.
.envs/
.vscode/
.idea/

# VCS metadata (workflows are not needed inside the runtime image)
.git/
.gitignore
.github/

# Python build artefacts and caches.
# NOTE: .dockerignore patterns are matched against the full path relative to
# the context root and do NOT recurse implicitly the way .gitignore does — a
# bare `__pycache__/` excludes only the one at the root. The `**/` prefix is
# what catches the ~70 nested cache dirs under opencontractserver/ and config/.
**/__pycache__/
**/*.py[cod]
**/*.egg-info/
**/.pytest_cache/
**/.mypy_cache/
**/.ruff_cache/
.tox/
.coverage
.coverage.*
coverage.xml
htmlcov/

# Frontend has its own image
frontend/

# Documentation, dev tooling, and one-off scripts not needed at runtime
docs/
mkdocs.yml
schema.json
schema.graphql
cloudflare-og-worker/
tools/
fixtures/
# locale/ is safe to exclude: no .po/.mo files exist in the tree (only a
# placeholder README.rst) and no entrypoint/start script invokes
# `manage.py compilemessages`. Django translations are intentionally not
# active today; if .po files are added later, drop this entry so the build
# context picks them up (the runtime image keeps `gettext` available for
# `compilemessages`).
locale/
model_preloaders/

# User-uploaded content / runtime state
uploadfiles/
opencontractserver/media/
user_*/
staticfiles/
static/
site/
.ipython/

# Local scratch corpora, fetch caches, and pilot data. These are all gitignored
# developer state, but .dockerignore is independent of .gitignore — without
# these entries `COPY .` uploads them to the daemon and bakes them into the
# production image (~13GB as of 2026-09, dominated by .pilot_data/).
# `.authority_packs*` deliberately covers the live cache, the _test/ variant,
# and any ad-hoc `.pre-native-backup`-style copies left on disk.
.pilot_data/
.authority_packs*
.eval_extract/
demo/
imports/

# Top-level docs (CHANGELOG.md is intentionally retained)
README.md
CLAUDE.md

# Misc dev tooling
.pre-commit-config.yaml
.cursor/
.claude/
.claire/
.playwright-mcp/
node_modules/
screenshots/
