Visão geral
A Validação de Regras de Negócio confere se um pull request entrega o que a tarefa pede. Kody encontra a tarefa que o PR referencia, lê no seu gerenciador de tarefas e lista cada requisito com a situação dele no código. O resultado é um comentário no PR, sempre atualizado, igual no GitHub, GitLab, Bitbucket, Azure Repos e Forgejo. Assim fica o comentário num PR que entrega parte da tarefa:Kody · Business Logic #291 · Ticket SLA badge — Para corrigir: 2 requisitos faltandoDepois da correção, o mesmo comentário diz “All requirements met · ✅ 3 of 3 met”, e guarda a conferência anterior logo abaixo.
Pré-requisitos
- Um gerenciador de tarefas conectado em Plugins: Linear, Jira (Atlassian Rovo), Notion, Git Issues ou um plugin customizado.
- Kody só lê tarefas pelo id, e o que elas referenciam (uma tarefa pai, sub-tarefas, documentos anexados). Ele nunca busca tarefas nem escreve no seu gerenciador.
- Sem gerenciador, você ainda pode colar o texto da tarefa no comando (veja abaixo).
Como ligar
Business Logic vem ligado por padrão. Ligue ou desligue em Code review → What to review, na linha Business Logic, ou nokodus-config.yml:
Como Kody encontra a tarefa
Kody procura referências de tarefa no título do PR, no nome da branch e na descrição, nessa ordem:- Chaves como
PROJ-123(Jira, Linear e a maioria dos gerenciadores) #123eowner/repo#123(issues do Git; um número que é um pull request é ignorado)AB#123(Azure Boards)- Links para Linear, Jira, Notion, issues do GitHub/GitLab e work items do Azure
UTF-8 ou gpt-5 num título nunca são confundidos com tarefas. Uma chave em minúsculas no título (feat(kod-10)) conta quando seu gerenciador tem aquele time ou projeto; um id de projeto do Linear (P-KOD-1) nunca conta.
Kody também lê o que a tarefa referencia:
- Uma tarefa pai (uma sub-issue do Linear, uma sub-task do Jira, uma subtask do ClickUp): o PR é conferido contra os requisitos da tarefa pai que o título desta tarefa cobre. Uma sub-issue que diz “veja a tarefa pai” ainda é conferida.
- Sub-tarefas: um requisito que uma delas entrega aparece como CHECK MANUALLY (“Delivered by KOD-20”), nunca como faltando.
- Documentos anexados à tarefa (docs do Linear): lidos como parte da tarefa, critérios incluídos.
Como o PR cita a tarefa
- “Closes PROJ-1” ou uma chave no título ou na branch: o PR é conferido contra a tarefa inteira.
- “Part of PROJ-1”: o PR entrega uma parte. O que falta é listado, mas não como algo a resolver antes do merge.
- “Refs PROJ-1”, “see PROJ-1” ou “related to PROJ-1” na descrição: uma menção. Só é conferida quando o PR não cita outra tarefa, e aí como a tarefa do próprio PR.
- Até três tarefas são conferidas por PR, uma seção para cada. Um PR que referencia mais (um release ou um merge) é pulado.
Os cinco estados
Cada linha cita o arquivo e a linha em que se baseia, e diz o que mudar.
Antes de um gap aparecer
Um gap manda o autor refazer trabalho, então Kody confronta cada um com o código:- O requisito como a tarefa escreve. Uma entrada ou caso extremo que a tarefa nunca cita (valores negativos, outro caminho do código, um formato que ela não menciona) nunca deixa uma linha PARTIAL, e o que acontece depois da mudança também não (que um job existente envia a mensagem que o PR enfileira, que uma rota usa o serializer que o PR preenche).
- O código que o PR chama, não só o diff. Quando uma regra mora num código que o PR chama mas não alterou (um validador, um helper, o mapper que monta uma resposta), Kody lê esse código no repositório, no head do PR, antes de mostrar qualquer coisa, e faz o mesmo para toda linha MISSING, PARTIAL e CHECK MANUALLY. Uma linha só vira MET com um arquivo e uma linha que Kody leu, e diz que já está no código, fora do diff. Uma linha só vira MISSING quando Kody leu o código de que o PR depende e cita a linha em que falta a regra. O que o repositório não decide fica como estava.
- Trabalho que pertence a outro lugar. Um requisito que uma sub-tarefa entrega, ou que a orientação do seu time diz que não é conferido aqui, fica CHECK MANUALLY e nunca é julgado de novo como faltando.
No pull request
- Kody confere o PR na primeira revisão. Depois disso, confere de novo quando alguém comenta
@kody -v business-logicou roda@kody review --force. Re-check também pode ser a cada push enquanto algo estiver faltando, para uma correção atualizar o comentário sem ninguém pedir, ou a cada push; cada um é mais uma validação por push. - Confira de novo quando quiser com
@kody -v business-logic. O mesmo comentário é editado; Kody nunca posta um segundo. - Um PR que cumpre a tarefa recebe um comentário de uma linha (”✅ 4 of 4 met”), mais o que houver para conferir manualmente, para o autor saber que foi conferido. Desligue Comment when every requirement is met para não comentar nesses casos.
- O comentário é o sinal em todas as plataformas: Kody não escreve check nem status, então nunca bloqueia um merge sozinho. O cabeçalho diz o que falta corrigir.
Respondendo ao comentário
Responda ao comentário de Business Logic mencionando@kody. Kody lê um comentário como resposta quando ele está na thread desse comentário (GitLab, Bitbucket, Azure Repos), cita o comentário, ou nomeia o requisito, o estado dele como o comentário escreve (MISSING, PARTIAL) ou o id da tarefa; qualquer outro comentário vai para o chat.
- Discordar: “Está coberto em
useDrag.ts”. Kody confere de novo o que você apontou e marca como MET ou diz o que olhou e mantém. - Aceitar um apontamento (alguém que não é o autor do PR: no GitHub, com permissão de escrita no repositório; no GitLab, Developer ou acima no repositório; no Bitbucket, Azure Repos e Forgejo, um membro da organização que a plataforma lista): “Reordenar pelo teclado está fora do escopo, foi para SAA-102”. Kody confirma que SAA-102 existe, marca a linha como ACCEPTED com quem aceitou, e ela deixa de ficar pendente. A decisão se mantém nas próximas conferências, mesmo quando Kody escreve o requisito de um jeito um pouco diferente, enquanto o texto da tarefa não mudar; se a tarefa for editada, o requisito precisa ser aceito de novo.
Quando Kody fica em silêncio
Kody só comenta quando o autor pode fazer algo:
O motivo de cada pulo é registrado e aparece na página de configurações de Business Logic.
Rodando sob demanda
Comente no PR (não numa linha de código):@kody -v business-logic: confere de novo as tarefas que o PR referencia@kody -v business-logic PROJ-123ou um link de tarefa: confere contra essa tarefa@kody -v business-logicseguido dos requisitos em texto: confere contra o que você escreveu, sem precisar de gerenciador
Configurações
Abra Code review → What to review e clique em Business Logic (ou ⋯ → Edit). Toda configuração pode ser global e sobrescrita por repositório ou diretório.- Task source: todos os gerenciadores conectados (plugins de tarefa customizados como o ClickUp incluídos), ou um plugin. Para um plugin customizado, escolha a ferramenta que lê uma tarefa pelo id; só ferramentas de leitura são oferecidas. Use Try it, fixo à direita da página (precisa de permissão para editar essas configurações): uma tarefa sozinha mostra o que Kody lê dela, e um pull request roda a conferência inteira sem postar, com as configurações da tela, salvas ou não. Post to the pull request posta o resultado mostrado, sem rodar de novo, uma vez por teste; é recusado se o pull request recebeu um commit depois do teste, então rode o teste de novo antes.
-
Custom task id format (opcional): uma expressão regular para ids que Kody não encontra sozinho:
T(\d{4})lêT1234como a tarefa 1234. Chaves comoSAA-96,#12,AB#8,CU-…e links de gerenciadores são encontrados sem ela, assim como uma chave em minúsculas comosc-123no nome da branch. No título ou na descrição, uma chave em minúsculas só conta quando o Linear ou o Jira tem aquele time ou projeto; para outro gerenciador, defina o formato. Um número que o formato captura só é lido como issue do Git quando Git Issues é a fonte de tarefas; com todos os gerenciadores conectados,T1234nunca vira a issue #1234 do repositório. -
Where acceptance criteria live: detectado automaticamente (um campo de critérios, um checklist ou uma lista na descrição), sob um título na descrição, ou num campo customizado; uma tarefa sem o campo é lida pela descrição. Com Under a heading em
Acceptance criteria, esta tarefa é conferida contra os três itens, e o parágrafo acima é contexto: - Comment when every requirement is met (ligado por padrão): um PR que entrega a tarefa recebe um comentário de uma linha. Desligado, não recebe nenhum; as lacunas continuam sendo postadas.
- Ask for a task when the PR references none: Kody comenta perguntando qual é a tarefa do PR (ou apontando o erro de digitação), em vez de pular. PRs abertos por bots, como Dependabot ou Renovate, ficam de fora. Um gerenciador fora do ar nunca conta.
- Re-check: só sob demanda (padrão), a cada push enquanto algo estiver faltando, ou a cada push. Cada conferência usa o modelo da sua organização, como um review, então a cada push custa uma validação por push.
-
Pull requests pulados: os que o code review pula são pulados aqui também: títulos com uma palavra ignorada (
ignoredTitleKeywords, comowip) e drafts quandorunOnDraftestá desligado. Um comentário@kody -v business-logicsempre roda. - Team guidance: notas que Kody segue ao julgar, por exemplo “Feature flags contam como implementadas quando a flag existe e vem desligada”. Ela não muda o formato do veredito nem faz Kody inventar requisitos.
Combinações comuns
As mesmas configurações no
kodus-config.yml:
Pela CLI
Um agente de código pode conferir o próprio trabalho antes de abrir o PR:--format json (ou --agent) imprime o mesmo veredito estruturado, para um agente agir. Nada é postado em pull request.
Cockpit
Cockpit → Delivered as asked mostra a fatia de PRs que cumpriram a tarefa, as mudanças fora da tarefa, quantas vezes os devs concordaram com Kody, e a divisão por quem escreveu o código (pessoas ou agentes de código, pelos autores dos commits e pelos trailersCo-Authored-By) e por time. Segue o seletor de repositório do Cockpit, e pode ser escondida em Organization → Cockpit como as outras abas.