__pycache__/
*.pyc
*.db
.env
pgdata/
*.log
# ---- Claude code-only .gitignore (data/secrets/venv excluded) ----
# Python / Node deps & caches
venv/
ml-venv/
.venv/
env/
ENV/
node_modules/
__pycache__/
*.pyc
.pytest_cache/
.mypy_cache/
# Secrets (NEVER commit) — keep .example
.env
.env.*
!.env.example
*.pem
*.key
*.crt
*.p12
*.pfx
certs/
*credentials*.json
service-account*.json
# Data / logs / databases
logs/
*.log
*.sqlite
*.sqlite-*
*.db
*.parquet
*.feather
*.csv
*.tsv
data/
datasets/
archive/
backups/
*.tar.gz
*.tgz
*.zip
# Media
*.mp4
*.mov
*.mkv
*.webm
*.png
*.jpg
*.jpeg
*.gif
*.webp
*.mp3
*.wav
punters-edge-videos/
# OS
.DS_Store

# connector alert creds + scrubbed-secret backups
.env.alert
*.bak_secrets_*

# runtime state + backups + deployed snapshots (never commit)
state/
*.bak*
*.deployed*

# rotated logs + betfair feed session token (runtime, never commit)
*.log.[0-9]
*.log.*.gz
.bf_feed_session.json

# ---- untracked 2026-08-15 ----
# Runtime state, written by live services and rewritten every few minutes. These were TRACKED,
# so every poll cycle dirtied the tree and the nightly-capture cron committed them — 4 of the
# 25 commits pushed on 2026-08-15 were nothing but this churn, which buries real changes.
# .gitignore alone could not fix it (it governs untracked files only); they needed git rm
# --cached. Both remain on disk and MUST: scripts/uptime_tracker.py and /v1/uptime read
# uptime_checks.json, workers/runner.py reads .alerted_arbs.json to dedupe arb alerts.
uptime_checks.json
workers/.alerted_arbs.json

# Scratch investigation output — one-off patch scripts, samplers and captured sample data
# (_s6/lsa_samples.jsonl alone was 1.5MB). Verified unreferenced by cron, systemd and every
# import before untracking. History is preserved and pushed, so the files stay recoverable.
_s6/
_s6_watch_heal.sh
_verify_*/
