# Python
__pycache__/
*.pyc
.venv/
.pytest_cache/
.ruff_cache/

# Build artifacts
*.egg-info/
dist/
# Anchored to the repo root: an unanchored `build/` also matches web/build, and
# because Git never descends into an excluded directory that would make the
# web/build/.gitkeep exception below unreachable.
/build/

# Frontend build outputs (regenerated by `npm run build` and bundled into the wheel).
# The directory itself is tracked via .gitkeep because pyproject.toml force-includes
# web/build into the wheel, so hatchling cannot build the editable install — and
# therefore pixi cannot create the environment — until the path exists. Keeping an
# empty directory in Git lets `pixi run dev` work on a fresh clone.
web/build/*
!web/build/.gitkeep
web/.svelte-kit/
web/node_modules/
src/ai_almanac/server/static/

# Claude Code: shared settings.json and hooks/ are committed; personal
# overrides and session state are not.
.claude/settings.local.json
.claude/scheduled_tasks.lock

# Data
.env
# Per-worktree ports and data dir, written by scripts/agent-worktree.sh.
.env.agent
.almanac-data/
scripts/backend-env.yaml
*.db
*.db-shm
*.db-wal
job_outputs/
data/

# Data archives
*.zip
*.tar.gz
*.tar.bz2

# Editor / OS
.DS_Store
.idea/
.vscode/
# pixi environments
.pixi/*
!.pixi/config.toml

# Terraform — state, provider plugins, plans, and secret-bearing var/backend files.
# .terraform.lock.hcl is intentionally tracked.
terraform/.terraform/
terraform/*.tfplan
terraform/*.tfstate
terraform/*.tfstate.*
terraform/terraform.tfvars
terraform/backend.hcl

# Local tooling / scratch
.agents/
.localrag/
__marimo__/
node_modules/
process-compose-dev.log
uv.lock
__MACOSX
