__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

# Ruby bundler + PHP composer cache state for the cross-driver smokes.
# Restored on first run via `bundle install` / `composer install`.
tests/cross_driver/ruby/Gemfile.lock
tests/cross_driver/ruby/.bundle/
tests/cross_driver/ruby/.bundle.lock
tests/cross_driver/ruby/vendor/
tests/cross_driver/php/composer.lock
tests/cross_driver/php/vendor/
tests/cross_driver/php/.vendor.lock

# Rust target dir for the cross-driver smokes (currently gated on
# upstream mongo-rust-driver compatibility — see Cargo.toml). The
# .cargo.lock-build flock sentinel mirrors the Java/Ruby/Node pattern
# for serialising xdist workers around the per-test cargo build.
tests/cross_driver/rust/target/
tests/cross_driver/rust/Cargo.lock
tests/cross_driver/rust/.cargo.lock-build

# 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/
