node_modules/
dist/
build/
coverage/
.DS_Store
*.log
.env
.env.local
.env.*.local
.turbo/
.bun/

# AI review loop artifacts (scripts/review/ai-review.ts)
.claude-pre-review.md
.claude-pre-review.json
.claude/pending-patches/
# Review-tooling scratch. `scripts/review/ai-review.ts` writes a snapshot of
# the diff under review into .claude/ on every run; a `git add -A` then commits
# a copy of the PR into the PR. Seven of these were already tracked on main
# before this rule existed — untracking those is a separate cleanup.
.claude/claim-audit-diff-*.patch
.claude/review-diff-*.patch

# Agent session state (not committed; per-session)
.claude/endpoints-snapshot.json
.agent-todo.md

# Python (uv)
.venv/
__pycache__/
*.pyc
*.pyo
*.egg-info/
.mypy_cache/
.ruff_cache/
.pytest_cache/
htmlcov/
.coverage
.coverage.*
coverage.xml

# Go
*.test
*.out
go.work.sum

# Generated proto artifacts (regenerate via `bun proto:gen`)
ts/_generated/
python/_generated/
go/_generated/

# Test-stack volumes (docker-compose persistent data)
infra/test-stack/data/
# synthetic consumer go binaries
synthetic-consumers/telemetry/go/nodii-synthetic-telemetry
synthetic-consumers/pii/go/nodii-synthetic-pii
synthetic-consumers/auth-sdk/go/nodii-synthetic-auth-sdk
.claude-claim-audit.md
.claude-claim-audit.json

# Compiled synthetic-consumer Go binaries — CLASS RULE, not a name list.
#
# `go build` / `go run .` in synthetic-consumers/<lib>/go/ emits a binary named
# after the directory or the module's last path element, which the `*.test` /
# `*.out` rules above do not match. The rules here used to name them one at a
# time (role-catalog, nodii-synthetic-telemetry, nodii-synthetic-pii,
# nodii-synthetic-auth-sdk, plus a `*/[a-z]*-go` glob) and that is exactly how
# FOUR of them ended up committed anyway, 77 MB in total:
#
#   synthetic-consumers/audit-chain/go/audit-chain                      13 MB
#   synthetic-consumers/replica-consumer/go/replica-consumer            14 MB
#   synthetic-consumers/grpc-interceptors/go/nodii-synthetic-grpc-...   22 MB
#   synthetic-consumers/bean-app-cluster/go/auth-svc/bean-auth-svc-go   26 MB
#
# The last of those DID match the old `*/[a-z]*-go` glob — a rule cannot save a
# file that was already tracked when it landed, which is why they were removed
# with `git rm --cached` in the same commit as this rule.
#
# HOW IT WORKS: every real source file under these directories has an extension
# (.go, .mod, .sum) — verified, zero tracked extensionless files under
# synthetic-consumers/*/go/ — so "extensionless file" is a sound proxy for
# "build artefact". Directories and any dotted filename are re-included, so
# cmd/, internal/ and friends keep working. Naming a NEW binary can no longer
# defeat it; that was the whole failure mode.
synthetic-consumers/**/go/**
!synthetic-consumers/**/go/**/
!synthetic-consumers/**/go/**/*.*
!synthetic-consumers/**/go/*.*
