Skill sanitize: no doxxing, no credenciales en repos (2026-09-27)

El incidente (por qué existe esto)

Se espejó [usuario]/clinica-chat a Hugging Face con:

  • correo personal en el README y en los commits,
  • ID de cuenta de Cloudflare y el nombre de la cuenta,
  • URL del Worker que revela el subdominio de la cuenta,
  • y un mapa de credenciales: el doc …credenciales-cloudflare-…-estado.md (líneas del rc del shell, ids/nombres de token, zonas, permisos).

Ningún valor de token salió; lo que salió fue PII + identificadores + un mapa de dónde viven las credenciales. “Privado” (GitHub y HF lo eran) no es “seguro”.

Qué se hizo

  1. HF: repo [usuario]/clinica-chat borrado (hf repos delete … --yes, 404 confirmado).
  2. Rama de trabajo: README limpio; borrado el doc de credenciales; URLs de cuenta y menciones al rc del shell genericizadas; datos reales a DEPLOY.local.md (*.local.md, gitignored); default del test LLM a localhost.
  3. Historial reescrito con git filter-repo: archivos + mensajes + metadata de autor (correo → noreply). Force-push de las dos refs (main y wa-customer).
  4. Verificado con clon fresco, no de oídas.

Dos trampas que costaron tiempo

  • El force-push a main no basta. wa-customer seguía apuntando al historial viejo; un clon fresco por eso traía los datos. Hay que limpiar todas las refs.
  • El correo vive en la metadata de cada commit, no solo en los archivos.

La skill (creada)

  • ~/.claude/skills/sanitize/SKILL.md — cuándo y cómo.
  • ~/.claude/skills/sanitize/scan.sh — escáner (árbol + --history; y --strict). exit 1 si hay blockers. Detecta correos, prefijos de token conocidos, private keys, y punteros a credenciales (rc del shell, netrc, credenciales de AWS). Ve archivos untracked (clave para un pre-commit).
  • ~/nef/pii-markers.txt — marcadores propios (correos por local-part, dominios, infra). Local, nunca versionado.

El escáner encontró un segundo leak que se me pasó

decisions/2026-09-27-plan-evaluacion-rag-pymes.md:76 tenía un correo personal de la UNAM. Ya purgado también del historial. (La dirección exacta se redactó aquí a propósito: escribirla sería reintroducirla.)

Lección: correr el escáner ANTES de commitear, no confiar en el ojo.

Regla

Antes de commit / push / espejar a un tercero (HF, Vercel, Pages):

bash ~/.claude/skills/sanitize/scan.sh . --history

Datos reales → *.local.md (ignorado). Nunca el valor en un archivo versionado ni en un doc que se espeja.