# Python
__pycache__/
*.py[cod]
*.pyo
*.pyd
.Python

# Virtual environments
.venv/
.venv-install/
venv/
env/
dockq-venv/

# Distribution / packaging
dist/
build/
*.egg-info/
*.egg

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

# Type checking
.mypy_cache/
.dmypy.json
.pyright/

# Environment files — never commit secrets
.env
.env.local
.env.*.local
*.env

# GCP service account keys
*.json
!pyproject.json
!.cursor/environment.json
!tests/fixtures/metrics/ipsae_nonzero_multisubchain.json
!tests/fixtures/bindcraft/run_metadata.json
!clients/phi/tests/fixtures/job_types.json
!clients/phi/tests/fixtures/run_pipelines.json
!experiments/campaigns/y7_design/config/score_hit_calibration.json
# Anchored to the repo root so it only blocks a top-level credential dir,
# not source packages that happen to be named `secrets/`.
/secrets/

# Team-facing engineering docs live in docs/ (committed).
# Local-only scratchpads / agent ephemera go in .scratch/.
.scratch/
scratch/

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

# Agent-only Cursor rule — local edit-time tooling, not a committed
# team artifact. The team-facing version of the same content lives in
# docs/model-integration-watchlist.md.
.cursor/rules/model-integration.mdc

# macOS
.DS_Store

# Alembic auto-generated (keep versions/ tracked)
alembic/versions/*.pyc

# Terraform state and local overrides
infrastructure/**/.terraform/
infrastructure/**/terraform.tfstate
infrastructure/**/terraform.tfstate.backup
infrastructure/**/*.tfvars
!infrastructure/**/terraform.tfvars.example
# Committed env var files — no secrets here; image_tag is always CI-supplied
!infrastructure/terraform/staging.tfvars
!infrastructure/terraform/production.tfvars
infrastructure/**/.terraform.lock.hcl

# Cloud Build local artifacts
cloudbuild/*.log
/runners/capsid-fold-esmfold2-base/source-artifact.zip
/runners/capsid-fold-esmfold2-base/source-artifact.sha256

# Docker
.dockerignore.local

*.pdb
!tests/fixtures/metrics/ipsae_nonzero_multisubchain.pdb
!examples/bindcraft2/*.pdb
*.cif
!examples/bindcraft2/*.cif
*.csv

# Large binary data / experiment outputs — use GCS, not git
*.parquet
*.pq
*.npz

# Canvas HTML dashboards (generated, not source-controlled)
canvas/

# Y4 campaign data and validation packages (binary + large CSVs)
experiments/campaigns/y4_agent_designs/data/
experiments/campaigns/y4_agent_designs/*.zip
experiments/campaigns/y4_agent_designs/y4_validation_package_*/

# CXCR3 campaign pipeline scratch — BoltzGen staging, fold inputs, large score tables
experiments/cxcr3_vhh_design/data/designs/.staging/
experiments/cxcr3_vhh_design/data/designs/**/.harvested_*
experiments/cxcr3_vhh_design/data/control_folds/
experiments/cxcr3_vhh_design/data/control_folds_templated/
experiments/cxcr3_vhh_design/data/scored/wave1_designs.tsv
experiments/cxcr3_vhh_design/data/scored/wave1_keep.tsv
experiments/cxcr3_vhh_design/data/scored/wave1_keep_sequences.tsv
experiments/cxcr3_vhh_design/data/scored/refold_manifest*.tsv

# Agent-development guide is account/app-specific (DynoPhiAgent). Other
# contributors run different agents/apps, so keep it local-only, not in the
# shared repo.
docs/agent-development.md