__pycache__/
*.py[cod]
*$py.class

# `.venv` (no trailing slash) so a worktree's symlink-to-main-venv is
# also ignored — `.venv/` only matches directories.
.venv
.venv/
venv/
.env

build/
dist/
wheelhouse/
*.egg-info/

.pytest_cache/
.ruff_cache/
.mypy_cache/
.coverage
htmlcov/

docs/_build/

# pymongo-validation pytest-json-report raw output (regenerated each run).
.validation/

.DS_Store
.idea/
.vscode/

# Claude Code's per-worktree harness config (hooks, plugins, settings).
# Local to the developer; never committed.
.claude/

# Cross-driver smoke test scaffolding. The Go module's downloaded
# deps live in $GOPATH (already outside the repo); the Node smoke's
# node_modules is local to the workdir and downloaded on first run.
# package-lock.json IS committed for reproducibility.
tests/cross_driver/node/node_modules/
tests/cross_driver/node/.node_modules.lock

# Gradle wrapper / cache state for the Java cross-driver smokes is
# rebuilt from build.gradle.kts on first run; the uber-jar in build/
# is also excluded by the top-level `build/` rule above. The flock
# sentinel serialises parallel xdist workers around the build.
tests/cross_driver/java/.gradle/
tests/cross_driver/java/.smokesjar.lock

# Pelican site build artifacts and ephemeral runtime state. The build
# output is regenerated each `invoke build`; theme/static/img/ is copied
# from ../brandkit/ at build time; secantus-data/ is a stray WiredTiger
# data dir that may be created if a SecantusDBServer is started with
# website/ as cwd; aws-state.json contains account-specific resource IDs.
website/output/
website/themes/secantus/static/img/
website/infra/aws-state.json
website/secantus-data/
website/__pycache__/
xunit-results/
