frontend → backend-api significa que revisões de frontend podem consultar backend-api, e não o contrário. Vincule as duas direções explicitamente se os dois times quiserem a verificação.
Quando você precisa disso
Três situações, todas comuns, todas invisíveis para uma revisão de repositório único:- Quebra de contrato producer/consumer. O backend renomeia um campo da API e o frontend continua lendo o antigo; um producer adiciona um valor de enum que nenhum consumer trata; writer e reader derivam a mesma chave de cache de formas diferentes. O contrato está dividido em dois repositórios e não é garantido por nada.
- O código do qual seu repositório depende não está no seu repositório. Git submodules, pacotes internos vendorizados, bibliotecas compartilhadas baixadas no build. A revisão clona seu repositório sem submodules e sem instalar pacotes, então uma dependência via submodule ou de build é um diretório vazio (ou um import que o agente não consegue seguir) durante a revisão. Se seus tipos, regras ou clients canônicos vivem num repositório assim, vinculá-lo é a única forma de a revisão lê-los.
- A mesma regra de negócio reimplementada por canal ou serviço. Precificação, disponibilidade, validação, transições de estado de pedido que existem uma vez num lugar canônico e são copiadas, aproximadamente, em outros. Vincular o repositório canônico permite que o agente compare com a fonte da verdade em vez de chutar.
O que a revisão já enxerga sem essa feature: o repositório completo em revisão (não só o diff) no commit head do PR, mais a descrição do PR. Ela consegue fazer grep e ler qualquer arquivo desse checkout. Não consegue ver outros repositórios, conteúdo de submodules nem dependências instaladas.
O que você ganha
Um exemplo concreto. Seu PR de frontend adiciona este tratamento de erro:Bug · medium — [cross-repo] O frontend verificaO resumo da revisão também mostra o que foi consultado: Additional context used:error.response?.data?.errorprocurandoINTEGRATION_NOT_APPROVED, mas osendErrordo backend (src/api/response.ts) retorna o código num campomessage. O branch de not-approved nunca casa, então os usuários sempre veem o toast de erro genérico. Leiadata.message.
org/backend-api@main.
Onde os achados caem
- Todo comentário cai numa linha do diff do seu PR. O código do repositório vinculado é citado dentro do comentário como evidência, com a tag
[cross-repo]e o arquivo da contraparte nomeado. O Kody nunca comenta, registra achados nem modifica o repositório vinculado. - Achados só são levantados com evidência confirmada no arquivo da contraparte — “este literal precisa bater com o backend” sem prova não é emitido.
- A linha Additional context used só aparece quando um repositório vinculado foi de fato lido durante a revisão. Sem a linha, ele não foi consultado (veja abaixo por que isso acontece).
Como funciona
Quando um pull request num repositório com repositórios vinculados toca superfície de fronteira, o agente de revisão do Kody pode buscar e ler os repositórios vinculados — do mesmo jeito que faz grep no seu próprio repositório — para verificar se os dois lados do contrato continuam de acordo. Os repositórios vinculados são baixados de forma preguiçosa, só quando o agente os lê pela primeira vez.O que arma a passagem
Configurar um vínculo não basta por si só. Antes da revisão, uma checagem determinística e barata varre as linhas adicionadas do diff do PR e só habilita as ferramentas cross-repo quando encontra superfície de fronteira:- literais de string (códigos, nomes de evento, segmentos de path, nomes de header)
- símbolos exportados (
export function/const/class/type/interface/enum) - membros de enum, type ou interface
- chaves de objeto / payload / DTO
- identificadores com cara de status, estado ou código de erro (
status,code,errorCode,kind,event,key, …) - paths com cara de contrato (
dto/,schema/,api/,types/,clients/,openapi,proto, …)
Quando você não vê nada
Se um PR num repositório com repositórios vinculados não mostra a linhaAdditional context used, aconteceu uma destas coisas, em ordem aproximada de probabilidade:
- O diff não tinha superfície de fronteira (o gate ficou desligado — esperado em refatorações).
- O gate estava ligado, mas o agente não precisou do repositório vinculado para chegar às conclusões.
- O repositório vinculado não pôde ser baixado (permissões, timeout) — a revisão continua sem ele.
- O repositório vinculado não está conectado a esta organização Kodus, ou o plano da organização não inclui a feature — o vínculo é ignorado.
- Só podem ser vinculados repositórios já conectados à mesma organização Kodus (o Kody reaproveita sua integração de Git existente — sem tokens extras).
- Até 3 repositórios vinculados por repositório.
- O acesso é somente leitura. O Kody nunca faz push, comenta nem modifica um repositório vinculado.
- Se um repositório vinculado não puder ser buscado (permissões, timeout), a revisão continua normalmente sem ele.
Adicionando um repositório vinculado
No app web
Vá em Code Review Settings → seu repositório → Linked Repositories, escolha um repositório da lista (só aparecem repositórios conectados) e salve. Cada vínculo tem dois campos opcionais, descritos abaixo.No kodus-config.yml
linkedRepositories também é uma chave do arquivo de config, então os vínculos podem ficar versionados junto com o resto das suas configurações de revisão:
repository(obrigatório) — nome completo de um repositório conectado à organização (owner/repo).instructions,ref— mesmo significado dos campos do app web (abaixo).
kodusConfigFileOverridesWebPreferences está habilitado para o repositório (Settings → Code Review → o repositório → General), é lido do branch padrão do repositório, e a lista linkedRepositories do arquivo substitui a lista da web para aquele repositório (as listas não são mescladas; linkedRepositories: [] no arquivo desliga a feature). A exigência de plano vale independentemente de onde os vínculos são declarados.
Instruções
Uma dica em texto livre que diz ao agente de revisão para que serve esse vínculo e onde olhar. O Kody funciona sem ela, mas uma boa instrução deixa a passagem entre repositórios mais rápida e precisa — é a diferença entre o agente explorar o repositório vinculado do zero e ir direto ao código relevante. Boas instruções nomeiam a relação e os caminhos que sustentam o contrato:A passagem cross-repo procura divergências na fronteira — um nome de campo, chave, encoding ou valor de status de um lado que não bate com o que o outro lado produz ou espera. Vincular uma biblioteca canônica remove o ponto cego (o agente passa a conseguir lê-la), mas não faz, por si só, a revisão apontar “já existe uma implementação canônica e este PR reimplementou uma versão mais fraca”. Se você quer essa checagem, codifique-a como uma Kody Rule e use a instrução para apontar onde vivem as implementações canônicas.
Ref pin (seleção de branch)
Controla qual branch (“ref”) do repositório vinculado o Kody lê. A maioria dos times deixa vazio: o Kody então lê a branch com o mesmo nome da branch do seu PR quando ela existe (para que mudanças coordenadas entre repositórios se enxerguem antes do merge), e cai na branch padrão caso contrário. A ordem completa de resolução, vence a primeira que casar:- Override na descrição do PR — mencione a branch ou o PR do repositório vinculado na descrição do PR em revisão (ex.:
org/backend-api#123ouorg/backend-api@feature-x). Pontual, prioridade máxima. Só vale para repositórios já vinculados. - Pin de
refna config (este campo), se definido. - PR aberto numa branch correspondente — um pull request aberto no repositório vinculado cuja head branch coincide com a head branch do seu PR.
- Mesmo nome de branch no repositório vinculado.
- A branch padrão do repositório vinculado (depois
main/mastercomo fallback).
main, develop, release/2.x) quando quiser revisões determinísticas contra uma branch estável — por exemplo, quando nomes de branch são reaproveitados entre repositórios para trabalhos não relacionados e o casamento por mesmo nome pegaria a coisa errada. O override na descrição do PR ainda vence o pin em casos pontuais.
O resumo da revisão sempre mostra qual ref foi realmente usado. Para um passo a passo com exemplos, veja Como usar repositórios vinculados.