Implementa Plum para Mejorar la Trazabilidad en tus Commits
¿Te da pánico pensar que la IA pueda llenar tu repo de código que nadie entiende? Bienvenido a la nueva crisis del software.
Tiempo estimado de lectura: 5 min
- La velocidad de generación de código por IA supera la capacidad humana de registrar intención.
- Plum captura decisiones en el momento del commit para mantener spec, tests y código sincronizados.
- Sin checkpoints canónicos (hooks de Git) la intención se evapora y se pierde propiedad intelectual.
Introducción
Poca gente lo dice claro: ahora la IA escribe más rápido de lo que podemos entender. Y velocidad sin intención es solo ruido estructural.
This is her code. This is what she was managing. This is her VS code. Margaret Hamilton tenía la plomada mental de la arquitectura. Hoy tenemos agentes que empiezan a escribir habitaciones enteras sin planos. ¿Quién firma eso cuando se cae el techo?
Resumen rápido (lectores con prisa)
Plum captura y versiona decisiones (humanas y de agentes) en el momento del commit mediante hooks de Git; obliga a validar intenciones y sincroniza spec ↔ tests ↔ código. Es un checkpoint canónico para trazabilidad y responsabilidad.
¿Qué hace Plum en una frase?
Captura decisiones (humano + agente) en el momento del commit, te pide que las valides, las convierte en artefactos versionables y sincroniza spec ↔ tests ↔ código.
¿Por qué no puede ser simplemente “una skill” dentro del agente?
Porque una skill es una sugerencia. Una sugerencia se ignora cuando el plazo aprieta. Necesitamos un checkpoint canónico que no puedas saltar: un hook de Git que detenga el commit hasta que la intención quede registrada. Eso es lo que hace Plum.
Cómo se ve en la práctica (sin tecnicismos aburridos)
- Instalas Plum.
- Ejecutas
plum initen la raíz del repo. - Plum crea una carpeta
.plum, un.plumignorey agrega hooks a Git. - Haces cambios usando un agente.
- Intentas
git commit. - Plum analiza diffs + traces del agente.
- Si hay decisiones detectadas, el commit falla hasta que las apruebes, edites o rechaces.
- Si apruebas, Plum actualiza la spec (Markdown) y genera un registro en JSONL con la decisión, quién la aprobó, branch, timestamps y si el LLM sugirió o el humano decidió.
Ventajas prácticas que notarás rápido
- Un agente ya no “olvida” reglas que le dijiste hace semanas. El agente puede consultar el árbol de decisiones antes de actuar.
- Cuando alguien pregunta “¿por qué esto está así?”, la respuesta no es “creo que lo discutimos en Slack”. Es un enlace a la decisión y su justificación.
- El code review pasa de revisar sintaxis a revisar intención. Eso reduce regresiones silenciosas.
Limitaciones honestas (sí, las tiene)
- Hoy Plum enlaza pruebas vía Pytest. Si tu pipeline usa otro runner, la cobertura spec→tests no funcionará todavía.
- Identificar decisiones no es perfecto. La deduplicación es fuzzy y repo-específica. Hay parámetros que ajustar.
- Reversión automática al rechazar decisiones aún no es robusta. Si rechazaste una decisión en la CLI, el rollback con el agente es un flujo que requiere trabajo fino.
- En proyectos extremadamente grandes sin spec previa (legacy), Plum no hace magia: necesita spec por delante para funcionar bien. Backfilling masivo aún está en la hoja de ruta.
Diseños críticos que no puedes ignorar
- Debe ser externa al LLM. Si la gobernanza vive dentro del agente, la gente la ignorará.
- Debe fallar commits. Sin ese checkpoint, es teoría bonita y nadie la respeta.
- Usa DSPy u otro framework para estructurar LLM calls cuando sea absolutamente necesario. Pero siempre que puedas, valida con código determinista: la verificación debe ser programable, repetible y testeable.
- La experiencia humana importa. Si cada hotfix genera 5 decisiones triviales, la herramienta se vuelve molesta. Debe existir un umbral de interrupción configurable. Tú decides: banca cero tolerancia para banca; modo “dangerously approve all” para experimentos.
Casos reales, concretos
- PM cambia la regla de comisiones a las 3am. El agente aplica el hotfix. Plum detecta 3 decisiones: cambio de fórmula, invalidación de cache, ajuste de test. Te las muestra. Apruebas. Plum actualiza el spec y enlaza el test que cubre la nueva regla. Un auditor te lo agradece en el futuro.
- Fix urgente en prod. Actúas rápido. Plum puede configurarse para no interrumpir decisiones triviales en ramas específicas. O puedes exigir aprobación humana para cambios en
maino en módulos críticos. - Refactor mayor. Plum obliga a agrupar decisiones y a shardar la spec. El árbol de decisiones te ayuda a no romper invariantes.
Checklist para empezar hoy (sin dramas)
- Poner spec en Markdown y versionarla. Sí, en el repo.
- Tener tests automatizados. Si usas Python: Pytest. Si no, prepara el adapter.
pip install plum-devplum init(apunta a tu carpeta de specs y al directorio de tests)- Añade
.plumignorepara excluir archivos ruidosos - Configura tolerancias: qué decisiones bloquean commit y cuáles no
- Empieza con una rama pequeña y haz dogfooding: úsenlo para gestionar el proyecto que desarrolla Plum. Si no duele, no funciona.
Comportamientos que salvarán tu empresa (si los adoptas)
- Nunca permitas que un cambio de negocio se quede solo en Slack.
- No confíes en mensajes de commit como única fuente de intención.
- Exige artefactos: decisión aprobada, spec actualizada, test que falla sin la decisión.
Metáfora rápida porque las metáforas funcionan
Tu repo es un edificio. Los agentes son obreros hiperactivos con taladros. Si no tienes planos actualizados y un inspector que firme cada cambio, terminarás con un edificio que parece Frankenstein. Plum es la plomada. No construye paredes. Te dice si las paredes están verticales.
Lo práctico, ahora mismo
- Sí, puedes
pip install plum-devy jugar en una rama de feature. - Sí, puedes ajustar el umbral para que no te moleste en hotfixes.
- No, no es todavía plug-and-play para proyectos legacy gigantes.
- Sí, si usas agentes en producción sin registrar decisiones, estás acelerando una deuda técnica que alguien pagará caro.
¿Quieres el template JSONL + flujo de PR listo para copiar en tu repo? Respóndeme este mensaje y te lo envío.
Quieres algo más directo: pip install plum-dev, plum init, haz un commit con un agente y verás cómo el commit falla hasta que registras la intención. Prueba en una rama de sandbox.
No es sexy. Es aburrido. Y es exactamente lo que separa equipos que escalan de equipos que heredarán un desastre técnico eterno.
Dominicode Labs
Si trabajas con automatización, agentes o workflows y quieres seguir explorando prácticas de gobernanza y trazabilidad, revisa Dominicode Labs como continuación lógica de estas ideas. Encontrarás recursos y experimentos sobre integración de agentes y control de intención.
FAQ
- ¿Qué es Plum?
- ¿Por qué necesito un hook de Git para registrar decisiones?
- ¿Cómo integra Plum spec y tests?
- ¿Qué pasa en hotfixes de emergencia?
- ¿Funciona con pipelines que no usan Pytest?
- ¿Cómo evita Plum el ruido en cambios triviales?
- ¿Dónde están los registros de decisiones?
¿Qué es Plum?
Plum es una herramienta que captura decisiones (humanas y de agentes) en el momento del commit mediante hooks de Git, convierte esas decisiones en artefactos versionables y sincroniza spec, tests y código para mantener trazabilidad.
¿Por qué necesito un hook de Git para registrar decisiones?
Porque un hook crea un checkpoint canónico que no se puede saltar: obliga a registrar intención antes de completar el commit. Sin ese mecanismo la gobernanza se vuelve opcional y se pierde trazabilidad.
¿Cómo integra Plum spec y tests?
Plum analiza diffs y traces de agente, propone cambios en la spec (Markdown) y genera enlaces entre requisitos atómicos, tests y commits. Además crea un registro JSONL con las decisiones para auditoría.
¿Qué pasa en hotfixes de emergencia?
Plum puede configurarse para reducir la interrupción en ramas específicas o para exigir aprobación humana en ramas críticas como main. También puedes ajustar umbrales para decisiones que no bloqueen el commit.
¿Funciona con pipelines que no usan Pytest?
Hoy Plum enlaza pruebas vía Pytest por defecto. Si tu runner es otro, necesitarás un adapter: la cobertura spec→tests no funcionará hasta que exista soporte para tu runner.
¿Cómo evita Plum el ruido en cambios triviales?
Plum usa un .plumignore para excluir archivos ruidosos y tiene parámetros configurables que definen umbrales de interrupción para que no genere decisiones por cada cambio menor.
¿Dónde están los registros de decisiones?
Plum genera un archivo JSONL con entradas que incluyen la decisión, quién la aprobó, branch, timestamps y si fue sugerida por LLM o aprobada por humano. Es un fichero indexable y enlazable a PRs.
