# Secrets — never committed. Real values live in .env (copy from .env.example).
.env
.env.*
!.env.example
*.pem
*.key

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

# Node / frontend. No trailing slash: `node_modules/` matches only a directory,
# so a node_modules SYMLINK (one checkout borrowing another's install) got past
# it and was committed in cce6b14.
node_modules
# tsc's incremental cache ("incremental": true); every local type-check rewrites it.
*.tsbuildinfo

# CDK / build
cdk.out/
dist/
build/

# OS / editor
.DS_Store

# local secrets dir
secrets/
test-one*.txt

# AWS credential exports (never commit)
*accessKeys*.csv
*credentials*.csv
dashboard/*/.next/
dashboard/*/out/
dashboard/*/next-env.d.ts
dashboard/*/.env.local

# Benchmark media: large, reproducible, mirrored to S3 instead.
# ANCHORED to the repo root. A bare `results/` matches a directory of that
# name at ANY depth, which silently excluded docs/results/ — the fleet's
# measurement record, including three files CLAUDE.md cites as sources of
# truth. They existed only on one laptop until 2026-08-11.
/results/

# Staged (not committed) accel-image payload: SageAttention 2.2 site-packages,
# 60 MB of arch+torch-locked binaries copied in by deploy/worker/build-accel.sh
# on the GPU host at image build time. sol_attn/ next to it IS committed.
/deploy/worker/vendor/sage220/

# Stamped into the node copy by `make node-push`; never committed.
REVISION
