Descripción General
La Validación de Lógica de Negocio comprueba que un pull request entrega lo que pide su tarea. Kody encuentra la tarea que referencia el PR, la lee de tu gestor de tareas y lista cada requisito con su estado en el código. El resultado es un único comentario en el PR, siempre actualizado, igual en GitHub, GitLab, Bitbucket, Azure Repos y Forgejo. Así se ve el comentario en un PR que entrega parte de su tarea:Kody · Business Logic #291 · Ticket SLA badge — Por corregir: 2 requisitos faltantesTras la corrección, el mismo comentario dice “All requirements met · ✅ 3 of 3 met”, y conserva debajo la verificación anterior.
Requisitos previos
- Un gestor de tareas conectado en Plugins: Linear, Jira (Atlassian Rovo), Notion, Git Issues o un plugin personalizado.
- Kody solo lee tareas por su id, y lo que enlazan (una tarea padre, subtareas, documentos adjuntos). Nunca busca tareas ni escribe en tu gestor.
- Sin un gestor, puedes pegar el texto de la tarea en el comando (ver más abajo).
Activarla
Business Logic está activada por defecto. Actívala o desactívala en Code review → What to review, en la fila Business Logic, o enkodus-config.yml:
Cómo encuentra Kody la tarea
Kody busca referencias a tareas en el título del PR, el nombre de la rama y la descripción, en ese orden:- Claves como
PROJ-123(Jira, Linear y la mayoría de los gestores) #123yowner/repo#123(Git issues; un número que corresponde a un pull request se ignora)AB#123(Azure Boards)- Enlaces a Linear, Jira, Notion, issues de GitHub/GitLab y work items de Azure
UTF-8 o gpt-5 en un título nunca se confunden con tareas. Una clave en minúsculas en el título (feat(kod-10)) cuenta cuando tu gestor tiene ese equipo o proyecto; un id de proyecto de Linear (P-KOD-1) nunca cuenta.
Kody también lee lo que enlaza la tarea:
- Una tarea padre (un sub-issue de Linear, una subtarea de Jira, una subtarea de ClickUp): el PR se compara con los requisitos del padre que cubre el título de esta tarea. Un sub-issue que dice “ver el padre” también se comprueba.
- Subtareas: un requisito que entrega una de ellas aparece como CHECK MANUALLY (“Delivered by KOD-20”), nunca como faltante.
- Documentos adjuntos a la tarea (docs de Linear): se leen como parte de la tarea, criterios incluidos.
Cómo el PR nombra la tarea
- “Closes PROJ-1” o una clave en el título o la rama: el PR se compara con la tarea completa.
- “Part of PROJ-1”: el PR entrega una parte. Lo que falta se lista, pero no como algo pendiente para el merge.
- “Refs PROJ-1”, “see PROJ-1” o “related to PROJ-1” en la descripción: una mención. Solo se comprueba cuando el PR no nombra otra tarea, y entonces como la tarea del propio PR.
- Hasta tres tareas se comprueban por PR, una sección por cada una. Un PR que menciona más (una release o un merge) se omite.
Los cinco estados
Cada fila cita el archivo y la línea en que se basa, y dice qué cambiar.
Antes de mostrar una brecha
Una brecha le dice al autor que rehaga trabajo, así que Kody contrasta cada una con el código:- El requisito tal como lo escribe la tarea. Una entrada o un caso límite que la tarea nunca menciona (importes negativos, otra ruta de código, un formato que no menciona) nunca hace que una fila sea PARTIAL, y tampoco lo que ocurre después del cambio (que un job existente envíe el mensaje que el PR pone en cola, que una ruta use el serializador que el PR completa).
- El código que llama el PR, no solo el diff. Cuando una regla vive en código que el PR llama pero no modificó (un validador, un helper, el mapper que construye una respuesta), Kody lo lee en el repositorio en el head del PR antes de mostrar nada, y hace lo mismo con cada fila MISSING, PARTIAL y CHECK MANUALLY. Una fila pasa a MET solo con un archivo y una línea que Kody leyó, e indica que ya está en el código, fuera del diff. Una fila pasa a MISSING solo cuando Kody leyó el código del que depende el PR y cita la línea a la que le falta la regla. Lo que el repositorio no resuelve se queda como estaba.
- Trabajo que corresponde a otro lugar. Un requisito que entrega una subtarea, o uno que las indicaciones de tu equipo dicen que no se comprueba aquí, se queda en CHECK MANUALLY y nunca se vuelve a juzgar como faltante.
En el pull request
- Kody comprueba el PR en su primera revisión. Después, vuelve a comprobarlo cuando alguien comenta
@kody -v business-logico ejecuta@kody review --force. Re-check también se puede configurar para cada push mientras falte algo, para que una corrección actualice el comentario sin que nadie lo pida, o para cada push; cada opción suma una validación por push. - Vuelve a comprobar en cualquier momento con
@kody -v business-logic. Se edita el mismo comentario; Kody nunca publica un segundo. - Un PR que cumple su tarea recibe un comentario de una línea (”✅ 4 of 4 met”), más lo que haya que comprobar a mano, para que el autor sepa que se comprobó. Desactiva Comment when every requirement is met para no comentar en esos casos.
- El comentario es la señal en todas las plataformas: Kody no escribe un check ni un status, así que nunca bloquea un merge por sí solo. Su encabezado dice lo que queda por corregir.
Responder al comentario
Responde al comentario de Business Logic y menciona a@kody. Kody lee un comentario como respuesta cuando está en el hilo de ese comentario (GitLab, Bitbucket, Azure Repos), lo cita, o nombra el requisito, su estado tal como lo escribe el comentario (MISSING, PARTIAL) o el id de la tarea; cualquier otro comentario va al chat.
- Discrepar: “Está cubierto en
useDrag.ts”. Kody vuelve a comprobar lo que señalaste y lo marca como MET o dice qué revisó y lo mantiene. - Aceptar un hallazgo (alguien que no es el autor del PR: en GitHub, con permiso de escritura en el repositorio; en GitLab, Developer o superior en el repositorio; en Bitbucket, Azure Repos y Forgejo, un miembro de la organización que la plataforma lista): “El reordenamiento con teclado está fuera del alcance, movido a SAA-102”. Kody confirma que SAA-102 existe, marca la fila como ACCEPTED con quién la aceptó, y deja de estar pendiente de corregir. La decisión se mantiene en las comprobaciones posteriores, aunque Kody redacte el requisito de forma un poco distinta, mientras el texto de la tarea no cambie; si la tarea se edita, hay que aceptar el requisito de nuevo.
Cuándo Kody no comenta
Kody solo comenta cuando el autor puede hacer algo al respecto:
El motivo de cada omisión queda registrado y se muestra en la página de configuración de Business Logic.
Ejecución bajo demanda
Comenta en el PR (no en una línea de código):@kody -v business-logic: vuelve a comprobar las tareas que referencia el PR@kody -v business-logic PROJ-123o un enlace a una tarea: compara con esa tarea@kody -v business-logicseguido de los requisitos en texto: compara con lo que escribiste, sin necesidad de gestor
Configuración
Abre Code review → What to review y haz clic en Business Logic (o ⋯ → Edit). Cada opción se puede definir de forma global y sobrescribir por repositorio o directorio.- Task source: todos los gestores conectados (plugins de tareas personalizados como ClickUp incluidos), o un solo plugin. Para un plugin personalizado, elige la herramienta que lee una tarea por su id; solo se ofrecen herramientas de solo lectura. Usa Try it, fijo a la derecha de la página (necesita permiso para editar esta configuración): una tarea sola muestra lo que Kody lee de ella, y un pull request ejecuta la comprobación completa sin publicar, con la configuración que hay en pantalla, guardada o no. Post to the pull request publica el resultado mostrado, sin ejecutarlo de nuevo, una vez por prueba; se rechaza si el pull request recibió un commit después de la prueba, así que vuelve a ejecutarla primero.
-
Custom task id format (opcional): una expresión regular para ids que Kody no encuentra por sí solo:
T(\d{4})leeT1234como la tarea 1234. Claves comoSAA-96,#12,AB#8,CU-…y los enlaces de gestores se encuentran sin ella, igual que una clave en minúsculas comosc-123en el nombre de una rama. En un título o una descripción, una clave en minúsculas solo cuenta cuando Linear o Jira tienen ese equipo o proyecto; para otro gestor, define el formato. Un número que el formato captura solo se lee como issue de Git cuando Git Issues es la fuente de tareas; con todos los gestores conectados,T1234nunca es la issue #1234 del repositorio. -
Where acceptance criteria live: detectado automáticamente (un campo de criterios, un checklist o una lista en la descripción), bajo un encabezado en la descripción, o en un campo personalizado; una tarea sin ese campo se lee desde su descripción. Con Under a heading en
Acceptance criteria, esta tarea se compara con sus tres viñetas, y el párrafo de arriba es contexto: - Comment when every requirement is met (activado por defecto): un PR que cumple su tarea recibe un comentario de una línea. Desactivado, no recibe ninguno; los huecos se publican igual.
- Ask for a task when the PR references none: Kody comenta preguntando para qué tarea es el PR (o señalando el error tipográfico), en lugar de omitirlo. Los PRs abiertos por bots, como Dependabot o Renovate, se dejan en paz. Un gestor caído nunca cuenta.
- Re-check: solo a petición (por defecto), en cada push mientras falte algo, o en cada push. Cada verificación usa el modelo de tu organización, como una revisión, así que en cada push cuesta una validación por push.
-
Skipped pull requests: los que omite la revisión de código también se omiten aquí: títulos con una palabra clave ignorada (
ignoredTitleKeywords, comowip) y borradores cuandorunOnDraftestá desactivado. Un comentario@kody -v business-logicsiempre se ejecuta. - Team guidance: notas que Kody sigue al juzgar, por ejemplo “Los feature flags cuentan como implementados cuando el flag existe y está desactivado por defecto”. No pueden cambiar el formato del veredicto ni hacer que Kody invente requisitos.
Configuraciones comunes
La misma configuración en
kodus-config.yml:
Desde la CLI
Un agente de código puede comprobar su trabajo antes de abrir el PR:--format json (o --agent) imprime el mismo veredicto estructurado, para que un agente actúe sobre él. No se publica nada en ningún pull request.
Cockpit
Cockpit → Delivered as asked muestra la proporción de PRs que cumplieron su tarea, los cambios que no están en la tarea, con qué frecuencia los desarrolladores estuvieron de acuerdo con Kody, y el desglose por quién escribió el código (personas o agentes de código, según los autores de los commits y los trailersCo-Authored-By) y por equipo. Sigue el selector de repositorio del Cockpit, y se puede ocultar en Organization → Cockpit como las otras pestañas.