# Local agent hook config (absolute paths to user-specific tooling).
.claude/
.codex/

# direnv local PATH setup (regenerated per checkout).
.envrc

# Python build / cache artifacts (Phase 4 O1 SDK + generated proto stubs).
__pycache__/
*.pyc
sdk/python/src/spendguard/_proto/spendguard/

# Terraform local state (Phase 4 O9).
terraform/**/.terraform/
terraform/**/.terraform.lock.hcl
terraform/**/terraform.tfstate
terraform/**/terraform.tfstate.backup

# mkdocs build output (Phase 4 O10).
docs/site/site/

# Phase 5 GA hardening: per-crate Rust build artifacts. Each
# services/<crate>/ standalone Cargo build pollutes the worktree
# when an operator runs `cargo test` outside Docker.
target/
services/*/target/
crates/*/target/
benchmarks/*/target/
# NOTE: per-crate Cargo.lock is intentionally TRACKED (it used to be ignored
# here, alongside target/). Service Docker images build with `cargo build` and
# no committed lock means deps resolve fresh every time — which let a broken
# upstream "latest" (time 0.3.50) break CI non-reproducibly. Committing locks
# pins the build to known-good versions.
proto/google
*.swp
*.swo
.DS_Store

# D05 TS SDK substrate + pnpm workspace: ignore node_modules anywhere
# in the tree so per-package .gitignore files don't have to duplicate
# this rule (sdk/typescript/, docs/site-v2/, future packages).
# pnpm-lock.yaml is intentionally NOT ignored — workspace lockfiles
# are committed for reproducible CI per pnpm convention.
node_modules/

# M2 — local outreach list with personal contacts (template lives in outreach-list.template.md)
docs/launches/outreach-list.md

.ait/

# Integration host-plugins (flowise, botpress, openclaw-provider-plugin) build
# STANDALONE (pnpm --ignore-workspace, split out of the root workspace 2026-06-22).
# Their lockfiles pull the hosts' heavy peer trees (flowise-components, @botpress/cli,
# openclaw); keep them out of the repo so those deps never re-enter a committed
# lockfile. CI resolves each fresh on its release tag.
integrations/*/pnpm-lock.yaml
