# docs/ (SOLO la de la raíz) entero: notas de trabajo, no fuente. Estaban listados
# de a uno (schema, MASTER_PLAN, TESTS_SPEC…) y cada archivo nuevo se colaba al
# repo por olvido. Ojo: CLAUDE.md apunta a docs/db-region-y-latencia.md y dos
# tests citan docs/{auditoria-2026-08,db-region-y-latencia}.md — en un clon
# limpio esos punteros no resuelven. El contenido sigue en el historial.
# Ancla a la raíz con `/`: sin eso, el patrón también se comía apps/docs/,
# content/docs/ y static/docs/img/ — la documentación de producto, que SÍ es
# fuente y tiene que commitearse.
/docs

.idea
.vscode
*.code-workspace
*.pyc
*~
.venv
venv
db.sqlite3
.sass-cache/
celerybeat-schedule
mktlab/localsettings.py
mktlab/local.py
static_root/
node_modules/
.vite/
openapitools.json
media/
_dist/
.env
.env.production
.DS_Store
.direnv
.envrc
# compiled static files are built in dev/deploy
static/css/
static/js/*
# fuentes y demás assets que emite Vite con hash en el nombre
static/assets/
# ...except the hand-written canvas JS, which is source, not a Vite build output
!static/js/canvas/
# Las librerías de terceros las copia `npm run vendor` desde node_modules
# (scripts/vendor-static.mjs); son build output, no se commitean.
static/js/vendor/

# Environment files with credentials
.env.local
.env.production
.env.staging
.env.development

# Credential files
credentials/
secrets/
*.key
*.pem
service-account*.json
*credential*.json
*secret*.json

# Database files
*.db
*.sqlite3

# Log files
*.log
logs.json
logs/
*.log.*

# Temporary files
*.tmp
*.temp
*.bak
*.backup


# Pendings
zzz.txt

# Volcados de logs de los workers. El script que los genera vive en
# scripts/fetch_worker_logs.sh y SÍ se versiona; su salida, no.
*_logs.txt

# R API folder
apiR/

# Robyn local development files
robyn.csv
tmp/robyn_outputs/
*.csv.tmp

# Charts Svelte
charts/
!templates/charts/

# Development tools cache and config
# `.claude/skills/` SÍ va a git: CLAUDE.md las referencia por ruta, así que si no
# viajan, un clone fresco tiene punteros rotos. Se excluyen dos cosas y sólo dos:
#   - settings.local.json: permisos de ESTA máquina, no del proyecto.
#   - worktrees/: son git worktrees (cada uno con su propio `.git`), así que git
#     los ve como repos EMBEBIDOS. No se llevaría los 2,8 GB —git no recursa en un
#     repo anidado— pero los agregaría como gitlink: una entrada de submódulo que
#     apunta a un commit que nadie puede clonar, y rompe el checkout de quien clone.
.claude/settings.local.json
.claude/worktrees/
.ruff_cache/
.clinerules

# Teams
teams.txt
pegasus_example_team_apps/

# Stripe
stripe.md

# Robyn hyperparameters default
robyn_hyperparameter_default.ods

# Table names
TABLA_RENAMING_PLAN.md

# Meridian Documentation
meridian_documentation

# Meridian plots (local reference only, not for GitHub)
plots_meridian/

# Claude Ignore
.claudeignore

# EDA
eda.py

# Log del worker local (make demo)
.demo-worker.log

# Artefactos del barrido de QA (scripts/qa/) — snapshots, capturas y reportes
qa-runs/

# Documentación y notebooks de los frameworks MMM, pineados a la versión que
# corre en prod. Los baja `scripts/sync_framework_docs.py` desde los repos
# upstream: son ~320 MB reconstruibles, igual que static/js/vendor/.
# El índice de qué archivo contesta qué pregunta SÍ va trackeado.
# ⚠️ `reference/*` y no `reference/`: git no re-incluye un archivo si el
# directorio padre está excluido — la negación no falla, simplemente no hace nada.
reference/*
!reference/INDEX.md

# La lista de prospectos de `scripts/prospectos.py`: nombres, emails y empleadores de
# gente real, sacados de sus perfiles públicos de GitHub. No es fuente y no queremos
# datos personales en git — menos todavía en un clon ajeno.
prospectos.csv
prospectos.log
