Saltar al contenido

PDD Kit verifica código creado por agentes: qué demuestra y qué queda fuera

noviembre 6, 2026
Flujo de código generado por agentes atravesando pruebas formales y controles de verificación

Microsoft Research y GitHub Next han presentado PDD Kit, un prototipo que intenta resolver uno de los problemas más incómodos del desarrollo con agentes: cuando una herramienta genera miles de líneas, revisar cada una deja de ser una estrategia escalable. Su propuesta no consiste en confiar más en el modelo, sino en transformar la intención humana en una especificación y exigir una prueba verificable para las partes críticas del programa.

La idea es relevante, pero necesita contexto. PDD Kit solo verifica Rust por ahora, no prueba todos los componentes de una aplicación y depende de que la especificación aprobada sea correcta. Es una investigación prometedora, no una garantía universal de que cualquier software creado con inteligencia artificial sea seguro.

Índice

Índice

Qué es PDD Kit y qué problema intenta resolver

PDD son las siglas de Proof-Driven Development, o desarrollo guiado por pruebas formales. El anuncio de Microsoft Research del 5 de noviembre de 2026 describe PDD Kit como una colaboración con GitHub Next. Se integra en Chopin, un entorno de planificación compartida en el que personas y agentes pueden trabajar sobre un mismo documento.

El punto de partida es sencillo: un agente puede producir código más deprisa de lo que una persona puede leerlo. Una revisión tradicional línea por línea puede detectar muchos errores, pero se vuelve difícil cuando crecen el volumen de cambios y el número de tareas paralelas. Además, leer el código no siempre demuestra que el programa cumple todas las propiedades que se esperan de él.

PDD Kit desplaza la revisión hacia la intención. Primero pregunta qué debe hacer el sistema, qué casos deben rechazarse y qué componentes quedan fuera de la prueba. Después convierte una parte de esas decisiones en contratos formales. Una herramienta determinista comprueba si el código satisface esos contratos; para lo que no puede demostrarse formalmente, se conservan pruebas empíricas y una lista explícita de supuestos.

La diferencia entre una prueba formal y un test

Un test ejecuta el programa con entradas concretas y observa el resultado. Si una función se prueba con diez contraseñas, sabemos cómo se comportó en esos diez casos. El test puede ser excelente y aun así no cubrir una combinación inesperada. Por eso las pruebas unitarias, de integración y de extremo a extremo son necesarias, pero no demuestran por sí solas el comportamiento para todas las entradas posibles.

La verificación formal utiliza una especificación matemática y un verificador. En PDD Kit, ese trabajo se apoya en Verus, un lenguaje y conjunto de herramientas para demostrar propiedades de programas escritos en Rust. El código incluye contratos que expresan qué debe cumplirse antes y después de una operación. El verificador utiliza el solucionador Z3 para comprobar mecánicamente que la implementación respeta esas condiciones dentro del modelo definido.

La conclusión correcta no es que una prueba formal sea infalible. Demuestra que el código satisface una especificación bajo ciertos supuestos. Si la especificación describe mal la intención, si una biblioteca externa se presupone correcta o si existe un fallo en la cadena de herramientas, la garantía tiene límites. PDD Kit intenta hacer visibles esos límites en lugar de ocultarlos detrás de una etiqueta genérica de «verificado».

Cómo funciona el flujo de trabajo

El proceso empieza con requisitos escritos en lenguaje natural. PDD Kit pregunta por ambigüedades, explica el código relevante y registra las respuestas en un artefacto de intención. Ese documento actúa como puente entre lo que una persona quiere y lo que una máquina puede comprobar. La persona revisa la intención, las decisiones y los límites antes de aprobar la especificación.

Las partes que pueden expresarse formalmente se convierten en contratos de Verus. Las partes que dependen de interfaces de usuario, servicios externos o componentes difíciles de modelar se traducen en pruebas. El resultado identifica tres categorías:

  • Probado formalmente: el verificador confirma que una parte del código cumple su contrato para las entradas cubiertas por el modelo.
  • Confiado y sometido a tests: el sistema asume un comportamiento de un componente externo y lo comprueba con pruebas empíricas.
  • Asumido: la garantía depende de herramientas como el compilador, Verus, Z3 y sus bibliotecas.

Después, un agente escribe la implementación y la prueba. Verus decide de manera determinista si la demostración es válida. Un modelo adicional busca huecos entre requisitos, especificaciones y resultados, pero no sustituye al verificador. Si aparece una contradicción en la especificación, el flujo devuelve la decisión a la persona en lugar de rebajar silenciosamente el contrato.

El ejemplo de la tienda y el inicio de sesión

Microsoft Research aplicó el prototipo a Pet Store, una aplicación web de unas 5.000 líneas de Rust. El backend utiliza Axum y SQLite; la interfaz usa Leptos compilado a WebAssembly. Para explicar el método, el equipo se centró en el inicio de sesión, una zona sensible porque un error puede entregar un token al usuario equivocado o conceder permisos de administrador.

La petición humana inicial fue deliberadamente breve: solo debe emitirse un token con la contraseña correcta y únicamente las cuentas administradoras deben obtener un token de administrador. PDD Kit transformó esas frases en decisiones más precisas: qué tabla consultar, cómo comparar la contraseña, qué identificador incluir en el token y qué respuesta devolver cuando algo falla.

El equipo afirma haber demostrado los cuerpos de varias funciones centrales de la lógica de acceso. En cambio, las consultas a la base de datos, la comprobación de la contraseña mediante bcrypt, el reloj y la firma del token quedaron dentro de la base de confianza. Esos componentes recibieron tests con la implementación real. Esta separación importa: no sería exacto decir que toda la aplicación o toda la seguridad del inicio de sesión quedaron demostradas matemáticamente.

Qué revisa una persona si ya no lee cada línea

La intervención humana cambia de lugar. El desarrollador revisa el plan en lenguaje natural, la especificación formal y los componentes que la prueba da por buenos. También debe decidir si el comportamiento especificado es realmente el que necesita el producto. Una prueba impecable de una regla equivocada sigue produciendo un resultado equivocado.

Este enfoque puede ser especialmente útil cuando el riesgo se concentra en funciones pequeñas: permisos, autenticación, límites de gasto, cálculo de saldos o decisiones de acceso. Intentar verificar una aplicación completa desde el primer día puede ser costoso. Los autores recomiendan empezar por las partes donde un fallo tiene mayor impacto e incrementar la cobertura formal con el tiempo.

La disciplina se parece a una revisión de requisitos más rigurosa. En lugar de preguntar únicamente «¿el código parece correcto?», el equipo pregunta «¿hemos definido todos los casos importantes, incluidos los rechazos, y podemos demostrar que la implementación respeta esas decisiones?».

Qué no resuelve PDD Kit

No verifica todos los lenguajes. El prototipo trabaja con Rust porque Verus permite razonar directamente sobre programas escritos en ese lenguaje. Un proyecto en JavaScript, Python o Java no obtiene automáticamente las mismas garantías. Puede aislar una parte crítica en Rust o utilizar enlaces entre lenguajes, pero eso introduce fronteras nuevas que también deben revisarse.

No elimina la base de confianza. Una aplicación real depende de bibliotecas, sistemas operativos, bases de datos, redes y servicios de terceros. Cada supuesto reduce el alcance de la conclusión. El valor está en enumerarlos y probarlos cuando sea posible, no en fingir que desaparecen.

No demuestra que la intención sea buena. La herramienta puede ayudar a detectar ambigüedades y dos agentes revisores pueden cuestionar la especificación, pero la aprobación final sigue siendo humana. Una regla discriminatoria, insegura o incompleta puede expresarse de forma matemáticamente precisa.

No convierte una investigación en un producto maduro. Microsoft lo presenta como prototipo. Todavía faltan datos públicos sobre costes de adopción, mantenimiento de las pruebas, rendimiento en proyectos grandes, integración con equipos diversos y tasa de errores en situaciones reales.

Hechos confirmados frente a predicciones

Hechos confirmados

  • Microsoft Research publicó el proyecto el 5 de noviembre de 2026 como colaboración con GitHub Next.
  • PDD Kit combina especificaciones en Verus, pruebas empíricas y revisión explícita de la base de confianza.
  • El ejemplo público utiliza una aplicación completa en Rust y demuestra una parte de la lógica de inicio de sesión.
  • El verificador es determinista; los modelos ayudan a redactar código, contratos y revisiones, pero no deciden si la prueba matemática pasa.
  • El soporte actual se limita a Rust y los autores califican el sistema como prototipo de investigación.

Predicciones razonables, todavía no demostradas

  • La verificación formal podría ganar peso a medida que los agentes produzcan más cambios simultáneos.
  • Los equipos podrían revisar menos líneas y dedicar más tiempo a requisitos, permisos y límites de confianza.
  • Herramientas similares podrían extenderse a otros lenguajes, pero no existe un calendario confirmado.
  • Una mejor especificación podría reducir regresiones, aunque todavía hacen falta estudios independientes y proyectos de mayor escala.

Cómo evaluar una herramienta de verificación antes de adoptarla

Una empresa no debería elegirla por la palabra «prueba», sino por el alcance exacto de la garantía. Conviene pedir un inventario de funciones demostradas, propiedades verificadas, componentes confiados y tests que cubren las fronteras. También debe comprobar cuánto tiempo necesita el equipo para mantener contratos cuando cambian los requisitos.

Un piloto útil puede centrarse en una función crítica y estable. El equipo define el comportamiento permitido y prohibido, prepara casos adversos, mide el esfuerzo de formalización y compara los defectos detectados con su proceso habitual. El indicador no es solo cuántas líneas genera el agente, sino cuántos problemas llegan a producción y cuánto cuesta comprender o modificar la prueba.

La revisión de seguridad sigue siendo necesaria. Nuestra guía sobre cómo revisar código creado con asistentes de inteligencia artificial explica controles complementarios: dependencias, análisis estático, gestión de secretos, despliegue gradual y reversión. La verificación formal cubre propiedades definidas; no sustituye una arquitectura segura ni una operación responsable.

Relación con el auge de agentes que programan

El anuncio llega en un momento en que proveedores y equipos están construyendo infraestructura específica para trabajo paralelo. La adquisición anunciada de Pierre por OpenAI, analizada en nuestro artículo sobre revisión de código y control de versiones para agentes, aborda cómo almacenar, recorrer y comparar cambios. PDD Kit se sitúa en otra capa: intenta demostrar que ciertas decisiones del programa coinciden con una especificación aprobada.

Ambas líneas son complementarias. Un repositorio necesita trazabilidad para saber qué cambió y quién lo aprobó; una prueba formal necesita contratos claros y una cadena reproducible para saber qué se demostró. La velocidad de generación sin estas capas puede aumentar la cantidad de código y también la cantidad de errores difíciles de revisar.

Qué significa para quien está aprendiendo a crear aplicaciones

La lección práctica no es que un principiante deba aprender lógica formal antes de construir un prototipo. Es que generar una aplicación no equivale a validarla. Una formación como el análisis de creación de apps con ayuda de inteligencia artificial puede servir para ordenar el proceso, pero los proyectos que gestionan cuentas, pagos o datos sensibles necesitarán pruebas, controles y, en algunos casos, revisión profesional.

Lo mismo ocurre en ámbitos especializados. Nuestro análisis comercial del curso de Revit, BIM y renderizado subraya que manejar una herramienta no sustituye los conocimientos técnicos ni la responsabilidad sobre el resultado. En software, una interfaz que funciona durante una demostración tampoco demuestra que los permisos, errores y casos extremos estén bien resueltos.

Una lista práctica para equipos

  1. Elegir una función donde el fallo tenga consecuencias claras y medibles.
  2. Escribir primero qué debe ocurrir y qué debe rechazarse.
  3. Separar las propiedades demostrables de los componentes que habrá que asumir o probar.
  4. Hacer que una persona distinta revise la especificación, no solo el código.
  5. Conservar tests para las fronteras externas y casos de integración.
  6. Registrar la versión del compilador, el verificador y las dependencias.
  7. Medir el coste de mantener la prueba cuando cambia el producto.
  8. No describir una parte verificada como si toda la aplicación estuviera demostrada.

Conclusión: más evidencia y menos confianza ciega

PDD Kit apunta a un cambio útil: si los agentes escriben más código del que una persona puede inspeccionar, la respuesta no debería ser bajar el nivel de revisión. Puede consistir en expresar mejor la intención, demostrar las propiedades críticas y declarar con honestidad qué queda fuera de la prueba.

La propuesta todavía es limitada y experimental. Solo trabaja con Rust, depende de una especificación correcta y mantiene una base de componentes confiados. Aun así, ofrece una idea valiosa para 2026: la productividad no debe medirse únicamente por la velocidad con la que aparece código nuevo, sino por la calidad de la evidencia que permite aceptarlo con responsabilidad.

Fuentes primarias consultadas: Microsoft Research, GitHub Next y la documentación oficial de Verus. Publicado con fines informativos; las predicciones se identifican de forma separada.