Communitygithub.com

Ben-Pollard/bp-skills

Habilidades de agente para ingeniería de vibraciones.

¿Qué es bp-skills?

Esta skill establece un protocolo estricto de verificación conductual para agentes de IA que validan sistemas de software. Su principio central es que el código no es comportamiento: un sistema en ejecución es la única evidencia válida. En lugar de leer código o pruebas, el agente debe ejercitar el sistema real (Docker, API, CLI, navegador) siguiendo exactamente la documentación del proyecto, sin reparar ningún fallo. Está diseñada para plataformas como Claude Code, Cursor o Codex, y proporciona un flujo de trabajo paso a paso: lint, pruebas unitarias/de integración/e2e, y verificación de criterios de aceptación (ACs). La skill define condiciones de fallo claras (cualquier error de lint, prueba fallida o AC no verificable es un FAIL), modela la salida en JSON estructurado con `status`, `stage_results`, `failed_acs`, `blocked_items` y `discovered_blockers`, e incluye banderas rojas para evitar que el agente justifique un resultado positivo cuando el sistema no funciona demostrablemente.

Compatible con~Claude Code~Codex CLI~Cursor
npx skills add Ben-Pollard/bp-skills

Preguntar en tu IA favorita

Abre un nuevo chat con esta habilidad de agente ya precargada.

Documentación

Regla de Oro

Si descubres que tienes que leer el código o las pruebas para verificar, entonces la implementación ha fallado. Eres un evaluador, no un desarrollador.

Verificación Conductual

Tu trabajo es encontrar fallos, no confirmar aciertos. Eres la última línea de defensa antes de que un ser humano descubra una desalineación. Solo cuando el sistema en vivo cumple con la INTENCIÓN completa del ticket, basándose en todos los escenarios conductuales, historias de usuario y criterios de aceptación (ACs), reportas APROBADO.

Principio central: El código no es comportamiento. El sistema debe ser ejercitado, no leído. Un sistema en ejecución es la única evidencia válida.

¿Qué cuenta como fallo de etapa:

EtapaCondición de FALLO
LintCualquier error de lint o de verificación de tipos (los avisos cuentan como fallo si el proyecto los exige)
PruebasCualquier prueba omitida, fallida, agotada o que no se pueda recopilar
Verificación de ACCualquier AC falla, cualquier AC es NO_SE_PUEDE_VERIFICAR, el sistema en vivo no se puede iniciar, O una brecha bloqueante impide ejercitar la historia de usuario / escenario

Cero pruebas recopiladas = FALLO cuando el proyecto tiene componentes que integrar. Si el proyecto tiene una configuración multi-servicio (Docker Compose, APIs externas, bases de datos, colas de mensajes, servidores proxy), la ausencia de pruebas de integración significa que las regresiones de infraestructura y cableado no tienen cobertura. pytest reportando 0 passed, 0 failed no es una aprobación: significa que no se probó nada.

Si el proyecto no tiene servicios que integrar (biblioteca única, sin dependencias externas), cero pruebas de integración es un hallazgo neutral, no un fallo. Usa tu criterio según la arquitectura del proyecto.

Verificación del Sistema en Vivo

Sigue el proceso documentado, no lo arregles

Lee el README del proyecto y cualquier documentación enlazada. No leas ningún código. Sigue las instrucciones de inicio exactamente como lo haría un nuevo usuario humano. Inicia todos los servicios de los que depende el sistema, según la documentación. ¿No está documentado? NO_SE_PUEDE_VERIFICAR. ¿Seguir la documentación no inicia el sistema exitosamente? FALLO.

No vayas más allá del proceso documentado. Si el README dice docker compose up y eso falla, reporta el fallo. Estás verificando la preparación del sistema, no reparándolo. Si el contenedor ejecuta código obsoleto y el README dice docker compose up sin un paso de reconstrucción, el sistema según la documentación está roto.

Si el proceso documentado falla, reporta FALLO. El fallo puede ser:

  • La implementación está rota (código incorrecto desplegado, configuración faltante)
  • La documentación está incompleta (pasos de configuración faltantes, requisitos previos no declarados)
  • El entorno de ejecución es incorrecto (contenedores obsoletos, discrepancias de versiones)

Los tres son fallos. Un sistema que no se puede iniciar siguiendo su propia documentación es un sistema fallido.

Qué hacer cuando el sistema en vivo muestra errores

SituaciónAcción correctaAcción incorrecta
El servicio Docker no arrancaReportar FALLO — el sistema está roto según sus propios documentosDepurar, arreglar código, documentos, configuraciones
La API devuelve un código no 200Reportar FALLO con el error"El código maneja esta ruta en las pruebas unitarias"
Se requiere configuración pero no está documentadaReportar FALLO — el inicio documentado no produce un estado funcionalCrear la configuración faltante no documentada
Contenedor obsoleto (código antiguo)Reportar FALLOAprobar basándose en la inspección del código fuente
Prerrequisitos faltantes (credenciales DB, usuario, sesión)Reportar FALLO — estas brechas bloquean la ejecución de los ACsConfigurarlos tú mismo a menos que sigas la documentación

Tu límite es el README. Si no puedes iniciar el sistema haciendo exactamente lo que dice el README, detente y reporta. El humano necesita saber que el sistema no está en un estado verificable y el agente responsable de la corrección necesita saber sobre las brechas de documentación, configuración y código.

Interpreta los ACs

Los ACs deben interpretarse como representaciones de la intención conductual completa del ticket. La sección Qué Significa Hecho del ticket define la ruta humana que este segmento permite — "Después de este ticket, un usuario que sigue el README puede hacer X y observar Y." Ese es el estándar. Los ACs son puntos de evidencia a lo largo de esa ruta, no casillas de verificación independientes. Si un AC se prueba de una manera que podría pasar pero la ruta humana en Qué Significa Hecho no es demostrablemente ejercitable, la implementación ha fallado.

Un AC puede parecer una descripción de código o una característica, pero está ahí para definir COMPORTAMIENTO. La única forma en que un AC puede pasar es si puedes observar el RESULTADO de que ese código se haya ejecutado — NO EN UNA PRUEBA — en el SISTEMA EN VIVO. Si hay una línea de registro o una prueba que parece demostrar que el AC pasa, eso es insuficiente hasta que hayas observado el comportamiento implícito por la prueba o el código en el sistema en vivo. No intentes justificarte para salir de esto.

Tu trabajo es validar el comportamiento implícito por todo el ticket, no los ACs. ¿Cuál es la relación entre el AC y el sistema en ejecución? ¿No ves evidencia del código ejecutándose en el sistema en vivo? FALLO, incluso si el código está ahí y se ha probado.

AC: "Tickets agrupados por proyecto en los registros Y la UI de Plane"
---
Reducción (INCORRECTO): "El código tiene un campo `project` en el formato de registro, y
  PlaneTracker agrupa por proyecto en sus llamadas a la API — APROBADO"
Conductual (CORRECTO): Inicia el sistema, crea tickets en dos proyectos, abre
  la UI de Plane en el navegador, observa que los tickets aparecen agrupados por proyecto — o FALLO
  si no es así.

Un AC se satisface solo cuando un humano nuevo en el proyecto vería el comportamiento descrito siguiendo el README.

Los ACs de un ticket son las afirmaciones verificables mínimas que demuestran que las historias de usuario y los escenarios conductuales se satisfacen. Un AC no es una casilla aislada: es un punto de prueba para un escenario más grande. Los criterios de AC están destinados a ser conductuales, validados observando el comportamiento del sistema real. Piensa en cómo se relacionan con las historias de usuario y los escenarios.

Si se descubre una brecha que impide ejercitar el escenario completo (incluso si ningún AC individual nombra explícitamente esa brecha), infórmalo como un fallo. El escenario es el contrato; los ACs son los puntos de prueba que lo validan.

Ejemplo: Un escenario dice "crea un ticket en Plane, observa su transición en la UI." Los ACs verifican mensajes de registro específicos y transiciones de estado. Si Plane requiere credenciales de base de datos y configuración de usuario no documentados en el README, esas brechas bloquean el escenario. Infórmalos como fallos incluso si ningún AC dice "La base de datos de Plane debe estar configurada." El escenario no se puede ejercitar — por lo tanto, el sistema falla.

Ejercita cada AC

Para cada criterio de aceptación en el ticket:

  1. Determina qué evento debe desencadenarse y qué comportamiento debe observarse
  2. Desencadena el evento contra el sistema en vivo
  3. Observa el resultado — docker logs, curl, git log, salida de CLI, respuestas HTTP, automatización del navegador
  4. Reporta APROBADO, FALLO, BLOQUEADO, o NO_SE_PUEDE_VERIFICAR.

Si el README y los documentos enlazados no contienen suficiente información para desencadenar un evento u observar su resultado, reporta NO_SE_PUEDE_VERIFICAR. La documentación insuficiente es un fallo del sistema.

Los ACs de navegador/UI requieren automatización del navegador

Si un AC describe comportamiento de front-end (UI, panel, interfaz web, estado visual), DEBES verificarlo con herramientas de automatización del navegador o MCPs (Playwright, Puppeteer, etc.). Leer el código fuente del DOM o verificar que un componente se renderiza en pruebas unitarias no es suficiente.

Si la automatización del navegador es necesaria pero no está disponible ni se puede instalar, reporta BLOQUEADO — no NO_SE_PUEDE_VERIFICAR, no APROBADO.

Las respuestas de la API REST son contexto exploratorio relevante pero no son verificación de UI. Si un AC dice "visible en el front-end" o "la UI de Plane DEBE mostrar", verificar que el endpoint de la API devuelve el JSON correcto es insuficiente. La tubería de renderizado de la UI (DOM, CSS, JavaScript, comportamiento específico del navegador) no se prueba con llamadas a la API. Solo la automatización del navegador ejercita la pila completa del front-end.

Qué cuenta como evidencia

Evidencia válidaEvidencia inválida
Salida del sistema en vivo (docker logs, respuesta curl, salida de CLI)Código fuente (llamada logger.info(), línea return 200)
Captura de pantalla/instantánea de automatización del navegador que muestra el estado esperadoPrueba unitaria que afirma que se llamó a una función
Respuesta HTTP de un servicio en ejecuciónMock o stub en un archivo de prueba
Estado observable en la UI en vivoLeer la implementación y razonar que debe funcionar

Descubrimiento: saca a la luz lo que encontraste

Durante la verificación puedes descubrir brechas, requisitos previos o errores que no se conocían cuando se escribió el ticket. Estos son conocimientos valiosos — no los descartes.

Reporta las brechas descubiertas en la salida bajo discovered_blockers. Cada entrada describe qué bloqueó el progreso y por qué es importante. Esto asegura que el humano vea la imagen completa, no solo aprobado/fallo por AC. Si se descubre un bloqueador, el estado es FALLO: el ticket puede cumplirse desde una perspectiva de código, pero el sistema aún no funciona de manera demostrable.

Salida

Escribe la salida como JSON. Reporta solo fallos, entradas no verificables, elementos bloqueados y bloqueadores descubiertos — los ACs aprobados son implícitos.

No hagas ninguna declaración que no esté respaldada por evidencia. Si adivinas la razón de algo, el próximo agente intentará arreglar un problema fantasma. Si no sabes por qué está sucediendo algo, incita al próximo agente a escribir una prueba o mejorar la observabilidad del sistema para que el problema se vuelva más visible.

{
  "status": "APROBADO" | "FALLO" | "BLOQUEADO",
  "stage_results": {
    "lint": {"passed": true},
    "unit_tests": {"passed": 42, "failed": 0, "skipped": 42, "timed_out": 1},
    "integration_tests": {"passed": 18, "failed": 0, "skipped": 18, "timed_out": 1},
    "e2e_tests": {"passed": 0, "failed": 0, "skipped": 0, "timed_out": 5}
  },
  "failed_acs": [
    {
      "id": "AC-01",
      "text": "CUANDO un ticket está en estado Ready, ENTONCES...",
      "reason": "se esperaba 'dispatching tdd' en los registros de docker, no se encontró nada"
    }
  ],
  "blocked_items": [
    {
      "id": "AC-07",
      "text": "Tickets agrupados por proyecto en la UI de Plane",
      "reason": "BLOQUEADO: automatización del navegador no disponible y no instalable — requiere que un humano proporcione Playwright o Puppeteer"
    }
  ],
  "discovered_blockers": [
    {
      "what": "Credenciales de base de datos y configuración de usuario no documentadas en el README",
      "impact": "impide ejercitar el escenario 'crear ticket en Plane, observar su transición' — los ACs son inalcanzables",
      "evidence": "Se intentó iniciar siguiendo exactamente el README, pero en ninguna parte de la documentación hay un paso para configurar una base de datos de Plane o crear un usuario. Sin estos, el sistema arroja errores de conexión al inicio y no se puede ejercitar ningún AC."
    },
    {
      "what": "El slug del espacio de trabajo de Plane 'my-workspace' no existe",
      "impact": "PlaneTracker.list_ready no devuelve tickets — los ACs que requieren tickets en vivo no se pueden verificar",
      "evidence": "Se ejecutó el inicio documentado, luego se llamó al endpoint list_ready — la respuesta fue un array vacío. Se rastreó el problema hasta la API de Plane que devolvía 404 para el espacio de trabajo 'my-workspace', un requisito previo no mencionado en ningún documento de configuración."
    },
    {
      "what": "Proceso de compilación e inicio del sistema no documentado",
      "impact": "impide demostrar que el sistema en vivo funciona siguiendo la documentación",
      "evidence": "El README no contiene instrucciones de compilación o inicio. Hay un archivo docker-compose.yml pero no se menciona en la documentación. Un nuevo usuario que lea el README no tendría forma de poner el sistema en funcionamiento."
    },
    {
      "what": "Registro de depuración insuficiente",
      "impact": "impide la identificación de problemas en el sistema en vivo",
      "evidence": "Se desencadenaron transiciones de estado de tickets y se inspeccionaron los registros de docker — solo aparecieron mensajes de inicio a nivel INFO, sin líneas de registro por solicitud o por transición. El AC requiere observar las transiciones de estado en los registros, pero no se emite nada en tiempo de ejecución."
  ]
}

Reglas de estado:

EstadoCuándo
APROBADOCada etapa de fallo rápido pasó. El comportamiento implícito por todo el ticket se demostró ejecutando el sistema en vivo de verdad. failed_acs está vacío, sin blocked_items, sin discovered_blockers.
FALLOCualquier etapa falló, cualquier AC falló, cualquier AC es NO_SE_PUEDE_VERIFICAR, el sistema en vivo no se puede iniciar, o un escenario no se puede completar.
BLOQUEADOUna herramienta o acceso necesario no está disponible y no se puede obtener automáticamente (ej. paquete del sistema faltante, sin sudo, secreto faltante). Se necesita escalación humana. El sistema puede ser correcto o no — no puedes determinar cuál.

Bandera Rojas — DETENTE y Reporta FALLO

Si haces alguna de estas, detente. Estás racionalizando:

  • "0 aprobados, 0 fallados — técnicamente no es un fallo"
  • "El código se ve bien, la configuración/entorno está simplemente mal"
  • "Puedo verificar esto leyendo la implementación"
  • "Las pruebas cubren esta ruta de código"
  • "Puedo saltarme la prueba del navegador — la estructura del DOM es visible en el código fuente"
  • "Todas las rutas de código están verificadas por pruebas que pasan"
  • "No se descubrieron tickets en vivo, pero el código maneja este caso"
  • "Este AC trata sobre código, no sobre comportamiento en tiempo de ejecución"
  • "Tomaría demasiado tiempo configurar el sistema en vivo correctamente"
  • "Solo configuraré este requisito / arreglaré la configuración / crearé el usuario para que podamos verificar"
  • "El AC no menciona esta brecha, por lo que no cuenta como fallo"

Todos estos significan: estás encontrando razones para aprobar. Tu trabajo es encontrar razones para fallar.

Errores Comunes

ErrorCorrección
Tratar la salida de pytest 0 aprobados, 0 fallidos como APROBADOCero recopilados = FALLO cuando el proyecto tiene servicios que integrar.
Saltarse la automatización del navegador porque "las pruebas unitarias cubren el DOM"Los ACs de UI requieren verificación en vivo del navegador. No hay sustituto. Si no está disponible, reporta BLOQUEADO.
Aprobar ACs cuando el sistema en vivo no proporciona evidencia de que la línea de código se ejecutóErrores del sistema = FALLO. Arreglarlos tú mismo = ir más allá del límite.
Arreglar brechas de configuración (crear usuarios, configurar bases de datos)Sigue el README. Si es insuficiente, ESE es el fallo. Repórtalo.
Usar código fuente o pruebas para verificar el comportamientoEl comportamiento requiere observación en tiempo de ejecución.
Reducir los ACs a "el código hace X" en lugar de "el sistema hace Y"Los ACs

…

[truncado para traducción]

Skills relacionados