# Docker matches these against the path relative to the context root, so a bare
# name covers only the root -- `__pycache__` does not match `src/x/__pycache__`.
# Depth-capable patterns therefore carry `**/`. Patterns that are meaningfully
# root-only (.git, .venv, data) stay anchored.

# Git
.git
.gitignore

# Python
**/__pycache__
**/*.py[cod]
**/*$py.class
**/*.so
.Python
.venv
venv
ENV
env

# IDE
**/.vscode
**/.idea
**/*.swp
**/*.swo

# Testing
**/.pytest_cache
**/.coverage
**/htmlcov
**/.tox
**/.nox

# Type-checker and linter caches (61 MB of .mypy_cache here)
**/.mypy_cache
**/.ruff_cache
**/.cache

# Build
build
dist
**/*.egg-info
**/*.egg

# Documentation
docs/_build

# Local data
data/
**/*.db
**/*.kuzu
**/*.wal
.kuzumem/
.fabric_data/

# Misc
**/.DS_Store
**/*.log

# Secrets. .gitignore already covers `.env`, but this file did not -- and
# .dockerignore is what governs the build context, not .gitignore. An
# untracked .env is exactly what a broad COPY would pick up. Nested too, which
# is why this is `**/` rather than a bare name.
**/.env
**/.env.*
**/*.pem
**/*.key
**/*.p12
**/id_rsa*
