agentleFS
NashovaNashova/LLM-Dev-Framework/skills/pre-publication-audit/SKILL.md

pre-publication-audit

Skill0 starsChanged 28 days agoMITView on GitHub

Auditar un repositorio antes de hacerlo público u open source, o antes de entregarlo a un cliente o tercero. Úsala cuando el usuario diga "vamos a publicar esto", "hazlo open source", "súbelo a GitHub público", "quiero compartir este repo", "revisa que no haya info de cliente", o cuando un repo privado con historial real esté por cambiar de audiencia.

The file

We split this skill into the rules it gives an agent

2 rules. About 0 are common, 1 is distinctive, and 1 is very specific to this project.

  • ≈0

    Common · estimate

    Many files like this have a rule of this kind.

  • ≈1

    Distinctive · estimate

    This author's own choices. Worth a look.

  • 1

    Very specific

    Tied to their project's names, files or tools. Probably skip.

  • Common
  • Distinctive
  • Very specific
  1. Very specific:

    No olvides los lugares donde nadie busca: nombres de archivo, mensajes de commit, .gitattributes, comentarios de encabezado en scripts, y …

    line 43
  2. Distinctive:

    No confíes en que el push salió bien: cloná el remoto en un directorio limpio y corré el barrido de la Fase 1 sobre el clon.

    line 95

≈ “Common” is an estimate: at least 1 in 5 of the 350,495 skill files we read have a rule of the same kind, not the same words. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.

Keep what fits and drop the rest. Your version, ready for your agents.
Files
SKILL.md

Auditar un repo antes de publicarlo

Publicar un repo que nació privado no es cambiar un switch de visibilidad: es exponer todo su historial a una audiencia nueva. La mayoría de las fugas no están en el estado actual del código — están en commits viejos, en nombres de archivo, y en detalles que parecían inocuos cuando el repo era interno.

Regla que gobierna todo lo demás

Editar los archivos no borra nada del historial. Si un nombre de cliente estuvo en un commit que ya se pusheó, sigue ahí y es recuperable con git log -p, por más que el archivo actual esté limpio. Decidí qué hacer con el historial antes de publicar, no después.

Fase 1 — Barrido de confidencialidad

Buscá en todos los archivos y todos los commits, no solo en el árbol actual:

git grep -i -E '<patron>' $(git rev-list --all)

Qué buscar, en orden de gravedad:

  1. Secretos: tokens, PATs, passwords, connection strings, claves privadas. Si encontrás uno, rotalo — es lo único que invalida de verdad lo que ya quedó expuesto.
  2. Nombres propios: clientes, empresas, sistemas internos, personas, correos, handles.
  3. Giro del negocio: el sector combinado con el stack y la topología es huella digital suficiente para identificar a una empresa, aunque no aparezca su nombre.
  4. Infraestructura: IPs, hostnames, URLs internas, nombres de contenedores, organizaciones de Azure DevOps/GitLab, IDs de tickets, rutas absolutas de máquinas reales.
  5. Esquema interno: nombres de tablas y columnas, variables de entorno específicas, nombres de archivos de configuración internos.
  6. Detalle operativo explotable: esto es lo que más se pasa por alto. Un gap de configuración de producción sin remediar, una tarea destructiva que apunta a datos reales, credenciales horneadas en un artefacto de build. Documentar el incidente es valioso; publicar la vulnerabilidad vigente de un sistema real no lo es.

No olvides los lugares donde nadie busca: nombres de archivo, mensajes de commit, .gitattributes, comentarios de encabezado en scripts, y los _source.md o notas de procedencia.

Fase 2 — Anonimizar sin vaciar de contenido

El objetivo no es borrar la experiencia: es conservar el mecanismo y tirar la huella digital.

Clase de dato a tirarCon qué reemplazarlo
Nombre del sistema y de la empresaLa forma del sistema: "una consola administrativa interna"
Stack con versiones exactasLa categoría: "backend MVC + SPA + dos motores de reportes"
Sector o giro del negocioEl atributo relevante: "un sector con cumplimiento regulatorio"
Nombre real de tabla, columna o variableSu rol: "una columna de ruta"
Topología exacta (cuántos repos, cuáles, qué tecnología cada uno)El orden de magnitud: "media docena de aplicaciones independientes"
La vulnerabilidad vigente y sin remediarLa regla generalizable que sale de ella

No uses los datos reales como ejemplo de qué anonimizar. Suena obvio y es el error que cometimos al escribir esta misma skill: la tabla de arriba llevaba, en su primera versión, el stack y el sector textuales del cliente como columna de "qué tirar" — reintroduciendo en un repo público exactamente la huella digital que la skill sirve para eliminar. Lo detectó el barrido de la Fase 5 sobre el clon. Describí la clase de dato, nunca una instancia.

Renombrá también los archivos (cliente-case-study.md → case-study-<forma-del-sistema>.md) y barré todas las referencias cruzadas: la mitad del trabajo está en las ~30 menciones repartidas en docs y scripts, no en el archivo obvio.

Fase 3 — Decidir qué hacer con el historial

Tres opciones, con costos muy distintos. Es una decisión del dueño, no tuya. Presentala explícitamente:

OpciónEfectoCosto
Borrar y recrear el repoEs la única que garantiza que no quede nadaHay que rehacerlo en la UI del proveedor; se pierden stars/forks/issues
Reescribir el historial (raíz huérfana o git filter-repo) + force-pushLimpia el historial visibleRompe todo clon existente. En GitHub, los commits viejos siguen accesibles por su SHA directo hasta que su GC los recoja, lo que puede no pasar nunca sin pedirlo a soporte
Solo limpiar el estado actualRápidoLos datos siguen recuperables del historial para siempre

Si eligen reescribir: dejá un tag o rama de respaldo local apuntando al historial viejo antes de tocar nada, y avisá explícitamente que esas referencias locales no se deben pushear nunca.

Fase 4 — Higiene de repo público

  • LICENSE presente y coherente con lo que el repo redistribuye.
  • Contenido de terceros: ¿hay algo vendorizado? Verificá su licencia. Si es MIT, mantené la atribución. Si la licencia no consta o no es OSS, no lo redistribuyas — enlazá al upstream y dejá que el usuario lo instale.
  • .gitignore no excluye archivos que la documentación exige trackear (plantillas de config, *.template.*).
  • README no promete archivos, scripts o capacidades que no existen.
  • Los conteos y afirmaciones numéricas coinciden con el filesystem real (ver doc-drift-check).

Fase 5 — Verificar desde afuera

No confíes en que el push salió bien: cloná el remoto en un directorio limpio y corré el barrido de la Fase 1 sobre el clon. Es la única comprobación que refleja lo que ve un tercero.

git clone <url> /tmp/verificacion && cd /tmp/verificacion
git grep -i -E '<patron>' $(git rev-list --all)   # debe devolver 0 resultados

Checklist

  • Barrido sobre todos los commits, no solo el árbol actual.
  • Secretos encontrados: rotados, no solo borrados.
  • Anonimización conserva el mecanismo y elimina la huella.
  • Archivos renombrados y todas las referencias cruzadas barridas.
  • La decisión sobre el historial la tomó el dueño, informado del costo real de cada opción.
  • Respaldo local del historial viejo, con aviso de no pushearlo.
  • Licencias de terceros verificadas antes de redistribuir.
  • Verificado sobre un clon fresco del remoto.

Relacionado

  • docs/03_architecture_patterns/secrets-management.md — por qué rotar le gana a reescribir el historial.
  • skills/doc-drift-check/SKILL.md — para la Fase 4.
  • examples/ — los tres casos de estudio del framework son el resultado de aplicar esta skill.

Download now (ZIP)

Does it work?

Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.

No reviews yet

People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.

  • It worked
  • Partly
  • It didn't
What did you use it for? e.g. Reviewing pull requests in a Rails app

Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.

Your trail

Files you open will collect here, so you can find them again.

Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.

Now do this for your own.

Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.