# CogniX — un repo, un módulo, una versión.
# Las cinco features viven aquí dentro con su historia (git filter-repo, 2026-07-29).
# La cabecera anterior decía que cada miembro era un repo aparte: ya no lo es.

# Local / temporales
.claude/settings.local.json
# Narrativa por mision (canon §6): el Que/Por que/Como + plan fechado + bitacora viven
# LOCALES y no se versionan. Solo se promueven a docs/ cuando decidimos que pertenecen ahi.
.claude/*.local.md
# Mediciones crudas de `task bench:*` y de la auditoría: son de LA MÁQUINA que las midió y de
# un día concreto, así que no son fuente ni referencia — se archivan aquí para poder rehacer un
# informe sin repetir la corrida, y se citan por su fecha desde docs/rendimiento.md. Versionarlas
# convertiría una foto del hierro de Charlie en un número del repo, que es justo lo que ese
# documento declara que no hace. ⚠️ Y hacía falta la línea: el traspaso del 2026-08-27 daba por
# hecho que ya estaban ignoradas y no lo estaban — once ficheros a un `git add -A` de distancia.
.claude/medidas/
.DS_Store
*.swp
scratchpad/

# Python — el workspace uv pone UN entorno en la raiz (antes habia uno por feature, y
# cada .gitignore de miembro lo ignoraba por su cuenta). Son ~5,5 GB: si esto falta,
# el primer `git add -A` intenta versionar el entorno entero.
.venv/
venv/
__pycache__/
*.py[cod]
*.egg-info/
# Ficheros de trabajo por sesión (encargos cross-repo): locales, no se versionan (§6).
SSO-NEXT-SESSION.md
# Handoffs ENTRANTES de otros repos (WolfOps, el PoC de la tesis...). Decisión de Charlie
# (2026-08-17): se leen, se contestan y se archivan en .claude/, pero NO se versionan aquí —
# el emisor ya los guarda en su repo, y una segunda copia es una segunda cosa que mantener.
#
# ⚠️ El patrón existe porque acordarse no basta: un `git add -A` metió dos en un commit el mismo
# día que se tomó la decisión. La barra inicial ancla a la raíz, así que NUESTROS handoffs
# —HANDOFF.md, decidix/HANDOFF.md, decidix/HANDOFF-SERVER.md— siguen versionados.
/HANDOFF-*.md

# Portal (Fase 1b) — runtime artefacts y config con secretos.
# El binario, la base de datos de usuarios y la config con admin keys NO se versionan;
# se versiona portal.example.json como plantilla.
portal.json
cognix-portal.db
# ⛔ UN SOLO GLOB, y la historia de por qué es la lección. Aquí hubo `*.db`, y como sólo tapaba
# el fichero principal se añadieron `*.db-shm` y `*.db-wal` porque se colaron una vez. Eso dejaba
# el defecto por resuelto — y volvió por otra puerta: `--state x.db` NO escribe `x.db`, sino uno
# por hermana (`statePathFor` le pega el nombre de la feature detrás), así que `x.db.classix` y
# sus dos laterales no casaban con ninguno de los tres. Medido el 2026-09-21: 15 ficheros
# rastreables tras un arranque (#125).
#
# ⭐ `*.db*` los tapa todos y NO CADUCA: una lista de las cinco features escrita aquí volvería a
# quedarse corta con una sexta, que es exactamente cómo llegamos a tener tres patrones.
#
# ⚠️ Lo que sigue escapándose, dicho para que nadie lo dé por cubierto: un `--state ./foo` SIN
# extensión. Ahí la cura no es otro glob — es no escribir estado de ejecución dentro del árbol.
*.db*

# La consola — dependencias y build. `web/dist` es lo que //go:embed mete en `cognix`
# (lo compila scripts/build-console.sh, el gancho de GoReleaser): artefacto, no fuente.
# ⚠️ Se versiona SOLO el .gitkeep, porque `go:embed all:dist` necesita que el directorio
# exista o un clon limpio no compila. Las FUENTES de la SPA (web/src, web/public) sí van.
web/node_modules/
web/dist/*
!web/dist/.gitkeep

# Diagramas de estrategia — el HTML (+ render.sh) son la fuente; el PNG/PDF se regeneran.
docs/estrategia/**/*.png
docs/estrategia/**/*.pdf

# Binaries built by the root Taskfile (task build).
/bin/

# The umbrella binary when built at the repo root by hand (task build uses bin/).
/cognix

# Compiled example binaries. A 22 MB ELF was tracked in decidix/examples/eino-router,
# imported with that repo history: it is a build artifact, it is machine-specific, and it
# dwarfs every source file in the tree.
decidix/examples/*/eino-router

# Cross-compiled cgx binaries staged for the PyPI wheels (scripts/build-wheels.py).
/build/

# Salida de GoReleaser (`goreleaser build/release`). Anclado a la raiz a proposito: sin la
# barra inicial tambien casaria con web/dist, que tiene un .gitkeep que SI se versiona.
/dist/

# Portal documental (docs/site). Se versiona la FUENTE: el contenido, las plantillas,
# la variante de color y los .d2 / .vl.json. Los SVG renderizados SI se versionan —
# construir el sitio no debe exigir tener d2 instalado, y el hook de pre-commit los
# vigila. Lo de abajo es lo que Hugo y pandoc regeneran.
docs/site/public/
docs/site/resources/
docs/site/.hugo_build.lock
# El PDF lo produce `task doc:libro` y cambia en cada build; se sirve desde el portal
# construido, no desde git.
docs/site/static/cognix.pdf

# Dominios que ESCRIBE WolfOps al entrenar un modelo de un tenant. El nombre lo deriva
# la plataforma —t_<tenant>__<coleccion>__<modelo>— y ahi esta la frontera: los dominios
# de ejemplo del repo (icmp_latency, xor_bandit, power_demand…) y los escritos a mano
# (celda) SI se versionan; estos son datos de un tenant que aparecieron por usar el
# producto, con su parquet de entrenamiento y su modelo dentro.
#
# ⛔ Sin esta regla un `git add -A` se los lleva: en la sesion del 2026-08-05 fueron 93
# ficheros y 23 859 lineas a punto de entrar en un commit de tres lineas de codigo. El
# patron es ANCLADO al directorio domains/ de cada feature, no un `t_*` suelto, que se
# tragaria cualquier fichero futuro que empiece por t.
*/domains/t_*/

# Secretos que Charlie deja a mano para una prueba concreta (credencial de Proxmox para el
# alta en LXC, tokens de un piloto, claves de un despliegue de prueba).
#
# ⛔ Ninguno de estos ficheros lo genera el repo: los pone una persona, y por eso el riesgo no
# es que se acumulen sino que un `git add -A` se lleve una credencial VIVA a un commit. Es el
# mismo fallo que la regla de arriba, con peor final: los datos de tenant se borran de la
# historia, una credencial publicada hay que rotarla.
secret.txt
secrets.txt
.claude/settings.json

# Tablas de terceros del tutorial de la fábrica de modelos: se bajan con
# scripts/datasets/fetch.sh y NO se commitean.
/datasets/
